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.de.php < prev    next >
Encoding:
PHP Script  |  2008-07-02  |  8.9 KB  |  322 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: Piotr Klaban <makler@man.torun.pl>                          |
  18. // +----------------------------------------------------------------------+
  19. //
  20. // $Id: lang.de.php,v 1.3 2004/09/30 07:44:33 makler Exp $
  21. //
  22. // Numbers_Words class extension to spell numbers in German language.
  23. //
  24.  
  25. /**
  26.  *
  27.  * Class for translating numbers into German.
  28.  * @author Piotr Klaban
  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 German.
  39.  *
  40.  * @author Piotr Klaban
  41.  * @package Numbers_Words
  42.  */
  43. class Numbers_Words_de extends Numbers_Words
  44. {
  45.  
  46.     // {{{ properties
  47.     
  48.     /**
  49.      * Locale name
  50.      * @var string
  51.      * @access public
  52.      */
  53.     var $locale      = 'de';
  54.  
  55.     /**
  56.      * Language name in English
  57.      * @var string
  58.      * @access public
  59.      */
  60.     var $lang        = 'German';
  61.  
  62.     /**
  63.      * Native language name
  64.      * @var string
  65.      * @access public
  66.      */
  67.     var $lang_native = 'Deutsch';
  68.     
  69.     /**
  70.      * The word for the minus sign
  71.      * @var string
  72.      * @access private
  73.      */
  74.     var $_minus = 'Minus'; // minus sign
  75.  
  76.     /**
  77.      * The sufixes for exponents (singular and plural)
  78.      * Names partly based on:
  79.      * http://german.about.com/library/blzahlenaud.htm
  80.      * http://www3.osk.3web.ne.jp/~nagatani/common/zahlwort.htm
  81.      * @var array
  82.      * @access private
  83.      */
  84.     var $_exponent = array(
  85.         0 => array(''),
  86.         3 => array('tausend','tausend'),
  87.         6 => array('Million','Millionen'),
  88.         9 => array('Milliarde','Milliarden'),
  89.        12 => array('Billion','Billionen'),
  90.        15 => array('Billiarde','Billiarden'),
  91.        18 => array('Trillion','Trillionen'),
  92.        21 => array('Trilliarde','Trilliarden'),
  93.        24 => array('Quadrillion','Quadrillionen'),
  94.        27 => array('Quadrilliarde','Quadrilliarden'),
  95.        30 => array('Quintillion','Quintillionen'),
  96.        33 => array('Quintilliarde','Quintilliarden'),
  97.        36 => array('Sextillion','Sextillionen'),
  98.        39 => array('Sextilliarde','Sextilliarden'),
  99.        42 => array('Septillion','Septillionen'),
  100.        45 => array('Septilliarde','Septilliarden'),
  101.        48 => array('Oktillion','Oktillionen'), // oder Octillionen
  102.        51 => array('Oktilliarde','Oktilliarden'),
  103.        54 => array('Nonillion','Nonillionen'),
  104.        57 => array('Nonilliarde','Nonilliarden'),
  105.        60 => array('Dezillion','Dezillionen'),
  106.        63 => array('Dezilliarde','Dezilliarden'),
  107.       120 => array('Vigintillion','Vigintillionen'),
  108.       123 => array('Vigintilliarde','Vigintilliarden'),
  109.       600 => array('Zentillion','Zentillionen'), // oder Centillion
  110.       603 => array('Zentilliarde','Zentilliarden')
  111.         );
  112.  
  113.     /**
  114.      * The array containing the digits (indexed by the digits themselves).
  115.      * @var array
  116.      * @access private
  117.      */
  118.     var $_digits = array(
  119.         0 => 'null', 'ein', 'zwei', 'drei', 'vier',
  120.         'fⁿnf', 'sechs', 'sieben', 'acht', 'neun'
  121.     );
  122.  
  123.     /**
  124.      * The word separator
  125.      * @var string
  126.      * @access private
  127.      */
  128.     var $_sep  = '';
  129.     
  130.     /**
  131.      * The exponent word separator
  132.      * @var string
  133.      * @access private
  134.      */
  135.     var $_sep2 = ' ';
  136.  
  137.     // }}}
  138.     // {{{ toWords()
  139.  
  140.     /**
  141.      * Converts a number to its word representation
  142.      * in German language.
  143.      *
  144.      * @param  integer $num   An integer between -infinity and infinity inclusive :)
  145.      *                        that need to be converted to words
  146.      * @param  integer $power The power of ten for the rest of the number to the right.
  147.      *                        Optional, defaults to 0.
  148.      * @param  integer $powsuffix The power name to be added to the end of the return string.
  149.      *                        Used internally. Optional, defaults to ''.
  150.      *
  151.      * @return string  The corresponding word representation
  152.      *
  153.      * @access private
  154.      * @author Piotr Klaban <makler@man.torun.pl>
  155.      * @since  PHP 4.2.3
  156.      */
  157.     function toWords($num, $power = 0, $powsuffix = '') {
  158.       $ret = '';        
  159.         
  160.       // add a minus sign
  161.       if (substr($num, 0, 1) == '-') {
  162.         $ret = $this->_sep . $this->_minus;
  163.         $num = substr($num, 1);
  164.       }
  165.         
  166.       // strip excessive zero signs and spaces
  167.       $num = trim($num);
  168.       $num = preg_replace('/^0+/','',$num);
  169.         
  170.       if (strlen($num) > 3) {
  171.           $maxp = strlen($num)-1;
  172.           $curp = $maxp;
  173.           for ($p = $maxp; $p > 0; --$p) { // power
  174.             
  175.             // check for highest power
  176.             if (isset($this->_exponent[$p])) {
  177.               // send substr from $curp to $p
  178.               $snum = substr($num, $maxp - $curp, $curp - $p + 1);
  179.               $snum = preg_replace('/^0+/','',$snum);
  180.               if ($snum !== '') {
  181.                   $cursuffix = $this->_exponent[$power][count($this->_exponent[$power])-1];
  182.                   if ($powsuffix != '')
  183.                     $cursuffix .= $this->_sep . $powsuffix;
  184.                   $ret .= $this->toWords($snum, $p, $cursuffix);
  185.               }
  186.               $curp = $p - 1;
  187.               continue;
  188.             }
  189.           }
  190.           $num = substr($num, $maxp - $curp, $curp - $p + 1);
  191.           if ($num == 0) {
  192.               return $ret;
  193.           }
  194.       } elseif ($num == 0 || $num == '') {
  195.         return $this->_sep . $this->_digits[0];
  196.       }
  197.     
  198.       $h = $t = $d = 0;
  199.       
  200.       switch(strlen($num)) {
  201.         case 3:
  202.           $h = (int)substr($num,-3,1);
  203.  
  204.         case 2:
  205.           $t = (int)substr($num,-2,1);
  206.  
  207.         case 1:
  208.           $d = (int)substr($num,-1,1);
  209.           break;
  210.  
  211.         case 0:
  212.           return;
  213.           break;
  214.       }
  215.  
  216.       if ($h) {
  217.         
  218.         $ret .= $this->_sep . $this->_digits[$h] . $this->_sep . 'hundert';
  219.       }
  220.  
  221.       if ($t != 1 && $d > 0) { // add digits only in <0>,<1,9> and <21,inf>
  222.         if ($t > 0) {
  223.           $ret .= $this->_digits[$d] . 'und';
  224.         } else {
  225.           $ret .= $this->_digits[$d];
  226.           if ($d == 1)
  227.             if ($power == 0) {
  228.               $ret .= 's'; // fuer eins
  229.             } else {
  230.               if ($power != 3) {  // tausend ausnehmen
  231.                 $ret .= 'e'; // fuer eine
  232.               }
  233.             }
  234.         }
  235.       }
  236.  
  237.       // ten, twenty etc.
  238.       switch ($t) {
  239.       case 9:
  240.       case 8:
  241.       case 5:
  242.           $ret .= $this->_sep . $this->_digits[$t] . 'zig';
  243.           break;
  244.     
  245.       case 7:
  246.           $ret .= $this->_sep . 'siebzig';
  247.           break;
  248.     
  249.       case 6:
  250.           $ret .= $this->_sep . 'sechzig';
  251.           break;
  252.     
  253.       case 4:
  254.           $ret .= $this->_sep . 'vierzig';
  255.           break;
  256.     
  257.       case 3:
  258.           $ret .= $this->_sep . 'drei▀ig';
  259.           break;
  260.     
  261.       case 2:
  262.           $ret .= $this->_sep . 'zwanzig';
  263.           break;
  264.     
  265.       case 1:
  266.           switch ($d) {
  267.           case 0:
  268.               $ret .= $this->_sep . 'zehn';
  269.               break;
  270.     
  271.           case 1:
  272.               $ret .= $this->_sep . 'elf';
  273.               break;
  274.     
  275.           case 2:
  276.               $ret .= $this->_sep . 'zw÷lf';
  277.               break;
  278.     
  279.           case 3:
  280.           case 4:
  281.           case 5:
  282.           case 8:
  283.           case 9:
  284.               $ret .= $this->_sep . $this->_digits[$d] . 'zehn';
  285.               break;
  286.     
  287.           case 6:
  288.               $ret .= $this->_sep . 'sechzehn';
  289.               break;
  290.     
  291.           case 7:
  292.               $ret .= $this->_sep . 'siebzehn';
  293.               break;
  294.           }
  295.           break; 
  296.       }
  297.  
  298.       if ($power > 0) {
  299.         if (isset($this->_exponent[$power]))
  300.           $lev = $this->_exponent[$power];
  301.     
  302.         if (!isset($lev) || !is_array($lev))
  303.           return null;
  304.      
  305.         if ($power == 3)
  306.           $ret .= $this->_sep . $lev[0];
  307.         elseif ($d == 1 && ($t+$h) == 0)
  308.           $ret .= $this->_sep2 . $lev[0] . $this->_sep2;
  309.         else
  310.           $ret .= $this->_sep2 . $lev[1] . $this->_sep2;
  311.       }
  312.     
  313.       if ($powsuffix != '')
  314.         $ret .= $this->_sep . $powsuffix;
  315.     
  316.       return $ret;
  317.     }
  318.     // }}}
  319. }
  320.  
  321. ?>
  322.