2012-07-02 2 views
1

Как получить текущий язык системы и использовать его для ResourceBundle?Получить системный язык и использовать его с ResourceBundle

Допустим, что машина клиента работает на японском языке, а затем я хочу, чтобы мое приложение переключилось на японский язык, если этот языковой файл недоступен, он должен иметь резервное решение.

Я знаю, что могу использовать ResourceBundle, но как бы выполнить вышеупомянутую настройку?

ResourceBundle bundle = ResourceBundle.getBundle("lang", new Locale("jp", "JP")); 

ответ

1

Расслоение ресурса автоматически пытается текущим языком системы, а затем возвращается к значению по умолчанию, если это не существует (ResourceBundle.getBundle("lang") будет искать в следующем порядке, полагая, что язык системы jp_JP: lang_jp_JP.properties ->land_jp.properties ->lang.properties). Вы можете посмотреть на процесс, который использует ResourceBundle для разрешения имен. here

+0

Я все еще не совсем понимаю, как установить значение по умолчанию. Итак, если у меня есть ResourceBundle bundle = ResourceBundle.getBundle ("lang"); 'и он не может найти системный язык, как мне установить значение по умолчанию? –

+0

Значение по умолчанию не имеет идентификаторов, это просто нормальный lang.properties. – Charles

+0

Ницца. Спасибо. –

0

От http://java.sun.com/developer/technicalArticles/Intl/ResourceBundles/

Для каждого языка перевода вашего продукта, вы создаете новую версию своего первоначального пакета ресурсов . Например, если вы создаете MyResource для хранения всего текста на английском языке, вы создадите аналогичный файл для хранения французского текста. В пулах ресурсов используется соглашение об именах , которое отличает потенциально многочисленные версии , по существу, одного и того же пакета. Каждое имя пакета состоит из базового имени и необязательного идентификатора локали. Вместе эти две части уникально идентифицируют пакет в пакете.

Используя приведенный выше пример, французская версия ресурсов должна быть с именем MyResource_fr_FR. Канадская французская версия должна быть MyResource_fr_CA.

Прилагая название локали к базовому имени пакета эффективно связывает использование пакета в определенном регионе. Когда вы запрашиваете пакет с помощью ResourceBundle.getBundle («MyResource»), метод getBundle добавляет идентификатор локали по умолчанию к базовому имени, а загружает соответствующий комплект. Если локаль fr_CA, то вызов ResourceBundle.getBundle («MyResource») загрузит пакет MyResource_fr_CA .