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();