Internationalisation (i18n) en Java : rendre votre application multilingue
L'internationalisation (souvent abrégée i18n — du mot internationalization, où 18 est le nombre de lettres entre le premier 'i' et le dernier 'n') est le processus de conception de logiciels afin qu'ils puissent être adaptés à différentes langues et particularités régionales sans modification du code source. En Java, cette tâche est résolue de manière élégante et puissante grâce aux API intégrées : java.util.Locale, java.util.ResourceBundle et un ensemble de classes de formatage.
Dans cet article, nous allons voir comment implémenter la prise en charge de plusieurs langues dans une application Java en utilisant les outils standards. Vous apprendrez à créer des fichiers de localisation, à changer dynamiquement de langue et à formater correctement les nombres, les dates et les devises.
Composants principaux de l'i18n en Java
Java fournit trois éléments clés pour travailler avec l'internationalisation :
- Locale — un objet représentant une langue et une région spécifiques (par exemple, le russe en Russie —
ru_RU, l'anglais aux États-Unis —en_US). - ResourceBundle — une classe pour charger des ressources localisées (chaînes, messages, étiquettes) à partir de fichiers
.propertiesou de classes. - Formateurs — des classes du package
java.text(NumberFormat,DateFormat,MessageFormat) pour un affichage correct des nombres, des dates et des messages composés.
Étape 1 : Création des fichiers de ressources
La méthode traditionnelle pour stocker les chaînes localisées est d'utiliser des fichiers .properties. Ils sont créés selon la règle suivante :
Messages.properties # Fichier par défaut (généralement anglais)Messages_ru_RU.properties # Pour le russe (Russie)Messages_de_DE.properties # Pour l'allemand (Allemagne)Messages_fr.properties # Pour le français (sans indication de région)Exemple de contenu du fichier Messages.properties (anglais, par défaut) :
welcome.message = Welcome to our application!farewell.message = Goodbye!date.format = dd/MM/yyyyExemple de contenu du fichier Messages_ru_RU.properties (russe) :
welcome.message = Добро пожаловать в наше приложение!farewell.message = До свидания!date.format = dd.MM.yyyyImportant : les fichiers doivent être encodés en ISO 8859-1 (Latin-1) ou utiliser l'échappement Unicode pour les caractères ne faisant pas partie de cet encodage. Pour les lettres russes, un échappement sera nécessaire, par exemple \\u0414\\u043E\\u0431\\u0440\\u043E. Cependant, dans les environnements de développement modernes (IntelliJ IDEA, Eclipse) et lors de la construction avec Maven/Gradle, cela est souvent automatisé.
Étape 2 : Chargement des ressources dans le code
Pour utiliser les chaînes localisées, il suffit de créer un objet Locale et d'obtenir le ResourceBundle correspondant :
import java.util.Locale;import java.util.ResourceBundle;
public class I18nDemo { public static void main(String[] args) { // Créer une locale pour le russe Locale ruLocale = new Locale("ru", "RU"); // Charger le bundle (nom de base du fichier - "Messages") ResourceBundle bundle = ResourceBundle.getBundle("Messages", ruLocale);
// Obtenir les chaînes String welcome = bundle.getString("welcome.message"); String farewell = bundle.getString("farewell.message");
System.out.println(welcome); // Добро пожаловать в наше приложение! System.out.println(farewell); // До свидания! }}Si le fichier pour une locale spécifique n'est pas trouvé, Java utilise automatiquement le fichier par défaut (Messages.properties).
Étape 3 : Changement dynamique de langue
Dans une application web