Java-Internationalisierung: Mehrsprachige Anwendungen erstellen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum Ihre Java-Anwendung endlich menschlich sprechen sollte?

\n\n

Haben Sie sich jemals gefragt, warum Apps, die wir täglich nutzen – von Spotify bis Notion – sofort „verstehen“, in welcher Sprache sie mit Ihnen sprechen sollen? Sie lesen keine Gedanken und raten nicht anhand der IP-Adresse. Sie nutzen Internationalisierung (i18n).

\n\n

Für Java-Entwickler ist die Fähigkeit, Anwendungen mehrsprachig zu machen, nicht nur ein „Nice-to-have“, sondern eine grundlegende Fähigkeit, wenn Sie den globalen Markt anvisieren. Stellen Sie sich vor: Sie haben einen großartigen Task-Manager-Dienst geschrieben. In Deutschland läuft er super. Aber sobald Sie ihn in Frankreich oder Japan verkaufen wollen, sehen die Nutzer den Button „Aufgabe erstellen“ auf Deutsch. Und schließen den Tab. Traurig, oder?

\n\n

In diesem Artikel sprechen wir nicht nur über Theorie. Wir nehmen eine Java-Anwendung (ganz gewöhnlich, Konsolen- oder Web-App) und fügen Schritt für Schritt Unterstützung für Deutsch, Englisch und Französisch hinzu. Sie werden sehen: Java-Internationalisierung ist nicht kompliziert, sondern elegant. Los geht's!

\n\n

Was ist Internationalisierung und Lokalisierung? Nicht verwechseln!

\n\n

Diese Begriffe werden oft vermischt. Klären wir das.

\n\n
    \n
  • Internationalisierung (i18n) – der Prozess, eine Anwendung so zu entwerfen, dass sie an verschiedene Sprachen und Regionen angepasst werden kann, ohne den Code zu ändern. Sie legen die „Haken“ für die Übersetzung.
  • \n
  • Lokalisierung (l10n) – das Befüllen dieser „Haken“ mit konkreten Übersetzungen, Datumsformaten, Währungen und Sortierregeln für ein bestimmtes Land.
  • \n
\n\n

In Java sind die Klassen aus dem Paket java.util für die Internationalisierung zuständig: Locale und ResourceBundle. Merken Sie sich diese – sie sind Ihre besten Freunde.

\n\n

Schritt 1: Locale kennenlernen – das Herz der Internationalisierung

\n\n

Die Klasse Locale repräsentiert eine bestimmte Region (Sprache + Land). Zum Beispiel:

\n\n
    \n
  • Locale.US – Englisch (USA)
  • \n
  • Locale.GERMANY – Deutsch (Deutschland)
  • \n
  • new Locale("fr", "FR") – Französisch (Frankreich)
  • \n
\n\n

Locale wird verwendet, um die richtige Übersetzung von Texten sowie die Formatierung von Zahlen, Daten und Währungen auszuwählen. Ohne sie ist Internationalisierung unmöglich.

\n\n

Wie erhalte ich die aktuelle Locale?

\n\n
import java.util.Locale;\n\npublic class Main {\n    public static void main(String[] args) {\n        // Standard-Locale (normalerweise die System-Locale)\n        Locale defaultLocale = Locale.getDefault();\n        System.out.println("Aktuelle Locale: " + defaultLocale);\n\n        // Verfügbare Locales in der JVM\n        Locale[] available = Locale.getAvailableLocales();\n        System.out.println("Insgesamt verfügbar: " + available.length);\n    }\n}
\n\n

Die Ausgabe könnte z. B. sein: Aktuelle Locale: de_DE. Aber wir verlassen uns nicht auf die System-Locale – in einer Web-App wird sie normalerweise vom Browser des Benutzers übermittelt.

\n\n

Schritt 2: ResourceBundle – Ihr Übersetzer

\n\n

Jetzt kommt der spannende Teil: Wie speichert man Übersetzungen? In Java werden dafür Properties-Dateien (.properties) verwendet. Jede Datei enthält Schlüssel-Wert-Paare.

\n\n

Übersetzungsdateien erstellen

\n\n

Erstellen Sie im Verzeichnis src/main/resources (oder einfach im Quellcode-Ordner) drei Dateien:

\n\n

1. Messages.properties (Standardsprache – Englisch)

\n
greeting=Hello, {0}!\nfarewell=Goodbye!\napp.title=Task Manager
\n\n

2. Messages_de_DE.properties (Deutsch)

\n
greeting=Hallo, {0}!\nfarewell=Auf Wiedersehen!\napp.title=Aufgabenverwaltung
\n\n

3. Messages_fr_FR.properties (Französisch)

\n
greiting=Bonjour, {0}!\nfarewell=Au revoir!\napp.title=Gestionnaire de tâches
\n\n

Achten Sie auf die Suffixe: _de_DE, _fr_FR. Java sucht die Datei nach dem Muster: Basisname

Blogs

Buchempfehlungen