Guide pour l’internationalisation dans Spring Boot

Guide d'internationalisation au démarrage du printemps

1. Vue d'ensemble

Dans ce rapide tutoriel, nous allons voir comment nous pouvonsadd internationalization to a Spring Boot application.

2. Dépendances 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 despring-boot-starter-thymeleaf peut être téléchargée depuis Maven Central.

3. LocaleResolver

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

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

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

Dans notre exemple, nous avons utilisé le résolveur basé sur la sessionSessionLocaleResolver et défini une locale par défaut avec la valeurUS.

4. LocaleChangeInterceptor

Ensuite, nous devons ajouter un bean intercepteur qui basculera vers une nouvelle locale en fonction de la valeur du paramètrelang 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 y parvenir, notre classe@Configuration doit implémenter l'interfaceWebMvcConfigurer et remplacer la méthodeaddInterceptors():

@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 dossiersrc/main/resources.

Le fichier pour la locale par défaut aura le nommessages.properties, et les fichiers pour chaque locale seront nommésmessages_XX.properties, oùXX est le code de la locale.

Les clés pour les valeurs qui seront localisées doivent être identiques dans chaque fichier, 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éeinternational.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 à l'aide des 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ètrelang à l'URL sous la forme:/international?lang=fr

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

Ajoutons une liste déroulante à notre page HTML avec les deux paramètres régionaux 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 de/international avec le paramètrelang respectif en fonction de l'option de liste déroulante sélectionnée:


7. Lancer 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:

screen shot in English

Et maintenant, voyons la version française:

screen shot in French

8. Conclusion

Dans ce tutoriel, nous avons montré comment utiliser le support de l'internationalisation dans une application Spring Boot.

Le code source complet de l'exemple peut être trouvéover on GitHub.