Интернационализация
Интернационализация - это приемы разработки программного обеспечения, позволяющие адаптировать его к языковым и культурным особенностям различных стран и регионов.
Локаль
Локаль - это набор параметров, определяющий региональные настройки, такие как:
- Язык
- Страна (в свою очередь определяет форматы отображения чисел, дат)
- Часовой пояс
- Год, с которого будет начинаться 100-летний период, в случае если год задан двузначным числом
Форматы задания параметров локали
Язык и страна задаются в стандартном Java формате. Например, язык может быть задан с помощью строк ru
, en
, fr
, а страна соответственно RU
, US
, CA
. Часовой пояс задается в формате, поддерживаемом Java методом TimeZone.getTimeZone
(примеры: PST
, Europe/Minsk
, GMT-8:00
). Год задается как число (пример: 1960
).
Определение текущей локали
Локаль сервера определяется локалью по умолчанию JVM, в которой этот сервер стартует (а именно параметрами запуска user.language
, user.country
, user.timezone
, user.twoDigitYearStart
). Параметры этой локали автоматически при старте сервера приложений сохраняются в следующие свойства:
Параметр локали | Параметр запуска | Свойство |
---|---|---|
Язык | user.language | Authentication.serverLanguage[] |
Страна | user.country | Authentication.serverCountry[] |
Часовой пояс | user.timezone | Authentication.serverTimezone[] |
Год начала 100-летнего периода | user.twoDigitYearStart | Authentication.serverTwoDigitYearStart[] |
Локаль сервера используется в качестве текущей, когда действие, в котором осуществляется локализация, инициировано системой, а не каким-то конкретным пользователем (то есть текущим пользователем считается системный пользователь).
В остальных случаях текущая локаль определяется значениями следующих свойств (в качестве параметра передается пользователь, который инициировал действие):
Параметр | Свойство |
---|---|
Язык | Authentication.language[CustomUser] |
Страна | Authentication.country[CustomUser] |
Часовой пояс | Authentication.timezone[CustomUser] |
Год начала 100-летнего периода | Authentication.twoDigitYearStart[CustomUser] |
В текущей реализации платформы вышеперечисленные свойства позволяют, как использовать параметры локали операционной системы пользователя, так и задать эти параметры явно для конкретных пользователей, или, к примеру, использовать для всех пользователей локаль сервера (именно такое поведение используется по умолчанию).
Локализация строковых данных
Основной задачей интернационализации в платформе является локализация строковых данных, которые видит пользователь. При передаче клиенту с сервера текстовых сообщений, заголовков свойств, действий, форм и т. д. может происходить перевод их на другой язык или другое преобразование в зависимости от текущей локали.
Создание локализуемых строк осуществляется следующим образом: в строке вместо текста, который необходимо локализовать, указывается идентификатор строковых данных, заключенный в фигурные скобки (например, '{button.cancel}'
). При передаче этой строки клиенту на сервере осуществляется поиск всех встречаемых в строке идентификаторов, затем осуществляется поиск каждого из них во всех ResourceBundle файлах проекта в нужной локали, и при нахождении идентификатор в скобках заменяется на соответствующий текст.