Подтвердить что ты не робот

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

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

Я пробовал

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

и др.

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

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

4b9b3361

Ответ 1

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

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

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

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


ОБНОВЛЕНИЕ:. По-видимому, Java 7 изменила способ определения информации о локали, используемой getDefault() в Windows; см. fooobar.com/questions/56824/...

Ответ 2

Что насчет

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

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

user.country = ДЕ

user.language = де

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

Ответ 3

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

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

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

Ответ 4

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

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