如何查找多种语言的国家/地区代码

时间:2016-06-06 19:29:16

标签: java hashmap locale

我的问题是我得到了不同语言的国家/地区列表。全部在文本文件中。 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]);
    }

2 个答案:

答案 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"));
  1. 使用第一语言搜索显示国家/地区的每个位置。
  2. 然后,相应国家/地区的cloc将用于第二语言的显示国家/地区。
  3. 非空。