4

Javaで、、、 (フランス語、英語fr_FR、日本語を意味する)などの文字列からISO 639-2表現に変換する必要があります:、、。en_GBja_JPfre/fraengjpn

fr_FR表記スタイルが特定の基準に準拠しているかどうか知っていますか?この点に関しては何も見つかりませんでした。

この表記からISO639-2(3文字)言語コードに変換する方法を知っていますか?

どうもありがとう!

更新:メソッドgetISO3Language()を知っています。また、使用可能なロケールを反復することで、次のような文字列を作成し、ISO 639-2 3文字コードでマッピングを作成できることも知っています。fr_FRしたがって、3文字コードを検索すると、マップで見つけることができます。構築しました。問題は、私が直接的な解決策にはるかに適しているということです。最初から説明していなかったのが残念です。

4

4 に答える 4

6

表記スタイルは、 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/

于 2012-11-10T19:45:39.723 に答える
3

ロケールオブジェクトを作成してから、を使用しますgetISO3Language()http://download.oracle.com/javase/1.5.0/docs/api/java/util/Locale.html#getISO3Language()

String lang="fr", country="FR", convertedLang;
Locale l = new Locale(lang, country);
convertedLang= l.getISO3Language(); // should be what you're after
于 2011-03-01T14:54:14.910 に答える
3

これはコメントするには長すぎるので...

表記スタイルfr_FRが特定の標準に準拠しているかどうか知っていますか?この点に関しては何も見つかりませんでした。

最初の2文字は言語コードです。

言語引数は有効なISO言語コードです。これらのコードは、ISO-639で定義されている小文字の2文字のコードです。

最後の2文字は国コードです。

国引数は有効なISO国コードです。これらのコードは、ISO-3166で定義されている大文字の2文字のコードです。

これで、この点に関して、この表記がどの標準に対応するかを説明する何かが見つかりました。

于 2011-03-01T15:10:34.253 に答える
1

これはすべて、java.util.Localeのドキュメントで説明されています。2文字のコードもISO標準からのものであり、ロケールには、必要な処理を実行するgetISO3Language()メソッドがあります。

于 2011-03-01T14:54:51.230 に答える