New file |
0,0 → 1,188 |
<?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); |
} |
// }}} |
} |
|
// }}} |
?> |