Intl组件
编辑本页Intl组件
控件的本地化数据的访问ICU库.
谨慎
替换层被限制在在
语言环境。如果您想使用其他区域设置,您应该这样做安装intl扩展.这两者之间没有冲突,因为即使使用扩展,这个包仍然可以用于访问ICU数据。
另请参阅
本文解释了如何在任何PHP应用程序中将Intl特性作为独立组件使用。读了翻译文章,以了解如何在Symfony应用程序中国际化和管理用户语言环境。ob娱乐下载
安装
1
$作曲家需要symfony/intlob娱乐下载
请注意
如果在Symfony应用程序外部安装此组件,则必须要求ob娱乐下载供应商/ autoload.php
文件,以启用Composer提供的类自动加载机制。读这篇文章欲知详情。
访问ICU数据
该组件提供以下ICU数据:
语言和脚本名称
的语言类提供了对所有语言名称的访问ISO 639-1 alpha-2列表和ISO 639-2 alpha-3 (2T)列表:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
使用ob娱乐下载\组件\Intl\语言;\地区::setDefault (“en”);$语言=语言::getname ();// ('languageCode' => 'languageName')/ / = >[“ab”= >“阿布哈西亚语”,“王牌”= >“亚齐人”,…]$语言=语言::getAlpha3Names ();// ('languageCode' => 'languageName')/ / = >[“abk”= >“阿布哈西亚语”,“王牌”= >“亚齐人”,…]$语言=语言::getName (“fr”);// => 'French'$语言=语言::getAlpha3Name (联邦铁路局的);// => 'French'
所有方法都接受翻译语言环境作为最后一个可选参数,默认为当前默认语言环境:
1 2 3 4 5 6 7 8 9 10 11
$语言=语言::getname (“德”);/ / = >[“ab”= >“Abchasisch”,“王牌”= >“亚齐”…]$语言=语言::getAlpha3Names (“德”);/ / = > [' abk ' = > ' Abchasisch ',“王牌”= >“亚齐”…]$语言=语言::getName (“fr”,“德”);// => 'Französisch'$语言=语言::getAlpha3Name (联邦铁路局的,“德”);// => 'Französisch'
如果给定的区域不存在,这些方法将触发MissingResourceException.除了捕获异常,你还可以检查给定的语言代码是否有效:
1
$isValidLanguage=语言::存在($languageCode);
或者如果你有一个alpha3语言代码,你想检查:
1
$isValidLanguage=语言::alpha3CodeExists ($alpha3Code);
你可以在两个字母的alpha2和三个字母的alpha3代码之间转换代码:
1 2 3
$alpha3Code=语言::getAlpha3Code ($alpha2Code);$alpha2Code=语言::getAlpha2Code ($alpha3Code);
的脚本类提供对可选的四字母脚本代码的访问,这些脚本代码可以按照Unicode ISO 15924注册表(如。汉斯
在zh_HANS
简体中文及常到之处
在zh_HANT
繁体中文):
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\Intl\脚本;\地区::setDefault (“en”);$脚本=脚本::getname ();// ('scriptCode' => 'scriptName')// => ['Adlm' => 'Adlam', 'Afak' => 'Afaka',…]$脚本=脚本::getName (“汉斯”);// => '简化'
所有方法都接受翻译语言环境作为最后一个可选参数,默认为当前默认语言环境:
1 2 3 4 5
$脚本=脚本::getname (“德”);// => ['Adlm' => 'Adlam', 'Afak' => 'Afaka',…]$脚本=脚本::getName (“汉斯”,“德”);// => 'Vereinfacht'
如果给定的脚本代码不存在,这些方法将触发MissingResourceException.除了捕获异常,你还可以检查给定的脚本代码是否有效:
1
$isValidScript=脚本::存在($scriptCode);
国家的名字
的国家类提供对所有国家名称的访问ISO 3166-1 alpha-2列表和ISO 3166-1 alpha-3官方承认的国家和地区名单:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
使用ob娱乐下载\组件\Intl\国家;\地区::setDefault (“en”);$国家=国家::getname ();// ('alpha2Code' => 'countryName')/ / = >[“对焦”= >“阿富汗”、“斧头”= >“阿兰群岛”,…]$国家=国家::getAlpha3Names ();// ('alpha3Code' => 'countryName')/ / = >[“二自由度陀螺仪”= >“阿富汗”、“阿拉巴马”= >“阿兰群岛”,…]$国家=国家::getName (“GB”);// => '英国'$国家=国家::getAlpha3Name (“也”);// => '挪威'
所有方法都接受翻译语言环境作为最后一个可选参数,默认为当前默认语言环境:
1 2 3 4 5 6 7 8 9 10 11
$国家=国家::getname (“德”);/ / = >[“对焦”= >“阿富汗”、“如”= >“Agypten”,…]$国家=国家::getAlpha3Names (“德”);/ / = >[“二自由度陀螺仪”= >“阿富汗”、“EGY”= >“Agypten”…]$国家=国家::getName (“GB”,“德”);// => 'Vereinigtes Königreich'$国家=国家::getAlpha3Name (“GBR”,“德”);// => 'Vereinigtes Königreich'
如果给定的国家代码不存在,这些方法将触发MissingResourceException.除了捕获异常,你还可以检查给定的国家代码是否有效:
1
$isValidCountry=国家::存在($alpha2Code);
或者如果你有一个alpha3的国家代码,你想检查:
1
$isValidCountry=国家::alpha3CodeExists ($alpha3Code);
你可以在两个字母的alpha2和三个字母的alpha3代码之间转换代码:
1 2 3
$alpha3Code=国家::getAlpha3Code ($alpha2Code);$alpha2Code=国家::getAlpha2Code ($alpha3Code);
地区
区域设置是一种语言、一个区域和一些定义用户界面首选项的参数的组合。例如,“汉语”是语言和zh_Hans_MO
为“中文”(语言)+“简体”(文字)+“中国澳门特别行政区”(地区)的地区。的地区类提供对所有地区名称的访问:
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\Intl\地区;\地区::setDefault (“en”);$地区=地区::getname ();// ('localeCode' => 'localeName')/ / = >[“对焦”= >“南非荷兰语”,“af_NA”= >“南非荷兰语(纳米比亚)”,…]$语言环境=地区::getName (“zh_Hans_MO”);// => '中文(简体,中国澳门特区)'
所有方法都接受翻译语言环境作为最后一个可选参数,默认为当前默认语言环境:
1 2 3 4 5
$地区=地区::getname (“德”);/ / = >[“对焦”= >“南非荷兰语”,“af_NA”= >“南非荷兰语(纳米比亚)”,…]$语言环境=地区::getName (“zh_Hans_MO”,“德”);// => 'Chinesisch (Vereinfacht, Sonderverwaltungsregion Macau)'
如果给定的区域设置代码不存在,这些方法将触发MissingResourceException.除了捕获异常,你还可以检查给定的区域代码是否有效:
1
$isValidLocale=地区::存在($localeCode);
货币
的货币类提供了对所有货币的名称以及它们的一些信息(符号、分数数字等)的访问:
12 3 4 5 6 7 8 9 10 11 12 13
使用ob娱乐下载\组件\Intl\货币;\地区::setDefault (“en”);$货币=货币::getname ();// ('currencyCode' => 'currencyName')/ / = >[“AFN”= >“阿富汗阿富汗的”,“所有”= >“阿尔巴尼亚求偶场”,…]$货币=货币::getName (印度卢比的);// => '印度卢比'$象征=货币::getSymbol (印度卢比的);// => ' '
fraction digits方法返回使用此货币格式化数字时要显示的十进制位数。根据货币的不同,如果该数字用于现金交易或其他场景(例如会计),则该值可能会发生变化:
1 2 3 4 5 6 7
//印度卢比为两者定义相同的值$fractionDigits=货币::getFractionDigits (印度卢比的);//返回:2$cashFractionDigits=货币::getCashFractionDigits (印度卢比的);//返回:2//瑞典克朗定义不同的值$fractionDigits=货币::getFractionDigits (“克朗”);//返回:2$cashFractionDigits=货币::getCashFractionDigits (“克朗”);//返回:0
有些货币要求将数字四舍五入到某个值的最近增量(例如5美分)。如果数字格式化为现金交易或其他场景(例如会计),则此增量可能不同:
1 2 3 4 5 6 7 8 9
//印度卢比为两者定义相同的值$roundingIncrement=货币::getRoundingIncrement (印度卢比的);//返回:0$cashRoundingIncrement=货币::getCashRoundingIncrement (印度卢比的);//返回:0//加元定义不同的值,因为他们已经消除了//较小的硬币(1分和2分)和现金价格必须四舍五入// 5美分(例如,如果价格是7.42,你支付7.40;如果价格是7.48,你支付7.50)$roundingIncrement=货币::getRoundingIncrement (“CAD”);//返回:0$cashRoundingIncrement=货币::getCashRoundingIncrement (“CAD”);//返回:5
所有方法(除了getFractionDigits ()
,getCashFractionDigits ()
,getRoundingIncrement ()
而且getCashRoundingIncrement ()
)接受翻译语言环境作为最后一个可选参数,默认为当前默认语言环境:
1 2 3 4 5
$货币=货币::getname (“德”);/ / = > [' AFN ' = > ' Afghanischer阿富汗','出路' = > ' Agyptisches刘德',…]$货币=货币::getName (印度卢比的,“德”);// => 'Indische Rupie'
如果给定的货币代码不存在,这些方法将触发MissingResourceException.除了捕获异常,你还可以检查给定的货币代码是否有效:
1
$isValidCurrency=货币::存在($currencyCode);
时区
的时区类提供了几个与时区相关的实用程序。首先,您可以获得所有语言的所有时区的名称和值:
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\Intl\时区;\地区::setDefault (“en”);$时区=时区::getname ();// ('timezoneID' => 'timezoneValue')// => ['America/Eirunepe' => '英亩时间(Eirunepe)', 'America/Rio_Branco' => '英亩时间(里约热内卢Branco)',…]$时区=时区::getName (“非洲/内罗毕”);// => '东非时间(内罗毕)'
所有方法都接受翻译语言环境作为最后一个可选参数,默认为当前默认语言环境:
1 2 3 4 5
$时区=时区::getname (“德”);// => ['America/Eirunepe' => 'Acre-Zeit (Eirunepe)', 'America/Rio_Branco' => 'Acre-Zeit(里约热内卢Branco)',…]$时区=时区::getName (“非洲/内罗毕”,“德”);// => '《内罗毕日报》(内罗毕)'
您还可以获得给定国家中存在的所有时区。的forCountryCode ()
方法返回一个或多个时区id,您可以使用getName ()
前面所示的方法:
1 2 3
//与语言代码不同,国家代码总是大写的(CL = Chile)$时区=时区::forCountryCode (“氯”);// => ['America/Punta_Arenas', 'America/Santiago', 'Pacific/Easter']
反向查找也可以通过getCountryCode ()
方法,返回给定时区ID所属国家的代码:
1 2
$countryCode=时区::getCountryCode (美国/温哥华的);// => $countryCode = 'CA' (CA =加拿大)
的UTC/GMT时间偏移量提供的所有时区的getRawOffset ()
(返回一个以秒为单位表示偏移量的整数)和getGmtOffset ()
(返回偏移量的字符串表示形式,以显示给用户):
1 2 3 4 5 6 7
$抵消=时区::getRawOffset (“等/ UTC”);// $offset = 0$抵消=时区::getRawOffset (“美国/ Buenos_Aires”);// $offset = -10800$抵消=时区::getRawOffset (“亚洲/加德满都”);// $offset = 20700$抵消=时区::getGmtOffset (“等/ UTC”);// $offset = 'GMT+00:00'$抵消=时区::getGmtOffset (“美国/ Buenos_Aires”);// $offset = 'GMT-03:00'$抵消=时区::getGmtOffset (“亚洲/加德满都”);// $offset = 'GMT+05:45'
时区偏移量可能随时间变化,因为日光节约时间练习。默认情况下,这些方法使用时间()
PHP函数来获取当前时区偏移值,但你可以传递一个时间戳作为第二个参数来获取任何给定时间点的偏移量:
1 2 3 4 5
// 2019年,西班牙马德里夏令时时间为3月31日至10月27日$抵消=时区::getRawOffset (“欧洲/马德里”strtotime (“2019年3月31日”));// $offset = 3600$抵消=时区::getRawOffset (“欧洲/马德里”strtotime (“2019年4月1日”));// $offset = 7200$抵消=时区::getGmtOffset (“欧洲/马德里”strtotime (2019年10月27日));// $offset = 'GMT+02:00'$抵消=时区::getGmtOffset (“欧洲/马德里”strtotime (“2019年10月28日”));// $offset = 'GMT+01:00'
GMT偏移量的字符串表示可以根据语言环境而变化,所以你可以将语言环境作为第三个可选参数传递:
1 2
$抵消=时区::getGmtOffset (“欧洲/马德里”strtotime (“2019年10月28日”),基于“增大化现实”技术的);// $offset = 'غرينتش+01:00'$抵消=时区::getGmtOffset (“欧洲/马德里”strtotime (“2019年10月28日”),“dz”);// $offset = 'ཇི་ཨེམ་ཏི་+01:00'
如果给定的时区ID不存在,这些方法将触发MissingResourceException.除了捕获异常,你还可以检查给定的时区ID是否有效:
1
$isValidTimezone=时区::存在($timezoneId);
Emoji音译
6.2
Symfony 6.2引入了Emoji音译功能。ob娱乐下载
的EmojiTransliterator
类提供了一个实用程序,可以将表情符号转换为所有语言的文本表示形式Unicode CLDR数据集:
1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载\组件\Intl\Transliterator\EmojiTransliterator;//用英文描述表情符号$transliterator= EmojiTransliterator::创建(“en”);$transliterator->transliterate (“带有或的菜单”);// => '菜单包含披萨或意大利面'//用乌克兰语描述表情符号$transliterator= EmojiTransliterator::创建(“英国”);$transliterator->transliterate (“带有或的菜单”);// => '包含піца或спа с ет т的菜单'
的EmojiTransliterator
类还提供了两个额外的目录:github
而且松弛
将这些平台上的任何表情符号转换为相应的短代码:
1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载\组件\Intl\Transliterator\EmojiTransliterator;//在Slack短代码中描述表情符号$transliterator= EmojiTransliterator::创建(“松弛”);$transliterator->transliterate (“带有或的菜单”);// => '包含:green_salad:或:falafel的菜单:'//描述Github中的表情符号短代码$transliterator= EmojiTransliterator::创建(github的);$transliterator->transliterate (“带有或的菜单”);// => '包含:green_salad:或:falafel的菜单:'
提示
将这个表情符号音译与ob娱乐下载Symfony弦重击棒以改善包含表情符号的内容(例如url)。