簡體   English   中英

從'fr_FR'類型語言代碼轉換為ISO 639-2語言代碼

[英]Convert from 'fr_FR' type language codes to ISO 639-2 language codes

我需要將Java中的字符串(如fr_FRen_GBja_JP (意為法語,英語和日語))轉換為ISO 639-2表示形式: fre/fraengjpn

你知道符號樣式fr_FR是否符合某個標准嗎? 我沒有在這方面找到任何東西。

您知道如何將此符號轉換為ISO 639-2(3個字母)語言代碼嗎?

非常感謝!

更新:我知道方法getISO3Language()。 而且我也知道我可以通過迭代可用的語言環境來構造像fr_FR這樣的字符串然后使用ISO 639-2 3字母代碼進行映射 - 因此,每當我搜索一個3字母的代碼時,我可以在我構建的地圖。 問題是我會更好地為我提供直接的解決方案。 對不起,我從一開始就沒有解釋過這個。

您可以在java.util.ResourceBundle.getBundle(String,Locale,ClassLoader)的javadoc中看到符號樣式{language}_{country} ,因此使用符號樣式不會太糟糕。 另一方面,還應注意語言標簽具有{language}-{country}樣式(不是下划線'_'但是連字符' - ')。 可以在java.util.Locale的javadoc中找到詳細描述。

{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 Central Repository下載nv-i18n的jar。

nv-i18n源代碼和javadoc托管在GitHub上。

資料來源: https//github.com/TakahikoKawasaki/nv-i18n
Javadoc: http//takahikokawasaki.github.com/nv-i18n/

創建一個Locale對象,然后使用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

這個評論太長了所以......

你知道符號樣式fr_FR是否符合某個標准嗎? 我沒有在這方面找到任何東西。

前兩個字母是語言代碼:

語言參數是有效的ISO語言代碼。 這些代碼是ISO-639定義的小寫雙字母代碼。

最后兩個字母是國家代碼:

country參數是有效的ISO國家/地區代碼。 這些代碼是ISO-3166定義的大寫雙字母代碼。

所以現在你已經找到了這方面的東西,這解釋了這種符號對應的標准。

這一切都在java.util.Locale的文檔中討論過。 雙字母代碼也來自ISO標准,而Locale有一個方法getISO3Language()可以滿足您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM