commerceguys / intl
由CLDR数据驱动的国际化库。
v2.0.6
2024-07-12 07:51 UTC
Requires
- php: >=8.0
Requires (Dev)
- mikey179/vfsstream: 1.*
- phpunit/phpunit: ^10
README
一个由CLDR数据驱动的PHP 8.0+国际化库。
特性
- NumberFormatter和CurrencyFormatter,灵感来自 intl。
- 货币
- 语言
寻找国家及地区的列表?请查看 commerceguys/addressing。
为什么不用intl扩展?
intl扩展不是PHP安装的默认部分,需要它可能会影响软件的采用。在幕后,该扩展依赖于libicu,它包含CLDR数据集,但根据使用的操作系统/发行版,可能落后几个主要的CLDR版本。
由于CLDR数据集以JSON形式免费提供,因此可以在纯PHP代码中重新实现intl功能,同时确保数据集始终是最新的。
访问CLDR数据集还使我们能够提供额外的API,例如列出所有货币。
更多背景信息可以在 这篇博客文章 中找到。
数字格式化
允许使用区域特定的规则格式化数字(小数、百分比、货币金额)。
为此提供了两个格式化器:NumberFormatter 和 CurrencyFormatter。
use CommerceGuys\Intl\Currency\CurrencyRepository; use CommerceGuys\Intl\NumberFormat\NumberFormatRepository; use CommerceGuys\Intl\Formatter\NumberFormatter; use CommerceGuys\Intl\Formatter\CurrencyFormatter; $numberFormatRepository = new NumberFormatRepository; // Options can be provided to the constructor or the // individual methods, the locale defaults to 'en' when missing. $numberFormatter = new NumberFormatter($numberFormatRepository); echo $numberFormatter->format('1234.99'); // 1,234.99 echo $numberFormatter->format('0.75', ['style' => 'percent']); // 75% $currencyRepository = new CurrencyRepository; $currencyFormatter = new CurrencyFormatter($numberFormatRepository, $currencyRepository); echo $currencyFormatter->format('2.99', 'USD'); // $2.99 // The accounting style shows negative numbers differently and is used // primarily for amounts shown on invoices. echo $currencyFormatter->format('-2.99', 'USD', ['style' => 'accounting']); // (2.99$) // Arabic, Arabic extended, Bengali, Devanagari digits are supported as expected. $currencyFormatter = new CurrencyFormatter($numberFormatRepository, $currencyRepository, ['locale' => 'ar']); echo $currencyFormatter->format('1230.99', 'USD'); // US$ ١٬٢٣٠٫٩٩ // Parse formatted values into numeric values. echo $currencyFormatter->parse('US$ ١٬٢٣٠٫٩٩', 'USD'); // 1230.99
货币
use CommerceGuys\Intl\Currency\CurrencyRepository; // Reads the currency definitions from resources/currency. $currencyRepository = new CurrencyRepository; // Get the USD currency using the default locale (en). $currency = $currencyRepository->get('USD'); echo $currency->getCurrencyCode(); // USD echo $currency->getNumericCode(); // 840 echo $currency->getFractionDigits(); // 2 echo $currency->getName(); // US Dollar echo $currency->getSymbol(); // $ echo $currency->getLocale(); // en // Get the USD currency using the fr-FR locale. $currency = $currencyRepository->get('USD', 'fr-FR'); echo $currency->getName(); // dollar des États-Unis echo $currency->getSymbol(); // $US echo $currency->getLocale(); // fr-FR // Get all currencies, keyed by currency code. $allCurrencies = $currencyRepository->getAll();
语言
use CommerceGuys\Intl\Language\LanguageRepository; // Reads the language definitions from resources/language. $languageRepository = new LanguageRepository; // Get the german language using the default locale (en). $language = $languageRepository->get('de'); echo $language->getLanguageCode(); // de echo $language->getName(); // German // Get the german language using the fr-FR locale. $language = $languageRepository->get('de', 'fr-FR'); echo $language->getName(); // allemand // Get all languages, keyed by language code. $allLanguages = $languageRepository->getAll();