lla/numbers_words

将PEAR::Numbers_Words转换为PSR-0兼容。请参阅https://github.com/pear/Numbers_Words

1.0.1 2016-09-07 04:03 UTC

This package is auto-updated.

Last update: 2024-09-24 15:47:42 UTC


README

此存储库是PEAR::Numbers_Words的分支,作为一个符合PSR-0规范的composer包。

感谢所有以前的作者。

With PEAR::Numbers_Words class you can change an integer number
to simple words. This can be usefull when you need to spell a currency
value e.g. on an invoice.

You can choose between several languages (language files are located
in src/Numbers/Words/Locale directory).

BTW: if you need to change number to currency, use money_format()
PHP function (available since 4.3 (not yet released)). But you must
know that locale LC_MONETARY rules are sometimes unclear.

入门

首先,您需要安装lla/numbers_words PEAR包。您可以用以下命令(以root用户身份)完成安装:

composer install ncrypthic/numbers

在您的PHP脚本中,您需要使用use Numbers\Words头文件

use \LLA\Numbers\Words;

然后,您可以使用两个参数调用Numbers_Words::fromWords()函数:整数数字(可以是包含数字的字符串)和可选的区域名称(默认为en_US

use \LLA\Numbers\Words;

$num   = 12340000000;
$words = Words::fromWords($num,"en_GB");
echo "Num $num in British English is '<b>$words</b>'<p>\n";

这将显示

Num 12340000000 in British English is '<b>twelve thousand million three hundred forty million</b>'<p>

以下模块可用(按区域名称排序,按字母顺序)

az - 阿塞拜疆语。作者:Shahriyar Imanov

bg - 保加利亚语(WIN-1251字符集)。作者:Kouber Saparev

cs - 捷克语。作者:Petr 'PePa' Pavel

de - 德语。作者:Piotr Klaban

dk - 丹麦语。作者:Jesper Veggerby

en_100 - Donald Knuth数字命名系统,英语。作者:Piotr Klaban

en_GB - 英国英语数字表示法,其中十亿是一百万的一百万倍。一千万就是“百万”。这里不使用“billiard”这个词,因为英国人很少使用它,甚至可能不知道它。作者:Piotr Klaban

en_US - 美国英语数字表示法,其中十亿是一百万的一千倍。作者:Piotr Klaban

es - 西班牙语(卡斯蒂利亚语)。作者:Xavier Noguer

es_AR - 阿根廷西班牙语。作者:Martin Marrese

et - 爱沙尼亚语。作者:Erkki Saarniit

fr - 法语。作者:Kouber Saparev

fr_BE - 比利时法语。作者:Kouber Saparev,Philippe Bajoit

he - 希伯来语。作者:Hadar Porat

hu_HU - 匈牙利语。作者:Nils Homp

id - 印度尼西亚语。作者:Ernas M. Jamil,Arif Rifai Dwiyanto

it_IT - 意大利语。作者:Filippo Beltramini,Davide Caironi

lt - 立陶宛语。作者:Laurynas Butkus

nl - 荷兰语。作者:WHAM van Dinter

pl - 波兰语(ISO-8859-2互联网标准字符集)。作者:Piotr Klaban

pt_BR - 巴西葡萄牙语。作者:Marcelo Subtil Marcal,Mario H.C.T.,Igor Feghali

ro_RO - 罗马尼亚语。作者:Bogdan Stancescu

ru - 俄语。作者:Andrey Demenev

sv - 瑞典语。作者:Robin Ericsson

tr_TR - 土耳其语。作者:Shahriyar Imanov

** 如果数字有分数部分呢?

您可以通过逗号或点分割数字。示例函数由Ernas M. Jamil提供(见下文)。我不知道分割和连接数字是否应该由Numbers_Words支持……每种语言是否都使用“逗号”/“koma”来拼写数字?您怎么看?

use \LLA\Numbers\Words;

function num2word($num, $fract = 0) {

    $num = sprintf("%.".$fract."f", $num);
    $fnum = explode('.', $num);

    $ret =  Words::fromNumber($fnum[0],"id");
    if(!$fract) return $ret;

    $ret .=  ' koma '; // point in english
    $ret .= Words::fromNumber($fnum[1],"id");

    return $ret;
}

** 如何转换货币值的整数部分而不转换分数部分?

Rob King给了我一个补丁,可以让您在数字中留下分数部分。即您可以把31.01转换为“三十一英镑零一分”

use \LLA\Numbers\Words;
use \LLA\Numbers\Words\Locale\en\GB;

$obj = new GB();
$convert_fraction = false;
print $obj->toCurrencyWords('GBP', '31', '01', $convert_fraction) . "\n";

** 如何编写新的语言文件

只需将现有的en_US或en_GB等文件复制到src/LLA/Numbers/Words/Locale/{your_country/locale code}.php,并翻译数字、数字、千位到您的语言。然后请将其发送到作者makler@man.torun.pl。

** 致谢

所有其他人的修改都在ChangeLog中详细描述。还包括发送补丁等的人的名字。语言文件的作者直接在语言文件中提及,作为作者。