Internationalization in Java

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Registriere dich um viele Vorteile zu genießen! Weniger Werbung, bessere Kommunikation und vieles mehr!

  • Anwendung von Internationalization in Java mithilfe der Klasse java.util.ResourceBundle
    Vorab sollte gesagt werden, dass für dieses Tutorial keine wirklich fortgeschrittenen Kenntnisse in Java beherrscht werden müssen, da die meisten Methoden vorgeschrieben sind und somit die Anwendung sehr einfach ist.
    1. Standarddatei anlegen
      Bei dieser Datei handelt es sich um die Werte, die geladen werden, wenn für die gewünschte Sprache keine Übersetzung zur Verfügung steht. Den Namen der Datei könnt ihr frei wählen. Ich verwende in diesem Fall den namen "MessageBundle".
      maven: Ihr erstellt ihr euch einfach eine Datei namens "MessageBundle.properties" in dem resources Ordner.
      ohne maven: In diesem Fall erstellt ihr euch eine Datei namens "MessageBundle.properties" in dem Ordner, in welchem sich die Klasse befindet, in der ihr Schritt 3 durchführt. Achtet darauf, dass euer Compiler die Datei ebenfalls in eure Jar einbezieht.
    2. Datei mit Standardwerten füllen
      In meinem Fall werde ich beispielhaft zwei Werte in meine Datei schreiben.

      Quellcode

      1. welcome-message=Welcome back!
      2. loading-message=Loading epic game...


      Achtet dabei auf die Syntax und dass Leerzeichen am Ende eines Wertes nicht gelesen werden.
    3. Datei in Laufzeitumgebung kopieren
      Solltet ihr die Apache Commons Library mit einbezogen haben, könnt ihr die Default-Datei ganz einfach mit folgendem Code kopieren:

      Java-Quellcode

      1. FileUtils.copyInputStreamToFile(this.getClass().getResourceAsStream("MessageBundle.properties"), new File("MessageBundle.properties"));
      Ohne die Library geht das ganze auch einfach, indem ihr folgenden Code verwendet:

      Java-Quellcode

      1. FileOutputStream outputStream = new FileOutputStream(new File("MessageBundle.proprties"));
      2. for(int read = inputStream.read(); read != -1; ) {
      3. outputStream.write(read);
      4. }
      5. inputStream.close();
      6. outputStream.flush();
      7. outputStream.close();
    4. ResourceBundle laden
      In diesem Schritt findet die Internationalization ihre wirkliche Anwendung. Der Code ist mit zahlreichen Kommentaren versehen, sodass er sich fast selbst erklärt.

      Java-Quellcode

      1. Locale locale = new Locale("fr", "FR"); // Ich habe in diesem Fall die Sprache und das Land fest gesetzt.
      2. // In einem richtigen Anwendungsfall sollte der Benutzer diese
      3. // beiden Optionen selber definieren koennen
      4. ResourceBundle messageBundle = ResourceBundle.getBundle("MessagesBundle", locale); // Hier wird das ResourceBundle anhand der mit uebergebenen Locale
      5. // geladen. Sollte die Sprache nicht gefunden werden, werden die
      6. // default Werte geladen. Dabei sollte folgende Dateisyntax eingehalten
      7. // werden Name_sprache_LAND.properties
    5. Werte laden und verwenden
      Ich habe mir für dieses Beispiel noch eine Datei mit dem Namen MessageBundle_fr_FR.properties angelegt. Ich werde zwei Beispiele vorführen. In der französischen Properties-Datei sind folgende Werte vorhanden:

      Quellcode

      1. welcome-message=Bonjour!
      2. loading-message=Chargement jeu épique...

      Java-Quellcode

      1. // Beispiel 1
      2. // MessageBundle wurde mit der Locale fr_FR geladen
      3. System.out.println(messageBundle.getString("welcome-message")); // Ausgabe: Bonjour!
      4. System.out.println(messageBundle.getString("loading-message")); // Ausgabe: Chargement jeu épique...
      5. // Beispiel 2
      6. // MessageBungle laedt default, da de_DE nicht gefunden werden konnte
      7. System.out.println(messageBundle.getString("welcome-message")); // Ausgabe: Welcome back!
      8. System.out.println(messageBundle.getString("loading-message")); // Ausgabe: Loading epic game...
    Bitte beachtet, dass ihr in jeder Datei natürlich die gleichen Bezeichnungen des keys verwenden müsst.

    Ich habe diese Anleitung frei und ohne ausgiebige Tests geschrieben, daher wäre es nett, wenn ihr mich auf Fehler, die ihr findet, aufmerksam machen könntet.

    Ich hoffe, dass ihr einen Anwendungszweck in eurer Software finden könnt. Vielen Dank fürs Lesen :)

    Quelle: docs.oracle.com/javase/tutorial/i18n/intro/index.html

    248 mal gelesen

Kommentare 4

  • Letsplaybar -

    im 2. Quellcode fehlt am ende eine Klammer. also hier: FileUtils.copyInputStreamToFile(this.getClass().getResourceAsStream("MessageBundle.properties"), new File("MessageBundle.properties"));

  • ScorpiaWeb -

    Das ist cool! Würd's ja liken, geht aber nicht ;)

  • LucaDev -

    de_DE gibt Welcome back zurück?