ISO 3166-1 alpha-2 国家代码的区域名称
Posted
技术标签:
【中文标题】ISO 3166-1 alpha-2 国家代码的区域名称【英文标题】:Region name for an ISO 3166-1 alpha-2 country code 【发布时间】:2014-02-09 22:09:52 【问题描述】:在数据库中,我们有ISO 3166-1 alpha-2 country codes,例如GB 代表英国,AR 代表阿根廷。今天我们保留一个数据库表,其中一列是这些国家代码,一列是对应的英文国家名称。
我们在 php (5.4.x) 中工作,它具有 intl extenion(ICU 库的包装器)所以我想我想从这个源中获取国家名称,这使得应用程序更易于维护并且更容易国际化为我可以很容易地用德语、法语或我们将来想要的任何方式获取国家/地区名称。
Locale::getDisplayRegion ( string $locale [, string $in_locale ] )
提供来自区域设置的区域名称。
例如
php > echo Locale::getDisplayRegion('en-US', 'de') . PHP_EOL;
Vereinigte Staaten
php > echo Locale::getDisplayRegion('en-US', 'en') . PHP_EOL;
United States
问题是我没有语言代码,只有国家代码,所以我不确定如何建立适当的语言环境。
似乎我可以通过在英文前加上“en_”来获取地区名称,例如
php > echo Locale::getDisplayRegion('en-CH', 'en') . PHP_EOL;
Switzerland
php > echo Locale::getDisplayRegion('en-CN', 'en') . PHP_EOL;
China
php > echo Locale::getDisplayRegion('en-AR', 'en') . PHP_EOL;
Argentina
但是,这感觉更像是一种 hack,我不确定我真的可以依赖它吗?
我在考虑是否可以使用国家/地区代码(地区/领土取决于术语)和该国家/地区的任何有效语言以某种方式组成区域设置,但据我发现它似乎不起作用至少:
php > echo Locale::composeLocale( array('region' => 'CN') ) . PHP_EOL;
php >
关于如何解决这个问题有什么建议吗? 我不想维护我自己的国家名称数据库,或者当有一个似乎已经是一个很好的来源 (ICU) 的内置扩展时,我不想只使用一个外部 PHP 库。
提前非常感谢!
【问题讨论】:
我认为由于 Locale 对象由语言和国家/地区组成,您会发现“en”技巧通常有效,但在 en_US(英语,美国)等情况下可能会失败vs en_GB(英语,英国)。如果不知道语言组件,您就无法知道确切的语言环境。 为什么会在 en_US / en_GB 等情况下崩溃?我一直只是在寻找国家/地区名称,因此 intl 扩展可以返回什么语言数据并不重要,我需要确定的是传递包含语言和国家/地区代码的语言环境是否安全它并不存在。我只是担心它在某些时候会向我抛出错误或由于无效的区域设置而没有提供任何数据。 【参考方案1】:使用und
(未知语言)。所以'und_' . 'AR'
等等。
【讨论】:
以上是关于ISO 3166-1 alpha-2 国家代码的区域名称的主要内容,如果未能解决你的问题,请参考以下文章
有没有一种简单的方法来检索 ISO 3166-1 数字国家代码