Guide de l'internationalisation dans Spring Boot

1. Vue d'ensemble

Dans ce rapide tutoriel, nous allons examiner comment nous pouvons ajouter l'internationalisation à une application Spring Boot .

2. Dépendances de Maven

Pour le développement, nous avons besoin de la dépendance suivante:

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

La dernière version de spring-boot-starter-thymeleaf peut être téléchargée à partir de Maven Central.

3. LocaleResolver

Pour que notre application puisse déterminer quelle locale est actuellement utilisée, nous devons ajouter un bean LocaleResolver :

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

L' interface LocaleResolver a des implémentations qui déterminent les paramètres régionaux actuels en fonction de la session, des cookies, de l'en - tête Accept-Language ou d'une valeur fixe.

Dans notre exemple, nous avons utilisé le résolveur basé sur session SessionLocaleResolver et défini un paramètre régional par défaut avec la valeur US .

4. LocaleChangeInterceptor

Ensuite, nous devons ajouter un bean intercepteur qui basculera vers une nouvelle locale en fonction de la valeur du paramètre lang ajouté à une requête:

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

Pour prendre effet, ce bean doit être ajouté au registre des intercepteurs de l'application.

Pour ce faire, notre classe @Configuration doit implémenter l' interface WebMvcConfigurer et remplacer la méthode addInterceptors () :

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

5. Définition des sources de messages

Par défaut, une application Spring Boot recherchera les fichiers de messages contenant des clés et des valeurs d'internationalisation dans le dossier src / main / resources .

Le fichier de la locale par défaut aura le nom messages.properties et les fichiers de chaque locale seront nommés messages_XX.properties , où XX est le code de la locale.

Les clés des valeurs qui seront localisées doivent être les mêmes dans tous les fichiers, avec des valeurs appropriées à la langue à laquelle elles correspondent.

Si une clé n'existe pas dans certains paramètres régionaux demandés, l'application reviendra à la valeur locale par défaut.

Définissons un fichier de message par défaut pour la langue anglaise appelé messages.properties :

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

Ensuite, créons un fichier appelé messages_fr.properties pour la langue française avec les mêmes clés:

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

6. Contrôleur et page HTML

Créons un mappage de contrôleur qui renverra une simple page HTML appelée international.html que nous voulons voir dans deux langues différentes:

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

Puisque nous utilisons thymeleaf pour afficher la page HTML, les valeurs spécifiques aux paramètres régionaux seront accessibles en utilisant les clés avec la syntaxe # {key} :

Si vous utilisez des fichiers JSP, la syntaxe est la suivante:

Si nous voulons accéder à la page avec les deux paramètres régionaux différents, nous devons ajouter le paramètre lang à l'URL sous la forme: / international? Lang = fr

Si aucun paramètre lang n'est présent sur l'URL, l'application utilisera la locale par défaut, dans notre cas la locale américaine .

Ajoutons une liste déroulante à notre page HTML avec les deux locales dont les noms sont également localisés dans nos fichiers de propriétés:

:     

Ensuite, nous pouvons ajouter un script jQuery qui appellera l' URL / international avec le paramètre lang respectif en fonction de l'option de liste déroulante sélectionnée:

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

7. Exécution de l'application

Afin d'initialiser notre application, nous devons ajouter la classe principale annotée avec @SpringBootApplication :

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

Selon les paramètres régionaux sélectionnés, nous afficherons la page en anglais ou en français lors de l'exécution de l'application.

Voyons la version anglaise:

Et maintenant, voyons la version française:

8. Conclusion

Dans ce didacticiel, nous avons montré comment utiliser la prise en charge de l'internationalisation dans une application Spring Boot.

Le code source complet de l'exemple est disponible à l'adresse over sur GitHub.