Каков корректный способ знать язык операционной системы (локаль) из кода Java?
Я попробовал
Locale.getDefault()
System.getProperties("user.language")
и т.д.
но они не корректны, ничто на самом деле не отображает "Системную Локаль", которая доступна командой "systeminfo" в окнах.
Помогите.
Команда 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
А как насчет
System.getProperty("user.country");
System.getProperty("user.language");
Возврат в моем случае
user.country = DE
user.language = de
Вы легко можете сгенерировать локаль из этой информации. Local - это 'language' _ 'country', поэтому в моем случае de_DE
Как насчет использования локали по умолчанию?
Locale locale = Locale.getDefault();
String lang = locale.getDisplayLanguage();
String country = locale.getDisplayCountry();
Это возвращает мне мой текущий язык и страну в соответствии с командой Windows systeminfo
. Это то, что вы ищете? (Если вам нужны двухсимвольные коды для языка / страны, вы можете просто использовать getLanguage ()
или getCountry ()
).