表記スタイルは、 java.util.ResourceBundle.getBundle(String、Locale、ClassLoader){language}_{country}
のjavadocで確認できるため、表記スタイルを使用してもそれほど悪くはありません。一方、言語タグにはスタイルがあることにも注意してください(アンダースコア「_」ではなくハイフン「-」)。詳細な説明は、java.util.Localeのjavadocにあります。{language}-{country}
{language}_{country}
ISO 639-2(3文字)コードに変換する簡単な方法new Locale(str.substring(0,2)).getISO3Language()
はですが、次のような別の方法を探しているようです。
String locale = "fr_FR";
try
{
// LanguageAlpha3Code is a Java enum that represents ISO 639-2 codes.
LanguageAlpha3Code alpha3;
// LocaleCode.getByCode(String) [static method] accepts a string
// whose format is {language}, {language}_{country}, or
// {language}-{country} where {language} is IS0 639-1 (2-letter)
// and {country} is ISO 3166-1 alpha2 code (2-letter) and returns
// a LocaleCode enum. LocaleCode.getLanguage() [instance method]
// returns a LanguageCode enum. Finally, LanguageCode.getAlpha3()
// returns a LanguageAlpha3Code enum.
alpha3 = LocaleCode.getByCode(locale).getLanguage().getAlpha3();
// French has two ISO 639-2 codes. One is "terminology" code
// (ISO 639-2/T) and the other is "bibliographic" code
// (ISO 639-2/B). 2 lines below prints "fra" for ISO 639-2/T
// and "fre" for ISO 639-2/B.
System.out.println("ISO 639-2/T: " + alpha3.getAlpha3T());
System.out.println("ISO 639-2/B: " + alpha3.getAlpha3B());
}
catch (NullPointerException e)
{
System.out.println("Unknown locale: " + locale);
}
上記の例は、nv-i18n国際化パッケージを使用して実行できます。Mavenを使用している場合は、以下の依存関係をpom.xmlに追加してみてください。
<dependency>
<groupId>com.neovisionaries</groupId>
<artifactId>nv-i18n</artifactId>
<version>1.1</version>
</dependency>
または、 Maven中央リポジトリからnv-i18nのjarを直接ダウンロードします。
nv-i18nソースコードとjavadocはGitHubでホストされています。
出典:https
://github.com/TakahikoKawasaki/nv-i18n
Javadoc:http ://takahikokawasaki.github.com/nv-i18n/