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 (印度卢比的);//返回:2cashFractionDigits=货币::getCashFractionDigits (印度卢比的);//返回:2//瑞典克朗定义不同的值fractionDigits=货币::getFractionDigits (“克朗”);//返回:2cashFractionDigits=货币::getCashFractionDigits (“克朗”);//返回:0

5.3

getCashFractionDigits ()方法在Symfony 5.3中引入。ob娱乐下载

有些货币要求将数字四舍五入到某个值的最近增量(例如5美分)。如果数字格式化为现金交易或其他场景(例如会计),则此增量可能不同:

1 2 3 4 5 6 7 8 9
//印度卢比为两者定义相同的值roundingIncrement=货币::getRoundingIncrement (印度卢比的);//返回:0cashRoundingIncrement=货币::getCashRoundingIncrement (印度卢比的);//返回:0//加元定义不同的值,因为他们已经消除了//较小的硬币(1分和2分)和现金价格必须四舍五入// 5美分(例如,如果价格是7.42,你支付7.40;如果价格是7.48,你支付7.50)roundingIncrement=货币::getRoundingIncrement (“CAD”);//返回:0cashRoundingIncrement=货币::getCashRoundingIncrement (“CAD”);//返回:5

5.3

getCashRoundingIncrement ()方法在Symfony 5.3中引入。ob娱乐下载

所有方法(除了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);
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
ob娱乐下载Symfony 5.4支持通过私人Packagist