2017-01-16 14 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));