Guide til internationalisering i Spring Boot

1. Oversigt

I denne hurtige vejledning skal vi se på, hvordan vi kan tilføje internationalisering til en Spring Boot-applikation.

2. Maven-afhængigheder

Til udvikling har vi brug for følgende afhængighed:

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

Den seneste version af spring-boot-starter-thymeleaf kan downloades fra Maven Central.

3. LandestandResolver

For at vores ansøgning skal være i stand til at bestemme, hvilket landestandard der i øjeblikket bruges, skal vi tilføje et LandestandResolver bønne:

@Bean offentlig LocaleResolver localeResolver () {SessionLocaleResolver slr = ny SessionLocaleResolver (); slr.setDefaultLocale (Locale.US); returnere slr; }

Det LandestandResolver interface har implementeringer, der bestemmer det aktuelle landestandard baseret på sessionen, cookies, Accept-sprog header eller en fast værdi.

I vores eksempel har vi brugt den sessionsbaserede resolver SessionLocaleResolver og indstil en standard landestandard med værdi OS.

4. LocaleChangeInterceptor

Dernæst skal vi tilføje en interceptor bønne, der skifter til en ny lokalitet baseret på værdien af lang parameter vedhæftet en anmodning:

@Bean offentlig LocaleChangeInterceptor localeChangeInterceptor () {LocaleChangeInterceptor lci = ny LocaleChangeInterceptor (); lci.setParamName ("lang"); returnere lci; }

For at træde i kraft skal denne bønne føjes til applikationens interceptor-register.

For at opnå dette, vores @Konfiguration Klassen skal implementere WebMvcConfigurer interface og tilsidesætte addInterceptors () metode:

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

5. Definition af meddelelseskilder

Som standard vil et Spring Boot-program søge efter beskedfiler, der indeholder internationaliseringsnøgler og værdier i src / main / ressourcer folder.

Filen til standard locale har navnet beskeder. ejendomme, og filer for hver lokalitet vil blive navngivet messages_XX.egenskaber, hvor XX er landekoden.

Tasterne til de værdier, der skal lokaliseres, skal være de samme i hver fil med værdier, der passer til det sprog, de svarer til.

Hvis en nøgle ikke findes i et bestemt anmodet landestandard, falder applikationen tilbage til standardværdien for landestandard.

Lad os definere en standardbeskedfil for det kaldte engelske sprog beskeder. ejendomme:

hilsen = Hej! Velkommen til vores hjemmeside! lang.change = Skift sprog lang.eng = Engelsk lang.fr = Fransk

Lad os derefter oprette en fil, der hedder beskeder_fr.egenskaber til det franske sprog med de samme taster:

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

6. Controller og HTML-side

Lad os oprette en controller-kortlægning, der returnerer en simpel HTML-side kaldet international.html som vi ønsker at se på to forskellige sprog:

@Controller offentlig klasse PageController {@GetMapping ("/ international") offentlig streng getInternationalPage () {returner "international"; }}

Da vi bruger thymeleaf til at vise HTML-siden, får du adgang til de landespecifikke værdier ved hjælp af tasterne med syntaksen #{nøgle}:

Hvis du bruger JSP-filer, er syntaksen:

Hvis vi ønsker at få adgang til siden med de to forskellige lokaliteter, skal vi tilføje parameteren lang til URL'en i form: / international? lang = fr

Hvis nej lang parameter er til stede på URL'en, vil applikationen i vores tilfælde bruge standardsprog OS landestandard.

Lad os tilføje en rullemenu til vores HTML-side med de to lokaliteter, hvis navne også er lokaliseret i vores egenskabsfiler:

:     

Derefter kan vi tilføje et jQuery-script, der kalder /international URL med den respektive lang parameter afhængigt af hvilken rullemenu der er valgt:

   $ (dokument). klar (funktion () {$ ("# locales"). ændring (funktion () {var valgtOption = $ ('# locales'). val (); hvis (valgtOption! = '') {vindue .location.replace ('international? lang =' + valgt valg);}});}); 

7. Kørsel af applikationen

For at initialisere vores ansøgning skal vi tilføje hovedklassen, der er kommenteret med @SpringBootApplication:

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

Afhængigt af det valgte sted vil vi se siden på enten engelsk eller fransk, når vi kører applikationen.

Lad os se den engelske version:

Og lad os nu se den franske version:

8. Konklusion

I denne vejledning har vi vist, hvordan vi kan bruge supporten til internationalisering i en Spring Boot-applikation.

Den fulde kildekode til eksemplet kan findes på GitHub.