13 октября 2008

Интернационализация и локализация в Spring MVC

Интерфейс ApplicationContext расширяет интерфейс называемый MessageSource , который предоставляет функциональность по интернационализации приложений. (Подробней)
Существует две реализации описанного интерфейса : StaticMessageSource и
ResourceBundleMessageSource . Если быть точнее они реализуют не сам MessageSource, а его дочерний класс HierarchicalMessageSource, который кроме прочего позволяет иерархически обрабатывать сообщения.
StaticMessageSource - тяжёлый в использовании, но позволяющий програмно добавлять сообщения в список заготовленных сообщений, что далеко не всегда нужно.
ResourceBundleMessageSource рассмотрим болле подробно с помощью примера:
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>format</value>
<value>exceptions</value>
</list>
</property>
</bean>

Тут мы зарегистрировали бин, который будет искать messages в двух файлах:

format.properties
errors.properties

Это файлы используемые по умолчанию, но если в вашем броузере установлена какая то специфическая локализация ,

то сначала будут искатся файлы характерные для этой локализации ,
например для украинского языка:
format_uk.properties
errors_uk.properties

для немецкого
format_de.properties
errors_de.properties

и так далее ..

Все выше перечисленные файлы необходимо разместить в CLASSPATH.
В каждом из файлов в столбик записаны код сообщения и их значения для определённого языка.
Например
# в файле 'format.properties'
message=Hello world message!

Или пример по сложнее:
# в файле 'errors_uk.properties'
argument.required=Поле '{0}' є обов`язковим для заповнення

Для того что бы вывести эти сообщения на jsp странице используется тег spring:message .


В результате получаем вполне понятное сообщение об ошибке для украинской локализации:
Пример из файла error_uk :
Поле Address є обов`язковим для заповнення

5 комментариев:

Анонимный комментирует...

Благодарю. Весьма кстати этот замечательный пост

just_ice комментирует...

Копипаст немного Вас подвёл.
В примере xml Вы пишете:

[value]format[/value]
[value]exceptions[/value]
[value]windows[/value]

Далее по тексту идёт пояснение:

... в двух файлах:
format.properties
errors.properties

just_ice комментирует...

Вы пишете:

если в вашем броузере установлена какая то специфическая локализация

Наверное, Вы имели ввиду контейнер сервлетов.

Вы пишете:

Пример для сообщения из файла error_uk :

Ожидаемого примера ниже нет.

Rumoku комментирует...

1,3 замечания - спасибо , исправил
2 - нет, я имел ввиду именно броузер на стороне клиента (Для ФФ это: Инструменты-Настройки-Содержимое-Языки).

summ3r комментирует...

Добрый день! Если Вы заинтересованы в локализации web-ПО, ПО для персональных компьютеров, ПО для мобильных устройств либо иного вида программного обеспечения, я рекомендую Вам использовать этот инструмент на базе web: https://poeditor.com/ POEditor является интуитивным, хорошо проработанным инструментом, обладающим рядом полезных свойств, которые помогают организовать процесс управления переводом. Он поддерживает множество популярных форматов файлов и обладает собственным API, что обеспечивает лучшую автоматизацию. Желаю Вам больших успехов в Ваших проектах!