Quelle est la bonne façon de connaître la langue (locale) du système d'exploitation à partir de Java?
J'ai essayé
Locale.getDefault()
System.getProperties("user.language")
etc.
mais ils ne sont pas corrects, rien n'affiche réellement le "System Locale" qui est disponible par la commande "systeminfo" dans Windows.
Veuillez aider.
La commande Windows XP systeminfo
affiche beaucoup de choses, mais les informations pertinentes sont les suivantes:
System Locale: en-us;English (United States)
Input Locale: en-us;English (United States)
Pour obtenir des informations équivalentes en Java, utilisez Locale.getDefault()
pour obtenir les paramètres régionaux que Java utilise) et utilisez des méthodes sur l'objet Locale telles que getCountry()
, getLanguage()
pour obtenir des détails. Les informations sont disponibles en utilisant les codes ISO et en tant que noms lisibles/affichables.
Notez que Locale.getDefault()
vous donne les paramètres régionaux que Java récupère de l'environnement au démarrage, cela peut ou non être le même que les paramètres régionaux "système". Pour définir définitivement obtenir les paramètres régionaux "système" dans Java vous auriez besoin de faire des choses spécifiques à la plate-forme. IMO, il est plus simple de s'assurer que Java démarre avec le système) locale ... si vous avez vraiment besoin de ces informations.
MISE À JOUR: Apparemment, Java 7 a changé la façon dont les informations locales utilisées par getDefault()
est déterminé sous Windows; voir https://stackoverflow.com/a/8319889/139985
Qu'en est-il de
System.getProperty("user.country");
System.getProperty("user.language");
Retourne dans mon cas
user.country = DE
user.language = de
Vous pouvez facilement générer les paramètres régionaux à partir de ces informations. Local est 'langue' _ 'pays' donc dans mon cas de_DE
Que diriez-vous d'utiliser les paramètres régionaux par défaut?
Locale locale = Locale.getDefault();
String lang = locale.getDisplayLanguage();
String country = locale.getDisplayCountry();
Cela me renvoie ma langue et mon pays actuels selon la commande Windows systeminfo
. C'est ce que vous cherchez? (Si vous voulez les codes à 2 caractères pour la langue/le pays, vous pouvez simplement utiliser getLanguage()
ou getCountry()
).
Pour être précis, vous pouvez essayer le code suivant:
public Locale getLocale() {
if (this.locale == null) {
this.locale = new Locale(System.getProperty("user.language"), System.getProperty("user.country"));
}
return this.locale;
}