2014-01-20 323 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'

相關問題