Internationalisierung ist etwas, das ich bisher in meinen Applikationen wenig genutzt habe. Was vor allem daran liegt, dass ich nicht wusste wie es geht, und es auch gerne so einfach wie möglich nutzen will.

Ich habe mich nun also etwas informiert, und muss sagen, dass Internationalisierung gar nicht so schwer ist. Deshalb habe ich mir auch gleich eine Utility Klasse geschrieben, die ich ab sofort in meinen Projekten nutzen werde. Diese Utility Klasse könnt ihr natürlich auch gerne nutzen.

 

Zunächst einmal die Utility Klasse selbst:

 

Die Utility Klasse nutzt das ENUM Singleton Pattern, um dem Entwickler die Möglichkeit zu geben das Objekt zu nutzen ohne eine Instanz erzeugen zu müssen.

Die  setup(String language, String country, String messages)  Methode muss auf jeden Fall einmal aufgerufen werden. Am besten beim Starten der Applikation. Falls zur Laufzeit die Sprache oder die Messages geändert werden müssen gibt es die Methoden  setLocale(String language, String country)  und  setMessages(String messages) .

 

Folgendes Beispiel zeigt die Nutzung der Klasse:

 

Wie man sieht, müssen Language und Country im üblichen Ländercode Format übergeben werden. de_DE für Deutschland, en_US für US Englisch etc.

Für die Dateien mit den länderspezifischen Übersetzungen habe ich in meiner src Paketstruktur ein Paket für die Dateien angelegt. Sie befinden sich in eu.derloki.i18n  und haben folgende Namen:

MessagesBundle.properties  – Welches die default Sprache darstellt. Also der Fallback, falls der Ländercode ungültig ist, oder eine Datei nicht existiert.

MessagesBundle_de_DE.properties  – Für die deutsche Übersetzungen. Hier erkennt man also die Regel, nach der die Dateien benannt werden müssen.

 

MessagesBundle_de_DE.properties:

MessagesBundle.properties:

 

Doch was passiert nun, wenn die setup(String language, String country, String messages)  Methode nicht aufgerufen wird, oder wenn, wie im Beispiel, ein String abgefragt wird, der nicht in den Dateien definiert ist?

In diesem Fall wird der eingegebene String mit einem ? als Präfix zurückgegeben. Dadurch erkennt man an der Ausgabe ziemlich schnell, welche Werte man noch nicht in den properties-Dateien eingepflegt hat.

Ausgabe:

 

Ich hoffe, diese Utility Klasse kann dem ein oder anderen helfen seine Applikationen von nun an mehrsprachig zu entwickeln.

– Loki

Internationalization in Java
Tagged on:     

Leave a Reply

Your email address will not be published. Required fields are marked *