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:


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.