将国家/地区名称翻译成其他语言

pjd*_*dev 1 java locale

我搜索了一个解决方案,但没有找到任何解决方案。

我有这种信息:

String locale = "en_GB";
String country = "Japonia"; //It means Japan in polish
Run Code Online (Sandbox Code Playgroud)

我需要将国家名称“ Japonia”翻译成字符串语言环境中指示的语言,所以要翻译为“ Japan”。有什么办法吗?

And*_*eas 5

(根据Elliott Frisch的评论回答)

Java Runtime Library没有翻译API,但是Locale只要您知道ISO 3166 alpha-2国家代码ISO 639 alpha-2,就可以使用该类以任何语言获取任何国家的名称。或alpha-3语言代码

国家示例Japan

Locale countryJapan = new Locale.Builder().setRegion("JP"/*Japan*/).build();
Locale langEnglish  = new Locale.Builder().setLanguage("en"/*English*/).build();
Locale langPolish   = new Locale.Builder().setLanguage("pl"/*Polish*/).build();
Locale langJapanese = new Locale.Builder().setLanguage("ja"/*Japanese*/).build();
Locale langItalian  = new Locale.Builder().setLanguage("it"/*Italian*/).build();
System.out.println(countryJapan.getDisplayCountry(langEnglish));
System.out.println(countryJapan.getDisplayCountry(langPolish));
System.out.println(countryJapan.getDisplayCountry(langJapanese));
System.out.println(countryJapan.getDisplayCountry(langItalian));
Run Code Online (Sandbox Code Playgroud)

输出量

Locale countryJapan = new Locale.Builder().setRegion("JP"/*Japan*/).build();
Locale langEnglish  = new Locale.Builder().setLanguage("en"/*English*/).build();
Locale langPolish   = new Locale.Builder().setLanguage("pl"/*Polish*/).build();
Locale langJapanese = new Locale.Builder().setLanguage("ja"/*Japanese*/).build();
Locale langItalian  = new Locale.Builder().setLanguage("it"/*Italian*/).build();
System.out.println(countryJapan.getDisplayCountry(langEnglish));
System.out.println(countryJapan.getDisplayCountry(langPolish));
System.out.println(countryJapan.getDisplayCountry(langJapanese));
System.out.println(countryJapan.getDisplayCountry(langItalian));
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于所有语言(例如捷克语)。 (2认同)

Ell*_*sch 5

假设您知道输入语言和所需的输出语言,另一种方法 - 使用 迭代Locale系统上的(s)Locale.getAvailableLocales(),测试国家名称是否与所需的输入 匹配Locale- 如果匹配,则Locale使用getDisplayCountry(Locale)

String country = "Japonia";
Locale outLocale = Locale.forLanguageTag("en_GB");
Locale inLocale = Locale.forLanguageTag("pl-PL");
for (Locale l : Locale.getAvailableLocales()) {
    if (l.getDisplayCountry(inLocale).equals(country)) {
        System.out.println(l.getDisplayCountry(outLocale));
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出

Japan
Run Code Online (Sandbox Code Playgroud)

如果你修改outLocale喜欢

Locale outLocale = Locale.forLanguageTag("es-SP");
Run Code Online (Sandbox Code Playgroud)

你得到

Japón
Run Code Online (Sandbox Code Playgroud)