Exemple de Spring MVC Internationalization (i18n) et Localization (L10n)



L’internationalisation (i18n) et la localisation (L10n) représentent des aspects fondamentaux dans la conception d’applications web contemporaines. Elles permettent de rendre votre application accessible à une audience globale en adaptant le contenu, les formats et les configurations à la langue et à la culture spécifiques des utilisateurs. Spring MVC, un framework web prisé pour Java, intègre un support robuste pour l’i18n et la L10n, ce qui facilite l’adaptation de votre application à diverses régions linguistiques et culturelles.

Ce guide pratique a pour objectif de vous éclairer, à travers un exemple concret, sur la manière d’implémenter l’i18n et la L10n au sein d’une application Spring MVC. Nous allons explorer les différentes étapes clés, les approches optimales et les aspects techniques pour vous permettre de développer une application web adaptable et conviviale pour un public international.

Introduction aux concepts clés

Avant de nous lancer dans l’exemple pratique, il est primordial de bien comprendre les concepts fondamentaux de l’i18n et de la L10n dans le contexte de Spring MVC :

Internationalisation (i18n) :

  • Préparation de l’application pour la localisation : Cela implique de concevoir votre code de manière à pouvoir traiter différentes langues et cultures sans modifications majeures.
  • Séparation du contenu et du code : Le contenu qui pourrait nécessiter une traduction (comme les messages d’erreur, les titres, les descriptions) doit être dissocié du code source principal.

Localisation (L10n) :

  • Adaptation du contenu à la langue et à la culture : Traduction des messages et des informations vers les langues cibles.
  • Ajustement des formats et des configurations : Cela englobe la gestion des dates, des heures, des nombres, des devises, des symboles, etc., conformément aux conventions locales.

Cas pratique : Création d’un blog multilingue

Pour illustrer l’i18n et la L10n avec Spring MVC, nous allons mettre en place une application de blog simplifiée. Cette application affichera des articles de blog en français et en anglais, tout en adaptant les formats de date et les unités de mesure à chaque langue.

Étape 1 : Configuration de Spring MVC et de ses dépendances

Pour commencer, configurez votre projet Spring MVC avec les dépendances requises pour l’i18n et la L10n.

  • Maven : Ajoutez les dépendances suivantes à votre fichier pom.xml :
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.18</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
        <version>2.7.3</version>
    </dependency>
            
  • Gradle : Ajoutez les dépendances suivantes à votre fichier build.gradle :

    implementation 'org.springframework:spring-webmvc:5.3.18'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:2.7.3'
                

Étape 2 : Création des fichiers de ressources de langue

Créez un répertoire resources/i18n à la racine de votre projet pour y stocker les fichiers de ressources de localisation.

  • Fichier messages_fr.properties :
    welcome.message=Bienvenue sur notre blog !
    article.title=Titre de l'article
    article.author=Auteur
    article.date=Date de publication
            
  • Fichier messages_en.properties :

    welcome.message=Welcome to our blog!
    article.title=Article title
    article.author=Author
    article.date=Published date
            

Étape 3 : Configuration du LocaleResolver

Le LocaleResolver est l’élément responsable de déterminer la langue utilisée par l’utilisateur. Spring MVC propose plusieurs implémentations, notamment AcceptHeaderLocaleResolver (qui déduit la langue à partir des en-têtes HTTP) et CookieLocaleResolver (qui récupère la langue à partir d’un cookie).

Dans votre classe de configuration Spring, configurez AcceptHeaderLocaleResolver :

@Configuration
public class AppConfig {
    @Bean
    public LocaleResolver localeResolver() {
        return new AcceptHeaderLocaleResolver();
    }
    // ...
}
    

Étape 4 : Configuration de l’Interceptor

Un intercepteur est un mécanisme qui permet d’intercepter les requêtes HTTP et d’exécuter du code avant ou après le traitement de la requête. Dans notre exemple, nous utiliserons l’intercepteur LocaleChangeInterceptor pour permettre aux utilisateurs de modifier la langue via un paramètre de requête.

@Configuration
public class AppConfig {
    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
        localeChangeInterceptor.setParamName("lang"); // Paramètre de requête pour changer la langue
        return localeChangeInterceptor;
    }
    @Bean
    public WebMvcConfigurer webMvcConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                registry.addInterceptor(localeChangeInterceptor());
            }
        };
    }
}

Étape 5 : Injection du MessageSource

Pour accéder aux messages localisés, injectez MessageSource dans votre contrôleur.

@Autowired
private MessageSource messageSource;
    

Étape 6 : Utilisation des messages localisés dans les vues

Utilisez MessageSource pour récupérer les messages traduits dans les vues. Par exemple, dans votre fichier Thymeleaf :

<p th:text="#{welcome.message}"></p> <!-- Affiche "Bienvenue sur notre blog !" ou "Welcome to our blog!" -->
<p th:text="#{article.title}"></p>
<p th:text="#{article.author}"></p>
<p th:text="#{article.date}"></p>
    

Étape 7 : Gestion des formats et des paramètres

Utilisez NumberFormat, DateFormat et les classes de formatage appropriées pour gérer les dates, les heures, les nombres et les devises conformément aux conventions locales. Par exemple, pour afficher la date de publication d’un article :

@GetMapping("/articles/{id}")
public String getArticle(@PathVariable Integer id, Model model) {
    // ...
    Locale locale = LocaleContextHolder.getLocale();
    DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG, locale);
    String formattedDate = dateFormat.format(article.getDate());
    model.addAttribute("formattedDate", formattedDate);
    return "article";
}

Conclusion

L’implémentation de l’i18n et de la L10n dans une application Spring MVC est un processus relativement simple grâce aux fonctionnalités intégrées du framework. En suivant les étapes présentées dans cet exemple pratique, vous pouvez adapter votre application web à une audience mondiale, ce qui améliorera son accessibilité et sa convivialité pour des utilisateurs de différentes cultures et langues.

Points importants à retenir :

  • Séparez le contenu du code pour faciliter les traductions.
  • Utilisez MessageSource pour injecter les messages localisés dans les vues.
  • Gérez les formats et les configurations en fonction des conventions locales.
  • Testez votre application avec différentes langues et cultures.

L’i18n et la L10n constituent un investissement précieux pour votre application web, car elles vous permettent d’atteindre une audience plus large, d’améliorer la satisfaction des utilisateurs et d’accroître votre portée à l’international.

FAQ

1. Qu’est-ce que le Locale dans Spring MVC ?

Le Locale représente la langue et les paramètres régionaux d’un utilisateur. Il est utilisé pour déterminer la langue des messages traduits, les formats de date, les nombres, etc.

2. Comment modifier la langue de l’application ?

Vous pouvez changer la langue via un paramètre de requête (par exemple : /articles?lang=en) ou en définissant un cookie.

3. Où puis-je trouver des ressources pour la traduction ?

De nombreuses ressources sont disponibles pour la traduction, telles que les plateformes de traduction en ligne, les services de traduction professionnels et les bases de données de termes spécifiques à votre domaine.

4. Comment gérer les unités de mesure ?

Utilisez les classes de formatage appropriées pour gérer les unités de mesure conformément aux conventions locales. Par exemple, java.text.DecimalFormat peut être utilisé pour afficher des nombres avec les unités de mesure appropriées.

5. Comment tester l’i18n et la L10n ?

Testez votre application avec différentes langues et cultures en vous assurant que les messages traduits, les formats et les configurations sont corrects.

6. Quelle est la différence entre l’i18n et la L10n ?

L’i18n se concentre sur la préparation de l’application pour la localisation, tandis que la L10n implique l’adaptation du contenu et des paramètres à des langues et des cultures spécifiques.

7. Puis-je utiliser des fichiers JSON pour les messages localisés ?

Oui, il est tout à fait possible d’utiliser des fichiers JSON pour les messages localisés. Spring MVC prend en charge les fichiers JSON et les fichiers de propriétés.

8. Comment gérer la pluralisation des messages ?

Utilisez MessageSource avec des clés multiples pour gérer la pluralisation des messages. Par exemple, utilisez #{message.plural.one} pour un message singulier et #{message.plural.other} pour un message pluriel.

9. Est-il nécessaire d’utiliser LocaleResolver dans toutes les applications ?

Oui, il est généralement recommandé d’utiliser LocaleResolver pour gérer la langue et les paramètres régionaux des utilisateurs dans une application web.

10. Quelle est la meilleure pratique pour gérer les messages localisés dans une application de grande taille ?

Utilisez un système de gestion de traduction (TMS) pour centraliser la traduction, assurer la cohérence et faciliter la collaboration avec les traducteurs.

Tags: Spring MVC, Internationalisation, Localisation, i18n, L10n, Java, Développement Web, Multilingue, Traduction, Locale, MessageSource, Formatage, Thymeleaf, Date, Nombre, Devise, Unités, Tests, Bonnes pratiques, Système de Gestion de Traduction, TMS