Internationalisierung (i18n) in Java: Vollständiger Leitfaden
\n\nInternationalisierung (abgekürzt i18n – vom Wort internationalization, bei dem zwischen dem ersten Buchstaben 'i' und dem letzten 'n' 18 Buchstaben stehen) ist der Prozess der Softwareentwicklung, bei dem die Software so konzipiert wird, dass sie ohne Änderungen am Quellcode an verschiedene Sprachen und Regionen angepasst werden kann. Java bietet einen leistungsstarken und integrierten Satz von Werkzeugen zur Internationalisierung, der es Entwicklern ermöglicht, problemlos mehrsprachige Anwendungen zu erstellen.
\n\nIn diesem Artikel werden wir die wichtigsten Komponenten von i18n in Java im Detail behandeln: Locale, ResourceBundle, Eigenschaftendateien und MessageFormat. Sie lernen, wie Sie lokalisierte Ressourcen richtig strukturieren und Ausnahmen im Zusammenhang mit fehlenden Übersetzungen behandeln.
1. Hauptkomponenten von i18n in Java
\n\nDie Internationalisierung in Java basiert auf drei Schlüsselelementen:
\n\n- \n
- Locale – ein Objekt, das eine bestimmte geografische, politische oder kulturelle Region repräsentiert. Es enthält Informationen über Sprache, Land (optional) und Variante (optional). \n
- ResourceBundle – eine Klasse, die lokalisierte Ressourcen (Zeichenketten, Formate) aus Eigenschaftendateien (
.properties) oder anderen Quellen lädt. \n - Eigenschaftendateien – Textdateien mit der Erweiterung
.properties, dieSchlüssel=Wert-Paare speichern. Der Dateiname folgt dem Schema:BasisName_Sprache_LAND.properties. \n
Beispiel für die Dateistruktur für Russisch und Englisch:
\n\nMessages.properties // Standarddatei\nMessages_en.properties // Englisch (allgemein)\nMessages_en_US.properties // Englisch (USA)\nMessages_ru_RU.properties // Russisch (Russland)\n\n\n2. Erstellen von Eigenschaftendateien
\n\nErstellen wir eine Basisdatei Messages.properties (Standardwerte auf Englisch):
greeting=Hello\nfarewell=Goodbye\napp.name=My Application\n\n\nJetzt erstellen wir die russische Lokalisierung Messages_ru_RU.properties:
greeting=Здравствуйте\nfarewell=До свидания\napp.name=Моё приложение\n\n\nFür Englisch (USA) – Messages_en_US.properties:
greeting=Hello\nfarewell=Goodbye\napp.name=My Application\n\n\n3. Verwendung von Locale und ResourceBundle
\n\nZum Laden lokalisierter Zeichenketten wird der folgende Code verwendet:
\n\nimport java.util.Locale;\nimport java.util.ResourceBundle;\n\npublic class I18nExample {\n public static void main(String[] args) {\n // Locale festlegen (z.B. Russisch, Russland)\n Locale ruLocale = new Locale("ru", "RU");\n ResourceBundle bundle = ResourceBundle.getBundle("Messages", ruLocale);\n \n // Lokalisierte Zeichenketten abrufen\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\nWenn das Locale nicht gefunden wird, verwendet Java automatisch eine Suchkette:
\n- \n
- Zuerst wird nach einer Datei mit exakter Übereinstimmung gesucht (
Messages_ru_RU.properties). \n - Dann ohne Land (
Messages_ru.properties). \n - Als nächstes die Basisdatei (
Messages.properties). \n - Wenn nichts gefunden wird, wird die Ausnahme
MissingResourceExceptionausgelöst. \n
4. Nachrichtenformatierung mit MessageFormat
\n\nOft enthalten Zeichenketten variable Teile. Dafür wird MessageFormat verwendet. Beispiel mit dynamischen Daten:
Auch in der Bibliothek
Integration von Prometheus-Metriken in Java-Anwendungen: Bibliothek simpleclient
PDF-Generierung in Go: Überblick über Bibliotheken und Codebeispiele
CLI-Framework für C++: cppcli — Erstellung von Konsolenanwendungen