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

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

Я попробовал

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

и т.д.

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

Помогите.

27
задан Sudhir 18 March 2010 в 11:34
поделиться

3 ответа

Команда 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; см. https://stackoverflow.com/a/8319889/139985

30
ответ дан 28 November 2019 в 05:01
поделиться

А как насчет

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

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

user.country = DE

user.language = de

Вы легко можете сгенерировать локаль из этой информации. Local - это 'language' _ 'country', поэтому в моем случае de_DE

14
ответ дан 28 November 2019 в 05:01
поделиться

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

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

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

8
ответ дан 28 November 2019 в 05:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: