Cambia Lingua Web Application Spring Boot

Con l’avvento delle moderne tecnologie una delle fondamentali problematiche nello sviluppo di applicazioni è stata l’internazionalizzazione dell’applicazione.
‹L’internazionalizzazione è un processo di adattamento a livello di software che separa i contenuti localizzabili dai contenuti generali all’interno di un sito web. Ad esempio, testo, valute ed immagini con testo incorporato devono essere separate dalla logica alla base del sito, come gli elementi di navigazione.›
Spring Boot essendo un framework che si prefigge la totale eliminazione dei file XML oggi vedremo come effettuare un cambio della lingua su di progetto Spring Boot già avviato.
Per prima cosa occorrerà definire il file di lingua di default nell’application.properties

# INTERNATIONALIZATION (MessageSourceAutoConfiguration)
spring.messages.basename=file_lingua
spring.messages.cache-seconds=-1
spring.messages.encoding=UTF-8

Supponiamo sia l’italiano la lingua di default scelta.
Dopo aver previsto questo file le cui componenti sono delle righe di elementi con coppie chiave valore (es. messaggio.ok=ok), queste coppie vengono tradotti in n file di ligua, ad esempio supponiamo che le lingue dell’applicativo siano inglese, tedesco, spagnolo e francese oltre all’italiano.
Il file_lingua.properties in italiano verrà tradotto rispettivamente in file_lingua_en.properties, file_lingua_te.properties, file_lingua_es.properties e file_lingua_fr.properties.
Questi file verranno inseriti nella stessa directory del file di lingua di default.
Arrivati a questo punto definiamo un’Interceptor per il cambio della lingua.
Per questa funzionalità utilizzeremo l’oggetto ResourceBundleMessageSource.
Questo codice può essere inserito in qualsiasi classe di configurazione del progetto Spring Boot purchè annotata con @Configuration.

@Configuration
public class InterceptorLanguage{
	/**
	 * Setting del Resolver per la lingua di default.
	 * @return LocaleResolver
	*/
	@Bean
	public LocaleResolver localeResolver() {
		SessionLocaleResolver slr = new SessionLocaleResolver();
		slr.setDefaultLocale(Locale.ITALIAN);
		return slr;
	}

	/**
	 * Intercettatore del file per il cambio della lingua.
	*/
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(localeChangeInterceptor());
	}

	/**
	* Gestione delle url ?lang=it oppure ?lang=es/...
	*/
	@Bean
	public LocaleChangeInterceptor localeChangeInterceptor() {
		LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
		lci.setParamName("lang");
		return lci;
	}
}

Il responsabile del cambio della lingua è il LocaleChangeInterceptor che a seconda del parametro lang attiva o meno un’altra lingua.
Ad esempio chiamando l’url /generic_url/?lang=es e disponendo del file tell_me_es.properties (definito in precedenza).
Successivamente al cambio della lingua si sarà rediretti presso l’url sulla quale ci trovavamo prima della richiesta del cambio di lingua.
Per garantire l’internazionalizzazione nei file html di presentation anziché scrivere le stringhe nei singoli tag occorre avere delle sorte di segnaposti(o chiavi) che sono appunto contenuti nei file di lingue.
In Thymeleaf queste chiavi vengono poste all’interno dell’attributo th:text nella seguente maniera th:text=“#{key}”.

Cambia Lingua Web Application Spring Boot ultima modidfica: 2015-05-19T15:37:06+02:00 da Gianluca Di Vincenzo
Posted in: Java

By on 19 Maggio 2015

Tagged: , , , , , ,