Locale クラスは ISO 639-2(3桁)の言語コードを受け付けるのか?
ISO 639-2 (alpha-3) では、言語を 3 桁のアルファベットで識別できるよう定義しています(例: 日本語は jpn
)。
この言語識別子を使って、Java の Locale
オブジェクトを生成できるのでしょうか?
Java の Locale クラス の説明には、次のように記載されています。
言語に alpha-2 コードと alpha-3 コードの両方がある場合は、alpha-2 コードを使用する必要があります。
また、Locale クラスのコンストラクタ の第 1 引数の説明には、次のように書かれています。
language - ISO 639 alpha-2 または alpha-3 言語コード、または最高 8 文字の言語のサブタグ。
実際に試してみると、alpha-2 コード(2桁)はほぼすべて対応しているのに対し、alpha-3 コード(3桁)は対応がいまいちのようです。
Locale
クラスが認識できる alpha-2 コードの一覧は、Locale.getISOLanguages()
で取得できます。
一方、認識できる alpha-3 コードの一覧を取得するメソッドは存在しませんが、上記の結果をみる限り、フランス語を表す fra
と中国語を表す zho
という言語コードからは、Locale
クラスは言語情報をうまく生成してくれません。
何とも使いにくいですね。
alpha-2 コード(2桁)で正しい言語情報を持つ Locale
オブジェクトを生成できるのであれば、そのオブジェクトから getISO3Language()
で alpha-3 コード(3桁)を取得することができます。
つまり、fr
に対応するコードが fra
であることは判別できます。
この情報を使って、うまく逆変換するテーブルを作れば、alpha-3 コードからももう少しロバストに Locale
オブジェクトを生成できるようになりそうです。
ISO 639-2(3桁)の言語コードから Locale オブジェクトを生成するユーティリティ
下記の LanguageLocales
クラスは、ISO 639-1(2桁)や ISO 639-2(3桁)の言語コードから Locale
オブジェクトを取得するためのユーティリティクラスです。
Locale
オブジェクトの第 1 引数に言語コードを渡してオブジェクト生成するより、LanguageLocales
クラスを使って Locale
オブジェクトを取得した方が、正しい言語情報を取得できる可能性が上がります。
もちろん、すべての ISO 639-2 (alpha-3) コードに対応しているわけではないので、その点は注意してください。
関連記事