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

1. Общ преглед

В този бърз урок ще разгледаме как можем да добавим интернационализация към приложението Spring Boot .

2. Зависимости на Maven

За развитие се нуждаем от следната зависимост:

 org.springframework.boot spring-boot-starter-thymeleaf 1.5.2.RELEASE 

Последната версия на spring-boot-starter-thymeleaf може да бъде изтеглена от Maven Central.

3. LocaleResolver

За да може нашето приложение да определи кой локал се използва в момента, трябва да добавим Bean LocaleResolver :

@Bean public LocaleResolver localeResolver() { SessionLocaleResolver slr = new SessionLocaleResolver(); slr.setDefaultLocale(Locale.US); return slr; }

Интерфейсът LocaleResolver има изпълнения, които определят текущия локал въз основа на сесията, бисквитките, заглавката 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 адреса във формата: / international? Lang = fr

Ако в URL адреса не присъства параметър lang , приложението ще използва локала по подразбиране, в нашия случай локал в САЩ .

Нека добавим падащо меню към нашата HTML страница с двете локали, чиито имена също са локализирани в нашите файлове с свойства:

:     

След това можем да добавим jQuery скрипт, който ще извика / international URL със съответния параметър lang в зависимост от избраната опция за падащо меню:

   $(document).ready(function() { $("#locales").change(function () { var selectedOption = $('#locales').val(); if (selectedOption != ''){ window.location.replace('international?lang=' + selectedOption); } }); }); 

7. Стартиране на приложението

За да инициализираме нашето приложение, трябва да добавим основния клас, коментиран с @SpringBootApplication :

@SpringBootApplication public class InternationalizationApp { public static void main(String[] args) { SpringApplication.run(InternationalizationApp.class, args); } }

В зависимост от избрания локал, ще стартираме страницата на английски или френски, когато стартираме приложението.

Нека видим английската версия:

А сега да видим френската версия:

8. Заключение

В този урок показахме как можем да използваме поддръжката за интернационализация в приложението Spring Boot.

Пълният изходен код за примера може да бъде намерен в GitHub.