Comment obtenir le code de langue iso2 pour les parameters régionaux?

Je reçois le code de langue iso2 de cette façon:

public Ssortingng getLang(Locale language) return language.toSsortingng().subssortingng(0,2).toLowerCase() } 

Y a-t-il une meilleure façon de faire cela?

edit : quand j’utilise getLanguage, je reçois une chaîne vide.

Qu’en est-il de

 public Ssortingng getLang(Locale language) return language.getLanguage(); } 

Bien sûr, il ne s’agira que d’un code iso 639-1 à 2 lettres s’il en existe un défini pour cette langue, sinon il risque de renvoyer un code à 3 lettres (ou même plus).


Votre code donnera des résultats stupides si vous avez une locale sans code de langue (comme _DE ) (le mien retournera alors la chaîne vide, ce qui est un peu mieux, à _DE ). Si les parameters régionaux contiennent un code de langue, ils le renverront, mais vous n’avez pas besoin de l’appel toLowerCase() .

J’ai eu les mêmes questions et voici ce que j’ai trouvé.

Si vous créez les Locale avec le constructeur en tant que:

 Locale locale = new Locale("en_US"); 

et ensuite vous appelez getLanguage :

 Ssortingng language = locale.getLanguage(); 

La valeur de language sera “en_us”;

Si vous créez les Locale avec le générateur:

 Locale locale = new Locale.Builder().setLanguage("en").setRegion("US").build() 

Ensuite, la valeur locale.getLanguage() retournera “en”.

C’est étrange pour moi mais c’est la façon dont cela a été mis en œuvre.

Voilà donc la longue réponse pour expliquer que si vous voulez que le code de langue retourne une langue ISO à deux lettres, vous devez utiliser le générateur Java Locale ou effectuer une manipulation de chaîne.

Votre méthode avec subssortingng fonctionne, mais j’utiliserais quelque chose comme ce que j’ai écrit ci-dessous pour couvrir les cas où le délimiteur peut être “-” ou “_”.

 public Ssortingng getLang(Locale language) Ssortingng[] localeSsortingngs = (language.split("[-_]+")); return localeSsortingngs[0]; } 

Peut-être en appelant Locale#getLanguage()

Locale locale = ?; locale.getLanguage();