Przewodnik po internacjonalizacji w Spring Boot

1. Przegląd

W tym krótkim samouczku przyjrzymy się, jak możemy dodać internacjonalizację do aplikacji Spring Boot .

2. Zależności Mavena

Do rozwoju potrzebujemy następującej zależności:

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

Najnowszą wersję spring-boot-starter-thymeleaf można pobrać z Maven Central.

3. LocaleResolver

Aby nasza aplikacja mogła określić, które locale jest aktualnie używane, musimy dodać bean LocaleResolver :

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

LocaleResolver interfejs ma implementacje, które określają bieżące locale na podstawie sesji, ciasteczka, z Accept-Language nagłówku lub stałej wartości.

W naszym przykładzie użyliśmy mechanizmu rozpoznawania sesji SessionLocaleResolver i ustawiliśmy domyślne ustawienia narodowe z wartością US .

4. LocaleChangeInterceptor

Następnie musimy dodać komponent przechwytujący, który przełączy się na nowe ustawienie regionalne na podstawie wartości parametru lang dołączonego do żądania:

@Bean public LocaleChangeInterceptor localeChangeInterceptor() { LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); lci.setParamName("lang"); return lci; }

Aby odniosło skutek, ten komponent bean musi zostać dodany do rejestru przechwytywaczy aplikacji.

Aby to osiągnąć, nasza klasa @Configuration musi zaimplementować interfejs WebMvcConfigurer i nadpisać metodę addInterceptors () :

@Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(localeChangeInterceptor()); }

5. Definiowanie źródeł wiadomości

Domyślnie aplikacja Spring Boot szuka plików wiadomości zawierających klucze internacjonalizacji i wartości w folderze src / main / resources .

Plik dla domyślnych ustawień narodowych będzie miał nazwę messages.properties , a pliki dla każdego ustawienia narodowego będą miały nazwę messages_XX.properties , gdzie XX to kod ustawień regionalnych.

Klucze dla wartości, które zostaną zlokalizowane, muszą być takie same w każdym pliku, z wartościami odpowiednimi dla języka, któremu odpowiadają.

Jeśli klucz nie istnieje w określonych żądanych ustawieniach regionalnych, aplikacja powróci do domyślnych wartości ustawień regionalnych.

Zdefiniujmy domyślny plik wiadomości dla języka angielskiego o nazwie messages.properties :

greeting=Hello! Welcome to our website! lang.change=Change the language lang.eng=English lang.fr=French

Następnie utwórzmy plik o nazwie messages_fr.properties dla języka francuskiego z tymi samymi kluczami:

greeting=Bonjour! Bienvenue sur notre site! lang.change=Changez la langue lang.eng=Anglais lang.fr=Francais

6. Kontroler i strona HTML

Utwórzmy mapowanie kontrolera, które zwróci prostą stronę HTML o nazwie international.html , którą chcemy zobaczyć w dwóch różnych językach:

@Controller public class PageController { @GetMapping("/international") public String getInternationalPage() { return "international"; } }

Ponieważ używamy thymeleaf do wyświetlania strony HTML, dostęp do wartości specyficznych dla ustawień regionalnych można uzyskać za pomocą kluczy o składni # {klucz} :

Jeśli używasz plików JSP, składnia jest następująca:

Jeśli chcemy uzyskać dostęp do strony z dwoma różnymi lokalizacjami, musimy dodać parametr lang do adresu URL w postaci: / international? Lang = fr

Jeśli w adresie URL nie ma parametru lang , aplikacja użyje domyślnego ustawienia narodowego, w naszym przypadku języka US .

Dodajmy listę rozwijaną do naszej strony HTML z dwoma ustawieniami narodowymi, których nazwy są również zlokalizowane w naszych plikach właściwości:

:     

Następnie możemy dodać skrypt jQuery, który wywoła / international URL z odpowiednim parametrem lang w zależności od wybranej opcji rozwijanej:

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

7. Uruchomienie aplikacji

Aby zainicjować naszą aplikację, musimy dodać główną klasę z adnotacją @SpringBootApplication :

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

W zależności od wybranej lokalizacji, podczas uruchamiania aplikacji wyświetlimy stronę w języku angielskim lub francuskim.

Zobaczmy wersję angielską:

A teraz zobaczmy wersję francuską:

8. Wniosek

W tym samouczku pokazaliśmy, jak możemy wykorzystać obsługę internacjonalizacji w aplikacji Spring Boot.

Pełny kod źródłowy dla przykładu można znaleźć na GitHub.