Pourquoi votre application Java devrait-elle parler le langage humain ?
\n\nAvez-vous déjà réfléchi à la raison pour laquelle les applications que nous utilisons chaque jour — de Spotify à Notion — « comprennent » immédiatement dans quelle langue s'adresser à vous ? Elles ne lisent pas dans les pensées, ne devinent pas par adresse IP. Elles utilisent l'internationalisation (i18n).
\n\nPour un développeur Java, savoir rendre les applications multilingues n'est pas simplement un « gadget », mais une compétence obligatoire si vous visez le marché mondial. Imaginez : vous avez créé un super service de gestion de tâches. En Russie, il a décollé. Mais dès que vous voulez le vendre en Allemagne ou au Japon — les utilisateurs verront le bouton « Créer une tâche » en russe. Et ils fermeront l'onglet. Triste, n'est-ce pas ?
\n\nDans cet article, nous ne parlerons pas seulement de théorie. Nous prendrons une application Java (la plus ordinaire, console ou web) et nous y ajouterons pas à pas la prise en charge des langues russe, anglaise et allemande. Vous verrez que l'internationalisation Java n'est pas effrayante, mais plutôt élégante. C'est parti !
\n\nQu'est-ce que l'internationalisation et la localisation ? Ne les confondez pas !
\n\nCes concepts sont souvent mélangés. Mettons les points sur les i.
\n\n- \n
- Internationalisation (i18n) — c'est le processus de conception d'une application afin qu'elle puisse être adaptée à différentes langues et régions sans modification du code. Vous créez des « crochets » pour la traduction. \n
- Localisation (l10n) — c'est le remplissage de ces « crochets » avec des traductions spécifiques, des formats de dates, des devises et des règles de tri pour un pays particulier. \n
En Java, les classes du package java.util sont responsables de l'internationalisation : Locale et ResourceBundle. Souvenez-vous d'elles — ce sont vos meilleurs amis.
Étape 1. Découverte de Locale — le cœur de l'internationalisation
\n\nLa classe Locale représente une région spécifique (langue + pays). Par exemple :
- \n
Locale.US— anglais (États-Unis) \n Locale.GERMANY— allemand (Allemagne) \n new Locale("ru", "RU")— russe (Russie) \n
Locale est utilisé pour sélectionner la bonne traduction des chaînes, le formatage des nombres, des dates, des devises. Sans lui, l'internationalisation est impossible.
\n\nComment obtenir la locale actuelle ?
\n\nimport java.util.Locale;\n\npublic class Main {\n public static void main(String[] args) {\n // Locale par défaut (généralement correspond à celle du système)\n Locale defaultLocale = Locale.getDefault();\n System.out.println("Locale actuelle : " + defaultLocale);\n\n // Locales disponibles dans la JVM\n Locale[] available = Locale.getAvailableLocales();\n System.out.println("Total disponibles : " + available.length);\n }\n}\n\nLa sortie peut être, par exemple : Locale actuelle : ru_RU. Mais nous ne nous fierons pas à la locale système — dans une application web, elle est généralement transmise par le navigateur de l'utilisateur.
Étape 2. ResourceBundle — votre traducteur
\n\nMaintenant, la partie intéressante : comment stocker les traductions ? En Java, on utilise des fichiers de propriétés (.properties). Chaque fichier est un ensemble de paires clé=valeur.
Création des fichiers de traduction
\n\nCréez dans le répertoire src/main/resources (ou simplement dans le dossier des sources) trois fichiers :
1. Messages.properties (langue par défaut — anglais)
\ngreeting=Hello, {0}!\nfarewell=Goodbye!\napp.title=Task Manager\n\n2. Messages_ru_RU.properties (russe)
\ngreeting=Привет, {0}!\nfarewell=До свидания!\napp.title=Менеджер задач\n\n3. Messages_de_DE.properties (allemand)
\ngreeting=Hallo, {0}!\nfarewell=Auf Wiedersehen!\napp.title=Aufgabenverwaltung\n\nNotez les suffixes : _ru_RU, _de_DE. Java recherche le fichier selon le modèle : NomDeBase