Локализация Java Spring MVC приложения. Настройка поддержки нескольких языков

Локализация и интернационализация (localization & internationalization) в Spring MVC. Настройка приложения, создание и заполнение resource bundle.

Обзор приложения Spring MVC + AngularJS + Bootstrap + HTML5
Используемые технологии и библиотеки
  • Spring MVC 4.2.4.Release
  • IntelliJ IDEA 15.0.2

1. Описание задачи

Рассмотрим как реализовать интернационализацию и локализацию в приложении Spring MVC. Переведем часть интерфейса и отображаемых данных на два языка — английский и русский. Добавим возможность переключения между языками по одному клику.

На сайте ранее уже была написана статья по локализации приложения — Spring MVC — локализация (выбор языка). В этой статье расписано как создать resource bundle, а так же некоторые понятия и определения. Перед прочтением этой статьи рекомендуется ознакомиться с указанной информацией для получения дополнительной информации.

2. Структура проекта

localizationStructure

Относительно предыдущих частей в проект добавлен пакет locales и внутри него resourceBundle. В этих .properties файлах будут записаны пары ключ-значение на разных языках (английский и русский). Остальные изменения внесены в уже существующие представления и будут видны по ходу этой статьи.

3. pom.xml

Для настройки интернационализации никаких дополнительных (относительно предыдущих глав) зависимостей добавлять не нужно. Всё уже находится в базовых пакетах Spring. Полный листинг pom.xml смотрите в предыдущей части или в загруженном проекте.

4. Конфигурация Spring MVC

Все настройки по подключению локали были добавлены в файл конфигурации mvc-config.xml.

Смена локали в приложении будет реализована с помощью перехватчика LocaleChangeInterceptor (описание работы и настройки перехватчиков читайте в соответствующей статье в обзоре приложения). Также нам необходимо добавить два бина — localeResolver и messageSource. Первый необходим для определения локали приложения, а второй для настройки файла с текстом на разных языках. В приложении указанном по ссылке в начале статьи использовался класс SessionLocaleResolver, здесь мы будем использовать другой подход — CookieLocaleResolver. Названия классов поясняют разницу между этими подходами по определению локали.

Разберем по отдельности код выше. Перехватчик LocaleChangeInterceptor будет срабатывать на любой URI в нашем приложении (/*). Далее указывается имя параметра, который мы будем использовать в приложении. Его назначение будет понятнее далее по тексту.
В бине localeResolver мы указываем локаль по умолчанию (в нашем случае Ru), которая будет включаться, если в куках нет никакой информации о пришедшем пользователе (и например настройках браузера). Так же указывается срок жизни куки. Если вы хотите, чтобы они удалялись после закрытия браузера, то необходимо выставить значение -1.
Для бина messageSource задаем путь по умолчанию для файла с «источником сообщений», время кеша HTTP заголовков и кодировку по умолчанию.

Полный файл mvc-config.xml:

5. Resource Bundle

В файле messages.properties (messages_ru и messages_en) находятся пары ключ-значения, где ключ — название переменной, а значение — текст на соответствующем языке. Как создать такой файл читайте в статье указанной в начале. В IDEA можно нажать правой кнопкой и выбрать Jump to Source, чтобы увидеть следующий вид:

resourceBundle

Как видите здесь удобно редактировать для каждого ключа сразу несколько вариантов записи сообщения.

6. Представления jsp

Локализация была добавлена в несколько представлений jsp в приложении. Рассмотрим здесь только главную страницу — index.jsp.

6.1 template.tag

Основные доработки были сделаны в header нашего приложения. Как известно из начальных статей — в приложении используется шаблон для заголовка, чтобы не повторять код на каждой jsp странице. Для того, чтобы вставить текст, который будет меняться в зависимости от выбранной локали, необходимо использовать такую запись:

Где пространство имен задано как:

navMenu.login — это переменная (ключ), указанная в resource bundle (messages.properties).

Для того, чтобы переключить локаль используется следующая запись:

Т.е. это обычная ссылка EN, RU (ссылка находится внизу страницы приложения), по нажатию на которую происходит переключения локали. Это происходит с помощью добавления параметра ?languageVar=en (или ru). Напомню. что languageVar был прописан в mvc-config.xml в атрибуте propertyName для перехватчика localeChangeInterceptor.

6.2 Запуск приложения

Локализация Ru:

localizationRu

Локализация En:

localizationEn

 

 

Исходные коды

MVC_AngularJS_Html5 full project — полный проект Spring MVC + AngularJS + Bootstrap + HTML5.

17. Localization — код для этой части

Обзор приложения Spring MVC + AngularJS + Bootstrap + HTML5
Share Button
6
13515 Total Views 1 Views Today

2 thoughts on “Локализация Java Spring MVC приложения. Настройка поддержки нескольких языков

  1. Степан Пельмегов:

    Следующий вопрос возник, если в приложении используется в web.xml

    например, то при запуске приложения будет ошибка в строке подключения шаблона (<page:template>).

    Если же например убрать welcome-file-list директиву, то при запуске приложения меня кидает сразу на страницу с ошибкой error/error.jsp , но приложением можно пользоваться.

    Как можно данный вопрос решить?

    1. Степан Пельмегов:

      Сам же и отвечу, у меня в mvc-config’е отсутствовал

      , поэтому и возникала ошибка.

      Прошу прощения.

Добавить комментарий