2017-01-16 61 views
2

如何獲取語言全名列表?我檢查了Locale類,發現getISOLanguages(),但是當我需要語言的全名(例如「英語」)時,它返回2個字母的語言代碼(例如'en')。獲取Java語言的完整語言名稱列表

那有什麼更好的方法?

+3

嘗試'getDisplayLanguage()'方法,可能是最好的一個區域傳遞,例如'Locale.GERMAN.getDisplayLanguage(Locale.ENGLISH)'。要獲得所有語言的列表,只需遍歷'getISOLanguages()'的結果並執行像'new Locale(isoLang).getDisplayLanguage(Locale.ENGLISH)'這樣的操作。請注意,可能沒有每個iso語言的名稱。 – Thomas

+0

或者遍歷'Locale.getAvailableLocales()',它返回所有已安裝語言環境的列表。請注意,這可能不會爲每種語言代碼返回一個語言環境,但可能會爲其他語言環境返回多個語言環境(例如,國家和地區部分)。 – Thomas

回答

4

最後,感謝托馬斯的意見,我實現它以這樣一種方式:

SortedSet<String> allLanguages = new TreeSet<String>(); 
String[] languages = Locale.getISOLanguages(); 
for (int i = 0; i < languages.length; i++){ 
    Locale loc = new Locale(languages[i]); 
    allLanguages.add(loc.getDisplayLanguage()); 
} 

UPD。也有更現代的風格:

Set<String> languages = Arrays.stream(Locale.getISOLanguages()) 
      .map(Locale::new) 
      .map(Locale::getDisplayLanguage) 
      .collect(Collectors.toCollection(TreeSet::new));