Gids voor internationalisering in Spring Boot

1. Overzicht

In deze korte tutorial gaan we kijken hoe we dat kunnen voeg internationalisering toe aan een Spring Boot-applicatie.

2. Maven afhankelijkheden

Voor ontwikkeling hebben we de volgende afhankelijkheid nodig:

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

De nieuwste versie van spring-boot-starter-thymeleaf kan worden gedownload van Maven Central.

3. LocaleResolver

Om ervoor te zorgen dat onze applicatie kan bepalen welke landinstelling momenteel wordt gebruikt, moeten we een LocaleResolver Boon:

@Bean openbare LocaleResolver localeResolver () {SessionLocaleResolver slr = nieuwe SessionLocaleResolver (); slr.setDefaultLocale (Locale.US); terug slr; }

De LocaleResolver interface heeft implementaties die de huidige locale bepalen op basis van de sessie, cookies, de Accepteer-taal header of een vaste waarde.

In ons voorbeeld hebben we de sessie-gebaseerde resolver gebruikt SessionLocaleResolver en stel een standaardlandinstelling in met waarde ONS.

4. LocaleChangeInterceptor

Vervolgens moeten we een interceptorboon toevoegen die naar een nieuwe landinstelling zal overschakelen op basis van de waarde van de lang parameter toegevoegd aan een verzoek:

@Bean openbaar LocaleChangeInterceptor localeChangeInterceptor () {LocaleChangeInterceptor lci = nieuwe LocaleChangeInterceptor (); lci.setParamName ("lang"); retourneer lci; }

Om van kracht te worden, moet deze bean worden toegevoegd aan het interceptorregister van de toepassing.

Om dit te bereiken, onze @Configuratie klasse moet het WebMvcConfigurer interface en overschrijf de addInterceptors () methode:

@Override openbare ongeldige addInterceptors (InterceptorRegistry-register) {registry.addInterceptor (localeChangeInterceptor ()); }

5. De berichtbronnen definiëren

Standaard zoekt een Spring Boot-toepassing naar berichtbestanden met internationalisatiesleutels en waarden in het src / main / resources map.

Het bestand voor de standaardlandinstelling heeft de naam messages.properties, en bestanden voor elke landinstelling krijgen een naam messages_XX.properties, waar XX is de landcode.

De sleutels voor de waarden die zullen worden gelokaliseerd, moeten in elk bestand hetzelfde zijn, met waarden die passen bij de taal waarmee ze overeenkomen.

Als een sleutel niet bestaat in een bepaalde aangevraagde landinstelling, zal de toepassing terugvallen op de standaard landinstelling.

Laten we een standaard berichtenbestand definiëren voor de Engelse taal met de naam messages.properties:

groet = Hallo! Welkom op onze website! lang.change = Verander de taal lang.eng = Engels lang.fr = Frans

Laten we vervolgens een bestand maken met de naam messages_fr.properties voor de Franse taal met dezelfde toetsen:

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

6. Controller en HTML-pagina

Laten we een controllertoewijzing maken die een eenvoudige HTML-pagina retourneert met de naam international.html die we in twee verschillende talen willen zien:

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

Omdat we thymeleaf gebruiken om de HTML-pagina weer te geven, worden de locale-specifieke waarden benaderd met behulp van de sleutels met de syntaxis #{sleutel}:

Als u JSP-bestanden gebruikt, is de syntaxis:

Als we toegang willen krijgen tot de pagina met de twee verschillende landinstellingen, moeten we de parameter toevoegen lang naar de URL in de vorm: / internationaal? lang = fr

Als Nee lang parameter aanwezig is op de URL, zal de toepassing in ons geval de standaardlandinstelling gebruiken ONS locale.

Laten we een vervolgkeuzelijst toevoegen aan onze HTML-pagina met de twee landinstellingen waarvan de namen ook zijn gelokaliseerd in onze eigenschappenbestanden:

:     

Dan kunnen we een jQuery-script toevoegen dat het /Internationale URL met het respectieve lang parameter afhankelijk van welke vervolgkeuzelijst is geselecteerd:

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

7. Het uitvoeren van de applicatie

Om onze applicatie te initialiseren, moeten we de hoofdklasse toevoegen die is geannoteerd met @SpringBootApplication:

@SpringBootApplication openbare klasse InternationalizationApp {openbare statische leegte hoofd (String [] args) {SpringApplication.run (InternationalizationApp.class, args); }}

Afhankelijk van de geselecteerde landinstelling, zullen we de pagina in het Engels of Frans bekijken tijdens het uitvoeren van de applicatie.

Laten we de Engelse versie bekijken:

En laten we nu de Franse versie bekijken:

8. Conclusie

In deze tutorial hebben we laten zien hoe we de ondersteuning voor internationalisering in een Spring Boot-applicatie kunnen gebruiken.

De volledige broncode voor het voorbeeld is te vinden op GitHub.