我的问题是我得到了不同语言的国家/地区列表。全部在文本文件中。 E.g:
pl_PL Japonia
en_GB Spain
en_EN Portugal
我正在寻找一种方法来查找国家的代码,知道不同语言的名称,所以我可以用其他语言打印。 E.g:
pl_PL Japonia -- translate to english --> en_EN Japan
en_EN Portugal -- translate to polish --> pl_PL Portugalia
我正在考虑为每种语言制作一个哈希映射,我会将所有可用的国家/地区和代码放在一起,但我不知道如何制作它。我已经制作了这样的一张地图,但我不知道如何为多种语言制作它。
Locale[] allLocs = Locale.getAvailableLocales();
Map map = new HashMap();
String country = null;
for (int j=0; j<allLocs.length; j++) {
Locale.setDefault(new Locale(langArray[0]));
String countryCode = allLocs[j].getCountry();
if (countryCode.equals("")) continue;
kraj = allLocs[j].getDisplayCountry();
map.put(country , allLocs[j]);
}
答案 0 :(得分:2)
你要找的是exonym or xenonym,并且在java中没有开箱即用的类,
我建议创建一个Pair类,然后创建一个map<string, pair>
,这样就可以匹配应用程序中的所有组合
public class I18N {
private Map<String, Map<String, String>> languages;
public static void main(String[] args) {
new I18N();
}
public I18N() {
this.languages = new HashMap<String, Map<String, String>>();
Map<String, String> l = new HashMap<String, String>();
l.put("Spanish", "Japon");
l.put("Polnish", "Japonia");
languages.put("Japan", l);
//
System.out.println(languages.get("Japan").get("Polnish"));
}
}
所以这个片段会查找国家日本,然后在语言中使用该语言进行修改......
不好的一点是,您需要填写自己的外来语目录
答案 1 :(得分:1)
也许您的尝试中的Locale构造出错了。您需要从输入文件中检索以下内容:
final Locale locale1 = new Locale("pl", "PL");
final String country1 = "Japonia";
然后给出目标语言环境:
final Locale locale2 = new Locale("en", "US");
人们可以像你一样找到这个国家。在java 8中:
final Locale[] locales = Locale.getAvailableLocales();
Optional<String> country2 = Stream.of(locales)
.filter((loc) -> country1.equals(loc.getDisplayCountry(locale1)))
.map((cloc) -> cloc.getDisplayCountry(locale2))
.filter((s) -> !s.isEmpty())
.findAny();
System.out.println(country2.orElse("not found"));