Heim >Java >javaLernprogramm >Internationalisierung 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.
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);
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.
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'
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);
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);
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.
Das obige ist der detaillierte Inhalt vonInternationalisierung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!