有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何用多种语言查找国家代码

我的问题是,我有一份不同语言的国家名单。全部在文本文件中。例如:

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

我想为每种语言制作一个hashmap,在那里我可以放置所有可用的国家和代码,但我不知道如何制作。我已经制作了一张这样的地图,但我不知道如何制作多种语言的地图

    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) 个答案

  1. # 1 楼答案

    您要寻找的是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"));
        }
    }
    

    因此,这段代码将查找国家日本,然后在语言polnish中查找该名称

    糟糕的是,您需要填充自己的外来名目录

  2. # 2 楼答案

    也许在你的尝试中,区域设置构造出了问题。您需要从输入文件中检索以下内容:

        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. 非空