1. Обзор
В этом кратком руководстве мы рассмотрим, как мы можем добавить интернационализацию в приложение Spring Boot .
2. Зависимости Maven
Для разработки нам нужна следующая зависимость:
org.springframework.boot spring-boot-starter-thymeleaf 1.5.2.RELEASE
Последнюю версию spring-boot-starter-thymeleaf можно загрузить с Maven Central.
3. LocaleResolver
Для того, чтобы наше приложение могло определить, какая локаль в настоящее время используется, нам нужно добавить LocaleResolver bean:
@Bean public LocaleResolver localeResolver() { SessionLocaleResolver slr = new SessionLocaleResolver(); slr.setDefaultLocale(Locale.US); return slr; }
Интерфейс LocaleResolver имеет реализации, которые определяют текущую локаль на основе сеанса, файлов cookie, заголовка Accept-Language или фиксированного значения.
В нашем примере мы использовали распознаватель на основе сеанса SessionLocaleResolver и установили локаль по умолчанию со значением US .
4. LocaleChangeInterceptor
Затем нам нужно добавить компонент-перехватчик, который переключится на новую локаль на основе значения параметра lang , добавленного к запросу:
@Bean public LocaleChangeInterceptor localeChangeInterceptor() { LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); lci.setParamName("lang"); return lci; }
Чтобы вступить в силу, этот компонент должен быть добавлен в реестр перехватчиков приложения.
Для этого наш класс @Configuration должен реализовать интерфейс WebMvcConfigurer и переопределить метод addInterceptors() :
@Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(localeChangeInterceptor()); }
5. Определение источников сообщений
По умолчанию приложение Spring Boot будет искать файлы сообщений, содержащие ключи интернационализации и значения в папке src/main/resources .
Файл для локали по умолчанию будет иметь имя messages.properties , а файлы для каждой локали будут называться messages_XX.properties , где XX – код локали.
Ключи для значений, которые будут локализованы, должны быть одинаковыми в каждом файле, со значениями, соответствующими языку, которому они соответствуют.
Если ключ не существует в определенном запрошенном языковом стандарте, приложение вернется к значению языкового стандарта по умолчанию.
Давайте определим файл сообщений по умолчанию для английского языка с именем messages.properties :
greeting=Hello! Welcome to our website! lang.change=Change the language lang.eng=English lang.fr=French
Далее, давайте создадим файл с именем messages_fr.properties для французского языка с теми же ключами:
greeting=Bonjour! Bienvenue sur notre site! lang.change=Changez la langue lang.eng=Anglais lang.fr=Francais
6. Контроллер и HTML-страница
Давайте создадим отображение контроллера, которое вернет простую HTML-страницу с именем international.html что мы хотим видеть на двух разных языках:
@Controller public class PageController { @GetMapping("/international") public String getInternationalPage() { return "international"; } }
Поскольку мы используем thymeleaf для отображения HTML-страницы, доступ к языковым значениям будет осуществляться с помощью ключей с синтаксисом #{key} :
При использовании файлов JSP синтаксис:
Если мы хотим получить доступ к странице с двумя разными языками, мы должны добавить параметр lang в URL-адрес в форме:
Если параметр lang отсутствует в URL-адресе, приложение будет использовать языковой стандарт по умолчанию, в нашем случае US locale.
Давайте добавим раскрывающийся список на нашу HTML-страницу с двумя локалями, имена которых также локализованы в наших файлах свойств:
:
Затем мы можем добавить скрипт jQuery, который вызовет URL-адрес /international с соответствующим параметром lang в зависимости от выбранного раскрывающегося списка:
7. Запуск приложения
Чтобы инициализировать наше приложение, мы должны добавить основной класс с аннотацией @SpringBootApplication :
@SpringBootApplication public class InternationalizationApp { public static void main(String[] args) { SpringApplication.run(InternationalizationApp.class, args); } }
В зависимости от выбранного языкового стандарта при запуске приложения мы будем просматривать страницу на английском или французском языках.
Давайте посмотрим английскую версию:
8. Заключение
В этом уроке мы показали, как мы можем использовать поддержку интернационализации в приложении Spring Boot.
Полный исходный код для примера можно найти на GitHub .