home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / php / PEAR / Numbers / Words / lang.et.php < prev    next >
Encoding:
PHP Script  |  2008-07-02  |  11.0 KB  |  350 lines

  1. <?php
  2. /* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */
  3. //
  4. // +----------------------------------------------------------------------+
  5. // | PHP version 4                                                        |
  6. // +----------------------------------------------------------------------+
  7. // | Copyright (c) 1997-2003 The PHP Group                                |
  8. // +----------------------------------------------------------------------+
  9. // | This source file is subject to version 3.0 of the PHP license,       |
  10. // | that is bundled with this package in the file LICENSE, and is        |
  11. // | available at through the world-wide-web at                           |
  12. // | http://www.php.net/license/3_0.txt.                                  |
  13. // | If you did not receive a copy of the PHP license and are unable to   |
  14. // | obtain it through the world-wide-web, please send a note to          |
  15. // | license@php.net so we can mail you a copy immediately.               |
  16. // +----------------------------------------------------------------------+
  17. // | Authors: Erkki Saarniit <erkki@center.ee>                            |
  18. // +----------------------------------------------------------------------+
  19. //
  20. // $Id: lang.et.php,v 1.1 2006/06/12 13:50:07 makler Exp $
  21. //
  22. // Numbers_Words class extension to spell numbers in Estonian language.
  23. //
  24.  
  25. /**
  26.  * Class for translating numbers into Estonian.
  27.  *
  28.  * @author Erkki Saarniit
  29.  * @package Numbers_Words
  30.  */
  31.  
  32. /**
  33.  * Include needed files
  34.  */
  35. require_once("Numbers/Words.php");
  36.  
  37. /**
  38.  * Class for translating numbers into Estonian.
  39.  *
  40.  * @author Erkki Saarniit
  41.  * @package Numbers_Words
  42.  */
  43. class Numbers_Words_et extends Numbers_Words
  44. {
  45.  
  46.     // {{{ properties
  47.     
  48.     /**
  49.      * Locale name
  50.      * @var string
  51.      * @access public
  52.      */
  53.     var $locale      = 'et';
  54.  
  55.     /**
  56.      * Language name in English
  57.      * @var string
  58.      * @access public
  59.      */
  60.     var $lang        = 'Estonian';
  61.  
  62.     /**
  63.      * Native language name
  64.      * @var string
  65.      * @access public
  66.      */
  67.     var $lang_native = 'eesti keel';
  68.     
  69.     /**
  70.      * The word for the minus sign
  71.      * @var string
  72.      * @access private
  73.      */
  74.     var $_minus = 'miinus'; // minus sign
  75.     
  76.     /**
  77.      * The sufixes for exponents (singular and plural)
  78.      * Names partly based on:
  79.      * http://home.earthlink.net/~mrob/pub/math/largenum.html
  80.      * http://mathforum.org/dr.math/faq/faq.large.numbers.html
  81.      * http://www.mazes.com/AmericanNumberingSystem.html
  82.      * @var array
  83.      * @access private
  84.      */
  85.     var $_exponent = array(
  86.         0 => array(''),
  87.         3 => array('tuhat'),
  88.         6 => array('miljon'),
  89.         9 => array('miljard'),
  90.        12 => array('triljon'),
  91.        15 => array('kvadriljon'),
  92.        18 => array('kvintiljon'),
  93.        21 => array('sekstiljon'),
  94.        24 => array('septiljon'),
  95.        27 => array('oktiljon'),
  96.        30 => array('noniljon'),
  97.        33 => array('dekiljon'),
  98.        36 => array('undekiljon'),
  99.        39 => array('duodekiljon'),
  100.        42 => array('tredekiljon'),
  101.        45 => array('kvattuordekiljon'),
  102.        48 => array('kvindekiljon'),
  103.        51 => array('seksdekiljon'),
  104.        54 => array('septendekiljon'),
  105.        57 => array('oktodekiljon'),
  106.        60 => array('novemdekiljon'),
  107.        63 => array('vigintiljon'),
  108.        66 => array('unvigintiljon'),
  109.        69 => array('duovigintiljon'),
  110.        72 => array('trevigintiljon'),
  111.        75 => array('kvattuorvigintiljon'),
  112.        78 => array('kvinvigintiljon'),
  113.        81 => array('seksvigintiljon'),
  114.        84 => array('septenvigintiljon'),
  115.        87 => array('oktovigintiljon'),
  116.        90 => array('novemvigintiljon'),
  117.        93 => array('trigintiljon'),
  118.        96 => array('untrigintiljon'),
  119.        99 => array('duotrigintiljon'),
  120.       102 => array('trestrigintiljon'),
  121.       105 => array('kvattuortrigintiljon'),
  122.       108 => array('kvintrigintiljon'),
  123.       111 => array('sekstrigintiljon'),
  124.       114 => array('septentrigintiljon'),
  125.       117 => array('oktotrigintiljon'),
  126.       120 => array('novemtrigintiljon'),
  127.       123 => array('kvadragintiljon'),
  128.       126 => array('unkvadragintiljon'),
  129.       129 => array('duokvadragintiljon'),
  130.       132 => array('trekvadragintiljon'),
  131.       135 => array('kvattuorkvadragintiljon'),
  132.       138 => array('kvinkvadragintiljon'),
  133.       141 => array('sekskvadragintiljon'),
  134.       144 => array('septenkvadragintiljon'),
  135.       147 => array('oktokvadragintiljon'),
  136.       150 => array('novemkvadragintiljon'),
  137.       153 => array('kvinkvagintiljon'),
  138.       156 => array('unkvinkvagintiljon'),
  139.       159 => array('duokvinkvagintiljon'),
  140.       162 => array('trekvinkvagintiljon'),
  141.       165 => array('kvattuorkvinkvagintiljon'),
  142.       168 => array('kvinkvinkvagintiljon'),
  143.       171 => array('sekskvinkvagintiljon'),
  144.       174 => array('septenkvinkvagintiljon'),
  145.       177 => array('oktokvinkvagintiljon'),
  146.       180 => array('novemkvinkvagintiljon'),
  147.       183 => array('seksagintiljon'),
  148.       186 => array('unseksagintiljon'),
  149.       189 => array('duoseksagintiljon'),
  150.       192 => array('treseksagintiljon'),
  151.       195 => array('kvattuorseksagintiljon'),
  152.       198 => array('kvinseksagintiljon'),
  153.       201 => array('seksseksagintiljon'),
  154.       204 => array('septenseksagintiljon'),
  155.       207 => array('oktoseksagintiljon'),
  156.       210 => array('novemseksagintiljon'),
  157.       213 => array('septuagintiljon'),
  158.       216 => array('unseptuagintiljon'),
  159.       219 => array('duoseptuagintiljon'),
  160.       222 => array('treseptuagintiljon'),
  161.       225 => array('kvattuorseptuagintiljon'),
  162.       228 => array('kvinseptuagintiljon'),
  163.       231 => array('seksseptuagintiljon'),
  164.       234 => array('septenseptuagintiljon'),
  165.       237 => array('oktoseptuagintiljon'),
  166.       240 => array('novemseptuagintiljon'),
  167.       243 => array('oktogintiljon'),
  168.       246 => array('unoktogintiljon'),
  169.       249 => array('duooktogintiljon'),
  170.       252 => array('treoktogintiljon'),
  171.       255 => array('kvattuoroktogintiljon'),
  172.       258 => array('kvinoktogintiljon'),
  173.       261 => array('seksoktogintiljon'),
  174.       264 => array('septoktogintiljon'),
  175.       267 => array('oktooktogintiljon'),
  176.       270 => array('novemoktogintiljon'),
  177.       273 => array('nonagintiljon'),
  178.       276 => array('unnonagintiljon'),
  179.       279 => array('duononagintiljon'),
  180.       282 => array('trenonagintiljon'),
  181.       285 => array('kvattuornonagintiljon'),
  182.       288 => array('kvinnonagintiljon'),
  183.       291 => array('seksnonagintiljon'),
  184.       294 => array('septennonagintiljon'),
  185.       297 => array('oktononagintiljon'),
  186.       300 => array('novemnonagintiljon'),
  187.       303 => array('kentiljon'),
  188.       309 => array('duokentiljon'),
  189.       312 => array('trekentiljon'),
  190.       366 => array('primo-vigesimo-kentiljon'),
  191.       402 => array('trestrigintakentiljon'),
  192.       603 => array('dukentiljon'),
  193.       624 => array('septendukentiljon'),
  194.      2421 => array('seksoktingentiljon'),
  195.      3003 => array('milliljon'),
  196.   3000003 => array('milli-milliljon')
  197.         );
  198.  
  199.     /**
  200.      * The array containing the digits (indexed by the digits themselves).
  201.      * @var array
  202.      * @access private
  203.      */
  204.     var $_digits = array(
  205.         0 => 'null', 'ⁿks', 'kaks', 'kolm', 'neli',
  206.         'viis', 'kuus', 'seitse', 'kaheksa', 'ⁿheksa'
  207.     );
  208.  
  209.     /**
  210.      * The word separator
  211.      * @var string
  212.      * @access private
  213.      */
  214.     var $_sep = ' ';
  215.  
  216.     // }}}
  217.     // {{{ toWords()
  218.  
  219.     /**
  220.      * Converts a number to its word representation
  221.      * in Estonian language
  222.      *
  223.      * @param  integer $num   An integer between -infinity and infinity inclusive :)
  224.      *                        that need to be converted to words
  225.      * @param  integer $power The power of ten for the rest of the number to the right.
  226.      *                        Optional, defaults to 0.
  227.      * @param  integer $powsuffix The power name to be added to the end of the return string.
  228.      *                        Used internally. Optional, defaults to ''.
  229.      *
  230.      * @return string  The corresponding word representation
  231.      *
  232.      * @access public
  233.      * @since  PHP 4.2.3
  234.      */
  235.     function toWords($num, $power = 0, $powsuffix = '') {
  236.       $ret = '';        
  237.       
  238.       if (substr($num, 0, 1) == '-') {
  239.         $ret = $this->_sep . $this->_minus;
  240.         $num = substr($num, 1);
  241.       }
  242.         
  243.       $num = trim($num);
  244.       $num = preg_replace('/^0+/','',$num);
  245.         
  246.       if (strlen($num) > 3) {
  247.           $maxp = strlen($num)-1;
  248.           $curp = $maxp;
  249.           for ($p = $maxp; $p > 0; --$p) { // power
  250.             if (isset($this->_exponent[$p])) {
  251.               $snum = substr($num, $maxp - $curp, $curp - $p + 1);
  252.               $snum = preg_replace('/^0+/','',$snum);
  253.               if ($snum !== '') {
  254.                   $cursuffix = $this->_exponent[$power][count($this->_exponent[$power])-1];
  255.                   if ($powsuffix != '')
  256.                     $cursuffix .= $this->_sep . $powsuffix;
  257.                   $ret .= $this->toWords($snum, $p, $cursuffix);
  258.               }
  259.               $curp = $p - 1;
  260.               continue;
  261.             }
  262.           }
  263.           $num = substr($num, $maxp - $curp, $curp - $p + 1);
  264.           if ($num == 0) {
  265.               return $ret;
  266.           }
  267.       } elseif ($num == 0 || $num == '') {
  268.         return $this->_sep . $this->_digits[0];
  269.       }
  270.     
  271.       $h = $t = $d = 0;
  272.       
  273.       switch(strlen($num)) {
  274.         case 3:
  275.           $h = (int)substr($num,-3,1);
  276.  
  277.         case 2:
  278.           $t = (int)substr($num,-2,1);
  279.  
  280.         case 1:
  281.           $d = (int)substr($num,-1,1);
  282.           break;
  283.  
  284.         case 0:
  285.           return;
  286.           break;
  287.       }
  288.     
  289.       if ($h) {
  290.         $ret .= $this->_sep . $this->_digits[$h] . 'sada';
  291.  
  292.       }
  293.  
  294.       switch ($t) {
  295.       case 9:
  296.       case 8:
  297.       case 7:
  298.       case 6:
  299.       case 5:
  300.       case 4:
  301.       case 3:
  302.       case 2:
  303.           $ret .= $this->_sep . $this->_digits[$t] . 'kⁿmmend';
  304.           break;
  305.     
  306.       case 1:
  307.           switch ($d) {
  308.           case 0:
  309.               $ret .= $this->_sep . 'kⁿmme';
  310.               break;
  311.     
  312.           case 1:
  313.           case 2:
  314.           case 3:
  315.           case 4:
  316.           case 5:
  317.           case 6:
  318.           case 7:
  319.           case 8:
  320.           case 9:
  321.               $ret .= $this->_sep . $this->_digits[$d] . 'teist';
  322.               break;
  323.           }
  324.           break; 
  325.       }
  326.       if ($t != 1 && $d > 0) {
  327.         if ($t > 1) {
  328.           $ret .= ' ' . $this->_digits[$d];
  329.         } else {
  330.           $ret .= $this->_sep . $this->_digits[$d];
  331.         }
  332.       }
  333.       if ($power > 0) {
  334.         if (isset($this->_exponent[$power]))
  335.           $lev = $this->_exponent[$power];
  336.     
  337.         if (!isset($lev) || !is_array($lev))
  338.           return null;
  339.         $ret .= $this->_sep . $lev[0].($num != 1 && $power!= 3 ? 'it' : '');
  340.       }
  341.       if ($powsuffix != '')
  342.         $ret .= $this->_sep . $powsuffix;
  343.     
  344.       return $ret;
  345.     }
  346.     // }}}
  347. }
  348.  
  349. ?>
  350.