Intl组件
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.8,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
Intl组件
2.3
Intl组件在Symfony 2.3中引入。ob娱乐下载在Symfony的早期版本中,您应该使用Locob娱乐下载ale组件。
谨慎
替换层仅限于区域设置“en”。如果您想使用其他区域设置,您应该这样做安装intl扩展代替。
另请参阅
本文解释了如何在任何PHP应用程序中将Intl特性作为独立组件使用。读了翻译文章,以了解如何在Symfony应用程序中国际化和管理用户语言环境。ob娱乐下载
安装
1
$作曲家需要symfony/intlob娱乐下载
或者,您可以克隆https://github.com/ob娱乐下载symfony/intl存储库。
请注意
如果在Symfony应用程序外部安装此组件,则必须要求ob娱乐下载供应商/ autoload.php
文件,以启用Composer提供的类自动加载机制。读这篇文章欲知详情。
如果您通过Composer安装组件,如果intl扩展未加载,则会自动提供以下intl扩展的类和函数:
- 排序器
- IntlDateFormatter
- 语言环境
- NumberFormatter
- intl_error_name
- intl_is_failure
- intl_get_error_code
- intl_get_error_message
当intl扩展不可用时,使用以下类替换intl类:
Composer自动在全局名称空间中公开这些类。
如果你不使用Composer,但是ob娱乐下载Symfony ClassLoader组件,你需要通过在自动加载代码中添加以下行来手动公开它们:
1 2 3 4 5
如果(!function_exists (“intl_is_failure”)) {需要' /道路/ / Icu /资源/存根/”显然也;$加载程序->registerPrefixFallback (' /道路/ / Icu /资源/存根的);}
读写资源包
的ResourceBundle类当前不受此组件支持。相反,它包含一组读取器和写入器,用于从/到资源包文件读取和写入数组(或类似数组的对象)。支持以下类:
- TextBundleWriter
- PhpBundleWriter
- BinaryBundleReader
- PhpBundleReader
- BufferedBundleReader
- StructuredBundleReader
如果您对如何使用这些类感兴趣,请继续阅读。否则,跳过本节,跳转到访问ICU数据.
TextBundleWriter
的TextBundleWriter将数组或类数组对象写入纯文本资源包。生成的.txt文件可以转换为二进制的.res文件BundleCompiler类:
12 3 4 5 6 7 8 9 10 11 12 13 14
使用ob娱乐下载\组件\Intl\ResourceBundle\作家\TextBundleWriter;使用ob娱乐下载\组件\Intl\ResourceBundle\编译器\BundleCompiler;$作家=新TextBundleWriter ();$作家->写(的路径/ /包,“en”,数组(“数据”=>数组(“entry1”,“entry2”,/ /……)));$编译器=新BundleCompiler ();$编译器->编译(的路径/ /包,/道路/ /二进制/包的);
命令“genrb”必须可用于BundleCompiler去工作。如果命令位于非标准位置,则可以将其路径传递给BundleCompiler构造函数。
PhpBundleWriter
的PhpBundleWriter将数组或类数组对象写入.php资源包:
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\Intl\ResourceBundle\作家\PhpBundleWriter;$作家=新PhpBundleWriter ();$作家->写(的路径/ /包,“en”,数组(“数据”=>数组(“entry1”,“entry2”,/ /……)));
BinaryBundleReader
的BinaryBundleReader读取二进制资源包文件并返回数组或类数组对象。类目前仅适用于intl扩展安装:
1 2 3 4 5 6
使用ob娱乐下载\组件\Intl\ResourceBundle\读者\BinaryBundleReader;$读者=新BinaryBundleReader ();$数据=$读者->读(的路径/ /包,“en”);var_dump ($数据[“数据”] [“entry1”]);
PhpBundleReader
的PhpBundleReader从.php文件中读取资源包,并返回一个数组或类数组对象:
1 2 3 4 5 6
使用ob娱乐下载\组件\Intl\ResourceBundle\读者\PhpBundleReader;$读者=新PhpBundleReader ();$数据=$读者->读(的路径/ /包,“en”);var_dump ($数据[“数据”] [“entry1”]);
BufferedBundleReader
的BufferedBundleReader包装另一个读取器,但将最后N个读取保存在缓冲区中,其中N是传递给构造函数的缓冲区大小:
12 3 4 5 6 7 8 9 10 11 12 13
使用ob娱乐下载\组件\Intl\ResourceBundle\读者\BinaryBundleReader;使用ob娱乐下载\组件\Intl\ResourceBundle\读者\BufferedBundleReader;$读者=新BufferedBundleReader (新BinaryBundleReader (),10);//实际读取文件$数据=$读者->读(的路径/ /包,“en”);//从缓冲区返回数据$数据=$读者->读(的路径/ /包,“en”);//实际读取文件$数据=$读者->读(的路径/ /包,“fr”);
StructuredBundleReader
的StructuredBundleReader包装另一个阅读器并提供一个readEntry ()方法,用于读取资源包的条目,而不必担心是否设置了数组键。如果路径无法解析,零
返回:
12 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载\组件\Intl\ResourceBundle\读者\BinaryBundleReader;使用ob娱乐下载\组件\Intl\ResourceBundle\读者\StructuredBundleReader;$读者=新StructuredBundleReader (新BinaryBundleReader ());$数据=$读者->读(的路径/ /包,“en”);如果键"Data"不存在,则产生错误var_dump ($数据[“数据”] [“entry1”]);//如果键"Data"不存在则返回nullvar_dump ($读者->readEntry (的路径/ /包,“en”,数组(“数据”,“entry1”)));
此外,readEntry ()方法解析回退区域设置。例如,“en_GB”的回退区域设置为“en”。对于单值条目(字符串、数字等),如果在更特定的区域设置中找不到该条目,则将从备用区域设置中读取。对于多值条目(数组),将合并更具体的区域设置和备用区域设置的值。为了抑制这种行为,最后一个参数美元的回退
可以设置为假
:
1 2 3 4 5 6
var_dump ($读者->readEntry (的路径/ /包,“en”,数组(“数据”,“entry1”),假));
访问ICU数据
ICU数据位于几个“资源包”中。您可以通过静态方法访问这些包的PHP包装器Intl类。目前支持的数据如下:
语言和脚本名称
语言和脚本名称的翻译可以在语言包中找到:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
使用ob娱乐下载\组件\Intl\Intl;\地区::setDefault (“en”);$语言= Intl::getLanguageBundle ()->getLanguageNames ();// => array('ab' => '阿布哈兹',…)$语言= Intl::getLanguageBundle ()->getLanguageName (“德”);// => '德语'$语言= Intl::getLanguageBundle ()->getLanguageName (“德”,“在”);// => '奥地利德语'$脚本= Intl::getLanguageBundle ()->getScriptNames ();// => array('阿拉伯' => '阿拉伯',…)$脚本= Intl::getLanguageBundle ()->getScriptName (“汉斯”);// => '简化'
所有方法都接受翻译语言环境作为最后一个可选参数,默认为当前默认语言环境:
1 2
$语言= Intl::getLanguageBundle ()->getLanguageNames (“德”);// => array('ab' => 'Abchasisch',…)
国家的名字
国家名称的翻译可以在region包中找到:
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\Intl\Intl;\地区::setDefault (“en”);$国家= Intl::getRegionBundle ()->getCountryNames ();// => array('AF' => '阿富汗',…)$国家= Intl::getRegionBundle ()->getCountryName (“GB”);// => '英国'
所有方法都接受翻译语言环境作为最后一个可选参数,默认为当前默认语言环境:
1 2
$国家= Intl::getRegionBundle ()->getCountryNames (“德”);// => array('AF' => '阿富汗',…)
地区
语言环境名称的翻译可以在locale包中找到:
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\Intl\Intl;\地区::setDefault (“en”);$地区= Intl::getLocaleBundle ()->getLocaleNames ();// => array('af' => 'Afrikaans',…)$语言环境= Intl::getLocaleBundle ()->getLocaleName (“zh_Hans_MO”);// => '中文(简体,中国澳门特区)'
所有方法都接受翻译语言环境作为最后一个可选参数,默认为当前默认语言环境:
1 2
$地区= Intl::getLocaleBundle ()->getLocaleNames (“德”);// => array('af' => 'Afrikaans',…)
货币
货币名称和其他货币相关信息的翻译可以在货币包中找到:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
使用ob娱乐下载\组件\Intl\Intl;\地区::setDefault (“en”);$货币= Intl::getCurrencyBundle ()->getCurrencyNames ();// => array('AFN' => '阿富汗',…)$货币= Intl::getCurrencyBundle ()->getCurrencyName (印度卢比的);// => '印度卢比'$象征= Intl::getCurrencyBundle ()->getCurrencySymbol (印度卢比的);// => ' '$fractionDigits= Intl::getCurrencyBundle ()->getFractionDigits (印度卢比的);// =>$roundingIncrement= Intl::getCurrencyBundle ()->getRoundingIncrement (印度卢比的);// => 0
所有方法(除了getFractionDigits ()而且getRoundingIncrement ())接受翻译语言环境作为最后一个可选参数,默认为当前默认语言环境:
1 2
$货币= Intl::getCurrencyBundle ()->getCurrencyNames (“德”);// => array('AFN' => 'Afghanische Afghani',…)
这就是你现在需要知道的。祝你编码愉快!