L’internationalisation, i18n pour les intimes ! Il y a 18 lettres entre le i et le n du mot internationalisation : C’est le processus de conception et de développement d’une application qui peut être facilement adaptée à différents pays et langues.
internationalisation
En Java, cela se fait généralement en utilisant les classes de la bibliothèque java.util.Locale et java.text.MessageFormat. J’ai développé cette partie avec la classe ResourseBundle dans la partie swing pour gérer le multi-langue d’une interface graphique en utilisant des fichiers .properties.
Utilisez la classe java.util.ResourceBundle pour charger le fichier de propriétés approprié en fonction de la langue et du pays de l’utilisateur. Vous pouvez obtenir la langue et le pays de l’utilisateur en utilisant la classe java.util.Locale.
Exemple de code :
Locale locale = Locale.getDefault(); ResourceBundle messages = ResourceBundle.getBundle("Messages", locale); String message = messages.getString("welcomeMessage"); Object[] params = {"John", "Paris"}; String formattedMessage = MessageFormat.format(message, params); System.out.println(formattedMessage);
Dans cet bout de code, le fichier de propriétés approprié (Messages_fr_FR.properties par exemple) sera chargé en fonction de la langue et du pays de l’utilisateur (obtenus grâce à Locale.getDefault()). Le message de bienvenue sera récupéré dans ce fichier de propriétés et formatté en utilisant les valeurs de params.
Le résultat final sera affiché dans la console.
L’internationalisation est utile lorsque vous voulez créer une application qui peut être utilisée dans différents pays et langues, mais elle peut être complexe à mettre en place et à maintenir.
Oui et non, (une réponse de Normand, je sais) i18n est effectivement bien pratique pour les sites web qui doivent être traduits dans de nombreuses langues. En utilisant les classes vues plus haut.
Il existe également d’autres manières de faire de l’internationnalisation pour les sites web (en Java).
Remarque : L’i18n peut être une tâche complexe et fastidieuse, en particulier lorsque vous prenez en charge de nombreuses langues et pays. Il faut choisir une approche qui convient le mieux à vos besoins en matière de traduction et de gestion de contenu. C’est du boulot !
Vous avez de la chance, Spring Boot offre un support intégré pour l’internationalisation (i18n) des applications web.
Il suffit d’ajouter les dépendances suivantes à votre fichier pom.xml pour les fans de maven ou build.gradle pour les autres (comme moi) !
On suppose, ici, l’utilisation du template Thymeleaf 3.1.1
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> </dependencies>
dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' }
Principe : Chaque fichier .properties contiendra les chaînes de caractères traduites pour une langue et un pays, jusque là, rien ne change.
.properties
Vous devez définir la langue par défaut de votre application dans le fichier de propriétés principal application.properties
spring.messages.basename=messages spring.messages.encoding=UTF-8 spring.messages.fallback-to-system-locale=true
Dans SpringBoot, il suffit d’utiliser la classe org.springframework.context.MessageSource pour charger les chaînes de caractères traduites dans les fichiers properties.
org.springframework.context.MessageSource
@Autowired private MessageSource messageSource; public String getMessage(String code, Object[] args, Locale locale) { return messageSource.getMessage(code, args, locale); }
ou bien dans vos templates Thymeleaf :
#{message.code}
dans votre build.gradle :
dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.apache.tiles:tiles-jsp:3.0.8' implementation 'org.apache.tiles:tiles-extras:3.0.8' implementation 'org.apache.tiles:tiles-servlet:3.0.8' implementation 'org.apache.tiles:tiles-template:3.0.8' }
Créez un fichier de configuration Tiles nommé tiles.xml dans le répertoire src/main/resources de votre projet. Définissez les gabarits que vous souhaitez utiliser dans ce fichier.
Exemple :
<tiles-definitions> <definition name="base.definition" template="/WEB-INF/layouts/layout.jsp"> <put-attribute name="title" value="My App" /> <put-attribute name="header" value="/WEB-INF/views/header.jsp" /> <put-attribute name="menu" value="/WEB-INF/views/menu.jsp" /> <put-attribute name="body" value="" /> <put-attribute name="footer" value="/WEB-INF/views/footer.jsp" /> </definition> </tiles-definitions>
A vous de faire vos recherches si vous souhaitez utiliser ce framework !