ISO 3166-1 alpha-2国家/地区代码的区域名称

时间:2014-01-20 16:24:15

标签: php internationalization locale icu intl

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

我们使用PHP(5.4.x),它有intl extenion(ICU库的包装器),所以我想我想从这个源获取国家名称,这使得应用程序更易于维护和更容易国际化,因为我可以轻松地获取德语,法语或我们将来想要的任何国家名称。

Locale::getDisplayRegion ( string $locale [, string $in_locale ] )提供区域设置的区域名称。 E.g。

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 >

有关如何解决这个问题的任何建议? 我不想维护我自己的国家/地区名称数据库,或者只是在内置扩展程序时使用外部PHP库,这似乎是一个很好的来源(ICU)。

提前多多感谢!

1 个答案:

答案 0 :(得分:2)

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