2014-01-20 399 views
2

在数据库中,我们有ISO 3166-1 alpha-2 country codes,例如, GB代表英国,AR代表阿根廷。今天,我们为这些国家代码保留一列数据库表,其中一列用于相应的英文国家名称。ISO 3166-1 alpha-2国家/地区代码的地区名称

我们使用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 

然而,这种感觉更像是一个黑客,我不知道我真正可以依靠的前缀获得区域名称那?

我在想我是否可以用国家代码(地区/领土取决于术语)和国家的任何有效语言编写一个语言环境,但它看起来并没有像我一样工作至少发现:

php > echo Locale::composeLocale(array('region' => 'CN')) . PHP_EOL; 

php > 

有关如何解决这个问题的任何建议? 我不想维护我自己的国家名称数据库,或者只是在内置扩展功能看起来很好的情况下(ICU)使用外部PHP库。

非常感谢!

+0

我认为,由于语言和国家组成的语言环境对象,你会发现“en”技巧经常起作用,但可能会在en_US(英语,美国)和en_GB(英语,英国)。不知道语言组件,您无法知道确切的语言环境。 – NuSkooler

+0

为什么会在en_US/en_GB等具体情况下崩溃?我一直在寻找国家名称,因此intl扩展可能返回哪些语言数据并不重要,我需要确保的是,将包含语言的区域设置与国家/地区代码一起传送是否安全它并不存在。我只是害怕它在某个时候会向我抛出一个错误,或者由于Locale无效而没有提供任何数据。 – Nils

回答

2

使用und(未知语言)。所以'und_' . 'AR'

相关问题