在数据库中,我们有ISO 3166-1 alpha-2 国家代码,例如 GB 代表英国,AR 代表阿根廷。今天我们保留一个数据库表,其中一列用于这些国家代码,一列用于对应的英文国家名称。
我们在 PHP (5.4.x) 中工作,它具有intl 扩展(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 库。
提前非常感谢!