【问题标题】:How to find a country code in multiple languages如何查找多种语言的国家代码
【发布时间】:2016-06-06 19:29:16
【问题描述】:

我的问题是我得到了一份不同语言的国家/地区列表。全部在文本文件中。例如:

pl_PL   Japonia
en_GB   Spain
en_EN   Portugal

我正在寻找一种方法来查找国家/地区的代码,知道不同语言的名称,所以我可以用其他语言打印它。例如:

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]);
    }

【问题讨论】:

  • 问题不清楚。是什么推动将什么翻译成什么? Locale 类提供了一些 getDisplay… 方法来翻译语言、国家/地区和脚本的名称。这怎么不够?

标签: java hashmap locale


【解决方案1】:

您要查找的内容称为 exonym or xenonym,在 java 中没有开箱即用的类,

我建议创建一个 Pair 类,然后创建一个 map&lt;string, pair&gt;,这样您就可以匹配应用程序中的所有组合

示例:

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"));
    }
}

所以这个 sn-p 将查找国家/地区日本,然后在波兰语中查找该名称...

不好的部分是您需要填充自己的外来语目录

【讨论】:

    【解决方案2】:

    您的尝试中可能出现了 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. 这会搜索每个 loc,并以第一语言显示国家/地区。
    2. 那么对应国家的那个cloc用于第二语言的显示国家。
    3. 非空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      相关资源
      最近更新 更多