Viewing file: Words.php (6.41 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */ // // +----------------------------------------------------------------------+ // | PHP version 4 | // +----------------------------------------------------------------------+ // | Copyright (c) 1997-2006 The PHP Group | // +----------------------------------------------------------------------+ // | This source file is subject to version 3.0 of the PHP license, | // | that is bundled with this package in the file LICENSE, and is | // | available at through the world-wide-web at | // | http://www.php.net/license/3_0.txt. | // | If you did not receive a copy of the PHP license and are unable to | // | obtain it through the world-wide-web, please send a note to | // | license@php.net so we can mail you a copy immediately. | // +----------------------------------------------------------------------+ // | Authors: Piotr Klaban <makler@man.torun.pl> | // +----------------------------------------------------------------------+ // // $Id: Words.php,v 1.4 2006/06/13 11:29:35 makler Exp $ //
/** * The Numbers_Words class provides method to convert arabic numerals to * words (also with currency name). * * @author Piotr Klaban <makler@man.torun.pl> * @package Numbers_Words */
// {{{ Numbers_Words
/** * The Numbers_Words class provides method to convert arabic numerals to words. * * @access public * @author Piotr Klaban <makler@man.torun.pl> * @since PHP 4.2.3 * @package Numbers_Words */ class Numbers_Words { // {{{ toWords()
/** * Converts a number to its word representation * * @param integer $num An integer between -infinity and infinity inclusive :) * that should be converted to a words representation * * @param string $locale Language name abbreviation. Optional. Defaults to en_US. * * @return string The corresponding word representation * * @access public * @author Piotr Klaban <makler@man.torun.pl> * @since PHP 4.2.3 */ function toWords($num, $locale = 'en_US') {
include_once("Numbers/Words/lang.${locale}.php");
$classname = "Numbers_Words_${locale}";
if (!class_exists($classname)) { return Numbers_Words::raiseError("Unable to include the Numbers/Words/lang.${locale}.php file"); }
$methods = get_class_methods($classname);
if (!in_array('toWords', $methods) && !in_array('towords', $methods)) { return Numbers_Words::raiseError("Unable to find toWords method in '$classname' class"); }
@$obj =& new $classname;
return trim($obj->toWords($num)); } // }}} // {{{ toCurrency() /** * Converts a currency value to word representation (1.02 => one dollar two cents) * If the number has not any fraction part, the "cents" number is omitted. * * @param float $num A float/integer/string number representing currency value * * @param string $locale Language name abbreviation. Optional. Defaults to en_US. * * @param string $int_curr International currency symbol * as defined by the ISO 4217 standard (three characters). * E.g. 'EUR', 'USD', 'PLN'. Optional. * Defaults to $def_currency defined in the language class. * * @return string The corresponding word representation * * @access public * @author Piotr Klaban <makler@man.torun.pl> * @since PHP 4.2.3 */ function toCurrency($num, $locale = 'en_US', $int_curr = '') { $ret = $num;
@include_once("Numbers/Words/lang.${locale}.php");
$classname = "Numbers_Words_${locale}";
if (!class_exists($classname)) { return Numbers_Words::raiseError("Unable to include the Numbers/Words/lang.${locale}.php file"); }
$methods = get_class_methods($classname);
if (!in_array('toCurrencyWords', $methods) && !in_array('tocurrencywords', $methods)) { return Numbers_Words::raiseError("Unable to find toCurrencyWords method in '$classname' class"); }
@$obj =& new $classname;
if (strpos($num, '.') === false) { $ret = trim($obj->toCurrencyWords($int_curr, $num)); } else { $currency = explode('.', $num, 2); /* add leading zero */ if (strlen($currency[1]) == 1) { $currency[1] .= '0'; } $ret = trim($obj->toCurrencyWords($int_curr, $currency[0], $currency[1])); } return $ret; } // }}} // {{{ getLocales() /** * Lists available locales for Numbers_Words * * @param string $int_curr International currency symbol * @param mixed string/array of strings $locale * Optional searched language name abbreviation. * Default: all available locales. * * @return array The available locales (optionaly only the requested ones) * @author Piotr Klaban <makler@man.torun.pl> * @author Bertrand Gugger, bertrand at toggg dot com * * @access public * @static */ function getLocales($locale = null) { $ret = array(); if (isset($locale) && is_string($locale)) { $locale = array($locale); } $dname = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Words' . DIRECTORY_SEPARATOR; $dh=opendir($dname); if ($dh) { while ($fname = readdir($dh)) { if (preg_match('#^lang\.([a-z_]+)\.php$#i', $fname, $matches)) { if (is_file($dname . $fname) && is_readable($dname . $fname) && (!isset($locale) || in_array($matches[1], $locale))) { $ret[] = $matches[1]; } } } closedir($dh); sort($ret); } return $ret; } // }}} // {{{ raiseError() /** * Trigger a PEAR error * * To improve performances, the PEAR.php file is included dynamically. * * @param string error message */ function raiseError($msg) { include_once('PEAR.php'); return PEAR::raiseError($msg); } // }}} }
// }}} ?>
|