Spec-Zone .ru
спецификации, руководства, описания, API
|
Если Вы будете смотреть на интернационализировавший исходный код, то Вы заметите, что hardcoded английские сообщения были удалены. Поскольку сообщения больше не hardcoded и потому что код языка определяется во время выполнения, та же самая исполнимая программа может быть распределена во всем мире. Никакая перекомпиляция не требуется для локализации. Программа интернационализировалась.
Можно задаваться вопросом, что произошло с текстом сообщений или что означают язык и коды страны. Не волноваться. Вы узнаете об этих понятиях, поскольку Вы ступаете посредством процесса интернационализации примера программы.
Информация о хранилищах файлов свойств о характеристиках программы или среды. Файл свойств находится в формате простого текста. Можно создать файл с примерно любым текстовым редактором.
В примере файлы свойств хранят переводимый текст сообщений, которые будут выведены на экран. Прежде, чем программа интернационализировалась, английская версия этого текста была hardcoded в System.out.println
операторы. Файл свойств значения по умолчанию, который вызывают MessagesBundle.properties
, содержит следующие строки:
greetings = Hello farewell = Goodbye inquiry = How are you?
Теперь, когда сообщения находятся в файле свойств, они могут быть преобразованы на различные языки. Никакие изменения к исходному коду не требуются. Французский транслятор создал вызванный файл свойств MessagesBundle_fr_FR.properties
, который содержит эти строки:
greetings = Bonjour. farewell = Au revoir. inquiry = Comment allez-vous?
Заметьте, что значения к правой стороне знака "равно" были преобразованы, но что ключи на левой стороне не были изменены. Эти ключи не должны измениться, потому что на них сошлются, когда Ваша программа выберет преобразованный текст.
Имя файла свойств важно. Например, имя MessagesBundle_fr_FR.properties
файл содержит fr
код языка и FR
код страны. Эти коды также используются, создавая a Locale
объект.
Locale
объект идентифицирует определенный язык и страну. Следующий оператор определяет a Locale
для которого язык является английским, и страной являются Соединенные Штаты:
aLocale = new Locale("en","US");
Следующий пример создает Locale
объекты для французского языка в Канаде и во Франции:
caLocale = new Locale("fr","CA"); frLocale = new Locale("fr","FR");
Программа гибка. Вместо того, чтобы использовать hardcoded язык и коды страны, программа получает их от командной строки во время выполнения:
String language = new String(args[0]); String country = new String(args[1]); currentLocale = new Locale(language, country);
Locale
объекты являются только идентификаторами. После определения a Locale
, Вы передаете это к другим объектам, которые выполняют полезные задачи, такие как форматирование дат и чисел. Эти объекты чувствительны к локали, потому что их поведение изменяется согласно Locale
. A ResourceBundle
пример чувствительного к локали объекта.
ResourceBundle
объекты содержат специфичные для локали объекты. Вы используете ResourceBundle
объекты изолировать уязвимые данные локали, такие как переводимый текст. В примере программы ResourceBundle
поддерживается файлами свойств, которые содержат текст сообщения, который мы хотим вывести на экран.
ResourceBundle
создается следующим образом:
messages = ResourceBundle.getBundle("MessagesBundle", currentLocale);
Параметры, которые передают к getBundle
метод идентифицирует, к какому файлу свойств получат доступ. Первый параметр, MessagesBundle
, обращается к этому семейству файлов свойств:
MessagesBundle_en_US.properties MessagesBundle_fr_FR.properties MessagesBundle_de_DE.properties
Locale
, который является вторым параметром getBundle
, определяет который из MessagesBundle
файлы выбираются. Когда Locale
создавался, код языка и код страны передали его конструктору. Отметьте, что язык и коды страны следуют MessagesBundle
на имена файлов свойств.
Теперь все, что необходимо сделать, получают преобразованные сообщения от ResourceBundle
.
Файлы свойств содержат пары ключ/значение. Значения состоят из преобразованного текста, который выведет на экран программа. Вы определяете ключи, выбирая преобразованные сообщения от ResourceBundle
с getString
метод. Например, чтобы получить сообщение, идентифицированное ключом поздравлений, Вы вызываете getString
следующим образом:
String msg1 = messages.getString("greetings");
Пример программы использует ключ greetings
потому что это отражает контент сообщения, но это, возможно, использовало другого String
, такой как s1
или msg1
. Только помните, что ключ является hardcoded в программе, и это должно присутствовать в файлах свойств. Если Ваши трансляторы случайно изменяют ключи в файлах свойств, getString
не будет в состоянии найти сообщения.
Вот именно. Как можно видеть, интернационализируя программу не является слишком трудным. Требуются некоторое планирование и небольшое дополнительное кодирование, но преимущества огромны. Чтобы предоставить Вам краткий обзор процесса интернационализации, пример программы в этом уроке был преднамеренно сохранен простым. Поскольку Вы читаете уроки, которые следуют, Вы узнаете о более усовершенствованных функциях интернационализации языка программирования Java.