データベースにはISO 3166-1 alpha-2 国コードがあります。たとえば、英国は GB、アルゼンチンは AR です。現在、これらの国コード用の 1 つの列と、対応する英語の国名用の 1 つの列を含むデータベース テーブルを保持しています。
私たちはintl エクステニオン(ICU ライブラリのラッパー) を持つ PHP (5.4.x) で作業しているので、このソースから国名を取得したいと考えました。ドイツ語、フランス語、または将来的に必要なものの国名。
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 ライブラリを使用したりしたくありません。
よろしくお願いします!