как определить язык операционной системы (локаль) из кода Java - PullRequest
26 голосов
/ 18 марта 2010

Как правильно узнать язык операционной системы (локаль) из кода Java?

Я пытался

Locale.getDefault()
System.getProperties("user.language")

и т.д.

но они не верны, на самом деле ничего не отображает "System Locale", который доступен командой "systeminfo" в окнах.

Пожалуйста, помогите.

Ответы [ 4 ]

29 голосов
/ 18 марта 2010

Команда Windows XP systeminfo отображает множество вещей, но соответствующая информация такова:

System Locale:             en-us;English (United States)
Input Locale:              en-us;English (United States)

Чтобы получить эквивалентную информацию в Java, используйте Locale.getDefault(), чтобы получить Locale, который использует Java, и используйте методы для объекта Locale, такие как getCountry(), getLanguage() чтобы получить детали. Информация доступна с использованием кодов ISO и в виде удобочитаемых / отображаемых имен.

Обратите внимание, что Locale.getDefault() дает вам локаль, которую Java извлекает из среды при запуске, она может совпадать или не совпадать с "системной" локалью. Чтобы окончательно получить «системный» языковой стандарт в Java, вам нужно будет выполнить определенные для платформы вещи. ИМО, проще убедиться, что Java запускается с системным языком ... если вам действительно нужна эта информация.


ОБНОВЛЕНИЕ: Очевидно, Java 7 изменил способ определения информации о локали, используемой getDefault(), в Windows; см https://stackoverflow.com/a/8319889/139985

14 голосов
/ 18 марта 2010

А как же

System.getProperty("user.country"); 
System.getProperty("user.language");

Возвращает в моем случае

user.country = DE

user.language = де

Вы легко можете сгенерировать локаль из этой информации. Местный - это «язык» _ «страна», поэтому в моем случае de_DE

8 голосов
/ 18 марта 2010

Как насчет использования локали по умолчанию?

Locale locale = Locale.getDefault();
String lang = locale.getDisplayLanguage();
String country = locale.getDisplayCountry();

Это возвращает мне мой текущий язык и страну согласно команде Windows systeminfo. Это то, что вы ищете? (Если вам нужны двухсимвольные коды для языка / страны, вы можете просто использовать getLanguage() или getCountry()).

2 голосов
/ 12 июля 2014

Если быть точным, вы можете попробовать следующий код:

public Locale getLocale() {
    if (this.locale == null) {
        this.locale = new Locale(System.getProperty("user.language"), System.getProperty("user.country"));
    }
    return this.locale;
}
...