Maison  >  Article  >  Java  >  Internationalisation en Java

Internationalisation en Java

PHPz
PHPzoriginal
2024-07-31 09:00:41551parcourir

Internationalisation in Java

L'internationalisation (souvent abrégée en i18n) fait référence à la conception et à la préparation de logiciels pouvant être facilement adaptés à diverses langues, régions et cultures sans nécessiter de modifications techniques du code. Ceci est généralement suivi d'une localisation (souvent abrégée en l10n), qui implique l'adaptation du logiciel internationalisé à une langue spécifique, notamment la traduction du texte, l'ajustement aux conventions locales et la modification d'autres éléments spécifiques à la langue.

L'objectif est de rendre le logiciel suffisamment flexible pour prendre en charge plusieurs paramètres régionaux en séparant la logique de base des éléments spécifiques aux paramètres régionaux tels que les conventions linguistiques et culturelles.

Ensemble de ressources

Localiser un message texte dans un programme Java simple est un peu simple en utilisant la classe ResourceBundle fournie par le langage de programmation. La classe ResourceBundle facilite le chargement des attributs clé-valeur spécifiques aux paramètres régionaux définis dans les fichiers de propriétés. Ces fichiers de propriétés sont appelés groupes de ressources.

ResourceBundle resources = 
        ResourceBundle.getBundle("messages", Locale.FRANCE);
String greeting = resources.getString("greeting.hello");
assertEquals("Bonjour le monde", greeting);

String greetingUsername = 
        MessageFormat.format(resources.getString("greeting.username"), "Ayo");
assertEquals("Bonjour Ayo", greetingUsername);

Utiliser i8n-resource-bundle

Une autre méthode de localisation d'un message texte dans un programme Java consiste à utiliser des bibliothèques tierces. L'une de ces bibliothèques est i18n-resource-bundle. Cette bibliothèque est une implémentation du ResourceBundle évoqué précédemment.

Dépendance

Ajoutez la dépendance ci-dessous dans votre pom.xml si vous utilisez Maven

<dependency>
    <groupId>io.github.jelilio</groupId>
    <artifactId>i18n-resource-bundle</artifactId>
    <version>0.0.2</version>
</dependency>

Si vous préférez Gradle, utilisez plutôt ceci ;

implementation 'io.github.jelilio:i18n-resource-bundle:0.0.2'

Source du message

i8n-resource-bundle fournit une interface MessageSource qui définit plusieurs méthodes de résolution des messages. Il a deux implémentations, ResourceBundleMessageSource et ReloadableResourceBundleMessageSource. Les deux implémentations accèdent aux regroupements de ressources en utilisant des noms de base spécifiés similaires à Java ResourceBundle. Le ResourceBundleMessageSource résout les messages sous forme de groupes de ressources pour différents paramètres régionaux en s'appuyant sur l'implémentation ResourceBundle de Java en combinaison avec MessageFormat pour l'analyse des messages.

ResourceBundleMessageSource messageSource = 
        new ResourceBundleMessageSource();
messageSource.setBasenames("messages");

String greeting = messageSource
        .getMessage("greeting.hello", null, Locale.FRANCE);
assertEquals("Bonjour le monde", greeting);

String greetingUsername = messageSource
        .getMessage("greeting.username", new String[]{"Ayo"}, Locale.FRANCE);
assertEquals("Bonjour Ayo", greetingUsername);

ReloadableResourceBundleMessageSource

Contrairement à ResourceBundleMessageSource, ReloadableResourceBundleMessageSource utilise les instances de propriétés de Java comme structure de données personnalisée pour les messages les chargeant à l'aide de stratégies différentes qui permettent le rechargement des fichiers de propriétés en fonction des modifications d'horodatage et d'un encodage de caractères spécifique sans avoir besoin de redémarrer l'application.

ReloadableResourceBundleMessageSource messageSource = 
        new ReloadableResourceBundleMessageSource();
messageSource.setBasenames("messages");

String greeting = messageSource
        .getMessage("greeting.hello", null, Locale.FRANCE);
assertEquals("Bonjour le monde", greeting);

String greetingUsername = messageSource
        .getMessage("greeting.username", new String[]{"Ayo"}, Locale.US);
assertEquals("Bonjour Ayo", greetingUsername);

Conclusion

Dans ce bref guide, nous avons appris à implémenter l'internationalisation (i18n) dans les applications Java à l'aide de ResourceBundle et i18n-resource-bundle. nous avons appris comment les groupes de ressources sont résolus en fonction des noms de paramètres régionaux fournis et avons vu un exemple en action.

Références

  • Les didacticiels Java™ - Isoler les données spécifiques aux paramètres régionaux
  • i18n-resource-bundle
  • Code source : i18n-en-java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn