2012-06-02 3 views
7

Я столкнулся с проблемой.Получение языка ОС в java

Я французский и работаю над английской версией Windows XP. Поэтому я установил региональные варианты на французский язык, но все же имею пользовательский интерфейс на английском языке.

Я работаю над небольшим Java SE-приложением и решил интернационализировать его с помощью пакета ресурсов.

Для отображения правильного языка, я создаю сверток с этой функцией:

private static ResourceBundle bundle = ResourceBundle 
      .getBundle("locale.Strings", Locale.getDefault()); 

Но функция Locale.getDefault() возвращает региональные настройки (значение: французский), а не язык пользовательского интерфейса системы. В результате мой пользовательский интерфейс по умолчанию стоит на французском языке в английской среде. И хорошо, это не совсем то, что я ожидал ...

Кто-нибудь знает о независимом от платформы способе восстановления языка пользовательского интерфейса системы? Спасибо заранее!

Редактировать: исправлено Local to Locale, спасибо.

+1

Ну, мне кажется, что то, что делает Java, - это правильная вещь. Если вы настроили свою ОС с французскими настройками, и ОС продолжает отображать все на английском языке, но не на Java, ОС не подходит, но Java, не так ли? Если вы хотите все на английском, почему бы вам не настроить его с английскими настройками? –

+0

не должен быть 'Locale.getDefault()', а не 'Local.getDefault()'? –

+7

@JBNizet это не такое необычное требование. Я голландский, и, как и в OP, я предпочитаю, чтобы мой язык графического интерфейса был английским, при этом у меня все еще есть форматы чисел и форматы даты, которые я использую из своего собственного языка (например, смущая меня, требуя дополнительного времени синтаксиса в моем мозгу). Программные переводы часто ужасны, вдвойне, в таких областях, как программирование, где жаргон - английский. – Barend

ответ

7

Это неправильная настройка в Windows. Locale#getDefault() возвращает языковой стандарт системы, а не область или местоположение даты/времени.

В ниже Windows XP конкретного экрана, вы можете просто установить Региональные параметры и Язык на французском или что угодно. Выпадающее меню Advanced на самом деле устанавливает языковой стандарт системы и в вашем случае должно быть установлено на английском языке.

enter image description here

Правда, это в Windows XP плохо объяснил, Windows 7 делает это несколько лучше:

enter image description here

+1

Это не так очевидно. Существует различие между Java 7 и предыдущими версиями. Кроме того, может быть разница между локализованной и MUI версией Windows, но в этом случае я ожидал бы английский, а не французский. Это сложно :) –

3

У меня нет никаких средств, чтобы попробовать его (как я стараюсь избегать всего сделанные Microsoft), но посмотрите на них:

Java 7 Требуется:

Locale uiLocale = Locale.getDefault(Locale.Category.DISPLAY); 

Это то, что должно использоваться для получения переводов (начиная с Java 7).

Если это не было очень полезно, я хотел бы попробовать:

System.out.println(System.getenv("LC_MESSAGES"));  
System.out.println(System.getenv("LANG")); 
System.out.println(System.getenv("LANGUAGE")); 

Однако, в этом случае я бы ожидать некоторое сходство по умолчанию Locale ...

0

Я попробовал несколько вещей, благодаря ваши предложения, и вот мое наблюдение:

  • Если вы используете Java 6, а не Java 7, вы являетесь f *** ed.
  • Если вы используете Java 7, вы должны сделать так, как сообщает BalusC: измените настройку в Region и Language Settings. После этого Locale.getDefault() по умолчанию возвращает язык отображения, то есть английский, если вы установите его на английский. Чтобы убедиться в этом, вы можете создать свой язык, вызывая Locale.getDefault (Locale.Category.DISPLAY)
Смежные вопросы