Blame | Last modification | View Log | RSS feed
<?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("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);
}
// }}}
}
// }}}
?>