Internationalisation (i18n) en Java : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Internationalisation (i18n) en Java : Guide complet

\n\n

L'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\n

Dans 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.

\n\n

1. Composants principaux de l'i18n en Java

\n\n

L'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 paires clé=valeur. Le nom du fichier suit les règles : NomBase_langue_PAYS.properties.
  • \n
\n\n

Exemple de structure de fichiers pour les langues russe et anglaise :

\n\n
Messages.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\n

2. Création de fichiers de propriétés

\n\n

Créons un fichier de base Messages.properties (valeurs par défaut en anglais) :

\n\n
greeting=Hello\nfarewell=Goodbye\napp.name=My Application\n
\n\n

Créons maintenant la localisation russe Messages_ru_RU.properties :

\n\n
greeting=Здравствуйте\nfarewell=До свидания\napp.name=Моё приложение\n
\n\n

Pour l'anglais (États-Unis) — Messages_en_US.properties :

\n\n
greeting=Hello\nfarewell=Goodbye\napp.name=My Application\n
\n\n

3. Utilisation de Locale et ResourceBundle

\n\n

Pour charger les chaînes localisées, on utilise le code suivant :

\n\n
import 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\n

Si la locale n'est pas trouvée, Java utilise automatiquement une chaîne de recherche :

\n
    \n
  1. D'abord, il cherche un fichier avec une correspondance exacte (Messages_ru_RU.properties).
  2. \n
  3. Ensuite, sans le pays (Messages_ru.properties).
  4. \n
  5. Puis, le fichier de base (Messages.properties).
  6. \n
  7. Si rien n'est trouvé, une exception MissingResourceException est levée.
  8. \n
\n\n

4. Formatage des messages avec MessageFormat

\n\n

Les chaînes contiennent souvent des parties variables. Pour cela, on utilise MessageFormat. Exemple avec des données dynamiques :

\n\n<

Recommendations