Рубрики
Без рубрики

Руководство по интернационализации в Spring Boot

Краткое практическое руководство по интернационализации в Spring Boot.

Автор оригинала: baeldung.

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 .