Guida all'internazionalizzazione in Spring Boot

1. Panoramica

In questo breve tutorial, daremo un'occhiata a come aggiungere l'internazionalizzazione a un'applicazione Spring Boot .

2. Dipendenze di Maven

Per lo sviluppo, abbiamo bisogno della seguente dipendenza:

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

L'ultima versione di spring-boot-starter-thymeleaf può essere scaricata da Maven Central.

3. LocaleResolver

Affinché la nostra applicazione possa determinare quale locale è attualmente in uso, dobbiamo aggiungere un bean LocaleResolver :

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

L' interfaccia LocaleResolver dispone di implementazioni che determinano le impostazioni internazionali correnti in base alla sessione, ai cookie, all'intestazione Accept-Language o a un valore fisso.

Nel nostro esempio, abbiamo utilizzato il resolver basato sulla sessione SessionLocaleResolver e impostato una locale predefinita con valore US .

4. LocaleChangeInterceptor

Successivamente, è necessario aggiungere un bean di intercettazione che passerà a una nuova locale in base al valore del parametro lang aggiunto a una richiesta:

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

Affinché abbia effetto, questo bean deve essere aggiunto al registro di intercettazione dell'applicazione.

Per ottenere ciò, la nostra classe @Configuration deve implementare l' interfaccia WebMvcConfigurer e sovrascrivere il metodo addInterceptors () :

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

5. Definizione delle origini dei messaggi

Per impostazione predefinita, un'applicazione Spring Boot cercherà i file di messaggi contenenti chiavi e valori di internazionalizzazione nella cartella src / main / resources .

Il file per la locale predefinita avrà il nome messages.properties e i file per ogni locale saranno denominati messages_XX.properties , dove XX è il codice della locale.

Le chiavi per i valori che verranno localizzati devono essere le stesse in ogni file, con valori appropriati alla lingua a cui corrispondono.

Se una chiave non esiste in una determinata lingua richiesta, l'applicazione tornerà al valore della locale predefinita.

Definiamo un file di messaggio predefinito per la lingua inglese chiamato messages.properties :

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

Successivamente, creiamo un file chiamato messages_fr.properties per la lingua francese con le stesse chiavi:

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

6. Controller e pagina HTML

Creiamo una mappatura del controller che restituirà una semplice pagina HTML chiamata international.html che vogliamo vedere in due lingue diverse:

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

Poiché stiamo usando thymeleaf per visualizzare la pagina HTML, si accederà ai valori specifici della locale utilizzando i tasti con la sintassi # {key} :

Se si utilizzano file JSP, la sintassi è:

Se vogliamo accedere alla pagina con le due diverse localizzazioni dobbiamo aggiungere il parametro lang all'URL nella forma: / international? Lang = fr

Se sull'URL non è presente alcun parametro lang , l'applicazione utilizzerà la locale predefinita, nel nostro caso la locale US .

Aggiungiamo un menu a discesa alla nostra pagina HTML con le due lingue i cui nomi sono localizzati anche nei nostri file delle proprietà:

:     

Quindi possiamo aggiungere uno script jQuery che chiamerà l' URL / international con il rispettivo parametro lang a seconda dell'opzione a discesa selezionata:

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

7. Esecuzione dell'applicazione

Per inizializzare la nostra applicazione, dobbiamo aggiungere la classe principale annotata con @SpringBootApplication :

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

A seconda della lingua selezionata, visualizzeremo la pagina in inglese o francese durante l'esecuzione dell'applicazione.

Vediamo la versione inglese:

E ora vediamo la versione francese:

8. Conclusione

In questo tutorial, abbiamo mostrato come possiamo utilizzare il supporto per l'internazionalizzazione in un'applicazione Spring Boot.

Il codice sorgente completo per l'esempio può essere trovato su GitHub.