Internationalisation (i18n) en Java : Guide complet
\n\nL'internationalisation (abrégée i18n — du mot internationalization, où entre la première lettre 'i' et la dernière 'n' se trouvent 18 lettres) est le processus de conception de logiciels afin qu'ils puissent être adaptés à différentes langues et régions sans modifier le code source. Java fournit un ensemble d'outils puissant et intégré pour l'internationalisation, permettant aux développeurs de créer facilement des applications multilingues.
\n\nDans cet article, nous allons détailler les composants principaux de l'i18n en Java : Locale, ResourceBundle, les fichiers de propriétés et MessageFormat. Vous apprendrez à structurer correctement les ressources localisées et à gérer les exceptions liées à l'absence de traduction.
1. Composants principaux de l'i18n en Java
\n\nL'internationalisation en Java repose sur trois éléments clés :
\n\n- \n
- Locale — un objet représentant une zone géographique, politique ou culturelle spécifique. Il contient des informations sur la langue, le pays (optionnel) et la variante (optionnel). \n
- ResourceBundle — une classe qui charge les ressources localisées (chaînes, formats) à partir de fichiers de propriétés (
.properties) ou d'autres sources. \n - Fichiers de propriétés — des fichiers texte avec l'extension
.properties, où sont stockées les pairesclé=valeur. Le nom du fichier suit les règles :NomBase_langue_PAYS.properties. \n
Exemple de structure de fichiers pour les langues russe et anglaise :
\n\nMessages.properties // Fichier par défaut\nMessages_en.properties // Anglais (général)\nMessages_en_US.properties // Anglais (États-Unis)\nMessages_ru_RU.properties // Russe (Russie)\n\n\n2. Création de fichiers de propriétés
\n\nCréons un fichier de base Messages.properties (valeurs par défaut en anglais) :
greeting=Hello\nfarewell=Goodbye\napp.name=My Application\n\n\nCréons maintenant la localisation russe Messages_ru_RU.properties :
greeting=Здравствуйте\nfarewell=До свидания\napp.name=Моё приложение\n\n\nPour l'anglais (États-Unis) — Messages_en_US.properties :
greeting=Hello\nfarewell=Goodbye\napp.name=My Application\n\n\n3. Utilisation de Locale et ResourceBundle
\n\nPour charger les chaînes localisées, on utilise le code suivant :
\n\nimport java.util.Locale;\nimport java.util.ResourceBundle;\n\npublic class I18nExample {\n public static void main(String[] args) {\n // Définir la locale (par exemple, langue russe, Russie)\n Locale ruLocale = new Locale("ru", "RU");\n ResourceBundle bundle = ResourceBundle.getBundle("Messages", ruLocale);\n \n // Obtenir les chaînes localisées\n String greeting = bundle.getString("greeting");\n String farewell = bundle.getString("farewell");\n String appName = bundle.getString("app.name");\n \n System.out.println(greeting + " " + farewell); // Здравствуйте До свидания\n System.out.println(appName); // Моё приложение\n }\n}\n\n\nSi la locale n'est pas trouvée, Java utilise automatiquement une chaîne de recherche :
\n- \n
- D'abord, il cherche un fichier avec une correspondance exacte (
Messages_ru_RU.properties). \n - Ensuite, sans le pays (
Messages_ru.properties). \n - Puis, le fichier de base (
Messages.properties). \n - Si rien n'est trouvé, une exception
MissingResourceExceptionest levée. \n
4. Formatage des messages avec MessageFormat
\n\nLes chaînes contiennent souvent des parties variables. Pour cela, on utilise MessageFormat. Exemple avec des données dynamiques :
Aussi dans la bibliothèque
Travailler avec CSV en TypeScript : bibliothèques et exemples de code
Travailler avec Kafka en Java : bibliothèques, configuration et exemples de code
Bibliothèque GraphQL TypeScript : guide complet des outils