Heim  >  Artikel  >  Java  >  Internationalisierung in Java

Internationalisierung in Java

PHPz
PHPzOriginal
2024-07-31 09:00:41551Durchsuche

Internationalisation in Java

Internationalisierung (oft als i18n abgekürzt) bezieht sich auf das Entwerfen und Vorbereiten von Software, die sich leicht an verschiedene Sprachen, Regionen und Kulturen anpassen lässt, ohne dass technische Änderungen am Code erforderlich sind. Darauf folgt normalerweise die Lokalisierung (oft als l10n abgekürzt), die die Anpassung der internationalisierten Software an ein bestimmtes Gebietsschema umfasst, einschließlich der Übersetzung des Textes, der Anpassung an lokale Konventionen und der Änderung anderer gebietsschemaspezifischer Elemente.

Ziel ist es, die Software flexibel genug zu machen, um mehrere Gebietsschemas zu unterstützen, indem die Kernlogik von gebietsschemaspezifischen Elementen wie Sprache und kulturellen Konventionen getrennt wird.

Ressourcenpaket

Das Lokalisieren einer Textnachricht in einem einfachen Java-Programm ist mit der von der Programmiersprache bereitgestellten ResourceBundle-Klasse etwas einfacher. Die ResourceBundle-Klasse erleichtert das Laden gebietsschemaspezifischer Schlüsselwertattribute, die in Eigenschaftendateien definiert sind. Diese Eigenschaftsdateien werden als Ressourcenpakete bezeichnet.

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);

Verwendung von i8n-resource-bundle

Eine weitere Methode zur Lokalisierung einer Textnachricht in einem Java-Programm ist die Verwendung von Bibliotheken von Drittanbietern. Eine dieser Bibliotheken ist i18n-resource-bundle. Diese Bibliothek ist eine Implementierung des zuvor besprochenen ResourceBundle.

Abhängigkeit

Fügen Sie die folgende Abhängigkeit in Ihre pom.xml ein, wenn Sie Maven verwenden

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

Wenn Sie Gradle bevorzugen, verwenden Sie stattdessen dieses;

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

Nachrichtenquelle

i8n-resource-bundle bietet eine MessageSource-Schnittstelle, die mehrere Methoden zum Auflösen von Nachrichten definiert. Es gibt zwei Implementierungen: ResourceBundleMessageSource und ReloadableResourceBundleMessageSource. Beide Implementierungen greifen auf die Ressourcenpakete über angegebene Basisnamen zu, ähnlich wie bei Java ResourceBundle. Die ResourceBundleMessageSource-Auflösungsnachrichten bilden Ressourcenpakete für verschiedene Gebietsschemas, indem sie sich für die Nachrichtenanalyse auf die ResourceBundle-Implementierung von Java in Kombination mit MessageFormat verlassen.

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

Im Gegensatz zu ResourceBundleMessageSource verwendet ReloadableResourceBundleMessageSource die Eigenschafteninstanzen von Java als benutzerdefinierte Datenstruktur für das Laden von Nachrichten mithilfe unterschiedlicher Strategien, die das Neuladen der Eigenschaftendateien basierend auf Zeitstempeländerungen und einer bestimmten Zeichenkodierung ermöglichen, ohne dass die Anwendung neu gestartet werden muss.

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);

Abschluss

In dieser kurzen Anleitung haben wir gelernt, die Internationalisierung (i18n) in Java-Anwendungen mithilfe des ResourceBundle und des i18n-resource-bundle zu implementieren. Wir haben gelernt, wie die Ressourcenpakete basierend auf den angegebenen Gebietsschemanamen aufgelöst werden, und haben ein Beispiel in Aktion gesehen.

Referenzen

  • Die Java™-Tutorials – Isolieren gebietsschemaspezifischer Daten
  • i18n-Ressourcenpaket
  • Quellcode: i18n-in-java

Das obige ist der detaillierte Inhalt vonInternationalisierung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn