2016-06-06 6 views
0

Моя проблема заключается в том, что я получил список стран на разных языках. Все в текстовом файле. Например:Как найти код страны на нескольких языках

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

Уважаемый даун-избиратель: Пожалуйста, оставляйте критику вместе с вашим голосом –

+0

Вопрос не ясен. Что движет переводом чего к чему? Класс ['Locale'] (http://docs.oracle.com/javase/8/docs/api/java/util/Locale.html) предлагает несколько методов getDisplay ... для перевода имени языка, страны/региона и сценария. Как этого не хватает? –

ответ

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. Этот поиск каждый LOC со страной отображения в первом языке.
  2. Затем этот клок соответствующей страны используется для страны отображения на втором языке.
  3. Непустые.
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")); 
    } 
} 

поэтому этот фрагмент кода будет выглядеть для страны япония, а затем для этого п AME на языке polnish ...

плохая часть является то, что вам нужно будет заполнить свой собственный эксонимических Каталогизировать

Смежные вопросы