Wiki

Clone wiki

BibSonomy / development / modules / webapp / I18N

Internationalization is abbreviated by the numeronym i18n (where 18 stands for the number of letters between the i and the n in "internationalization") (see Wikipedia).

Installing Eclipse

First, you need to download at least a minimal configuration of the Eclipse IDE. You can start Eclipse simply by running the executable file in the Eclipse directory.

Installing the ResourceBundleEditor Eclipse Plugin

A very useful tool to internationalize BibSonomy is the ResourceBundleEditor (RBE) Eclipse plugin.

To install this plugin, you can download it directly from the Eclipse Marketplace. If you want to install it manually, you just have to unpack the downloaded archive and copy the content into the plugins folder in your eclipse directory. In detail: if you unpack the archive, you get a directory plugins which contains a directory named com.essiembre.eclipse.i18n.resourcebundle_xxx. Copy the directory com.essiembre.eclipse.i18n.resourcebundle_xxx into the plugin directory of Eclipse. You can find this directory in the place, where Eclipse has been installed. On Windows, this is typically a folder in C:\program files\.

For Eclipse Luna and onward please use the latest version of the RBE plugin on github ResourceBundleEditor

Configuring the ResourceBundleEditor

In the Eclipse menu under Window -> Preferences -> ... you can find the configuration dialog for the ResourceBundleEditor. Configure it exactly according to the following screenshot:

configuration of the ResourceBundleEditor plugin

Importing the Message Files into Eclipse

Using the the ResourceBundleEditor

Opening a Messages File

You can open the editor in Eclipse by selecting a `message.properties' file. After that, click on the right button of your mouse and choose Open with -> ResourceBundle Editor.

From now on everytime when you open this file, it will be opened by the RBE.

The ResourceBundle Editor consists of two areas. On the left you can browse over the entire group structure of the .properties file.

The group structure can be displayed as a tree or in a flat view.

Groups will be displayed bold, non-bold entries are values.

By selecting a value the corresponding information will be shown in the right area. For each language, a seperate horizontal window is displayed in this area and thus you have an overview of all translations of a value.

Overview on the ResourceBundleEditor

Adding a New Language

To add a new language, you need to create a new properties file with the appropriate abbreviation for the country's language. This can be done by the ResourceBundleEditor - just click on the New... tab at the bottom of the ResourceBundleEditor's view:

Adding a new language

Then, in the view which appears, select the language you want to add - please don't select a specific country (e.g., "en", not "en_GB", i.e., only "English", not "English (United Kingdom)").

Finding Missing Keys

The outline-window (commonly the right window beside the RBE) provides a filter that shows only untranslated values.

Showing only incomplete translations

Issues with I18N

Using the correct encoding for your messages.properties file

Excerpt from a mail explaining the issue:

Dank Dennis haben wir jetzt eine messages_ru.properties und versuchen gerade, diese in Biblicious einzubinden. Die Frage dabei ist: in welcher Kodierung sollen wir die Datei speichern? Ideal wäre UTF-8, aber dass das nicht gehen wird, habe ich schon vermutet, denn schon für messages_de.properties mussten wir auf Latin-1 (ISO-8859-1) zurückgreifen. Ich habe jetzt nochmal mittels des Debuggers herausgefunden, warum das so ist und möchte Euch das Ergebnis mitteilen.

Schaut Euch mal den Konstruktor der Klasse java.util.PropertyResourceBundle an, der einen InputStream bekommt. Dieser wird genutzt, um die Properties-Dateien einzulesen. Das JavaDoc dazu besagt:

"Creates a property resource bundle from an InputStream. The property file read with this constructor must be encoded in ISO-8859-1."

D.h., das Ding kann nur Dateien in ISO-8859-1 lesen. Das JavaDoc zur Klasse sagt uns dann, wie wir auch Zeichen ausserhalb dieses Zeichensatzes einlesen können:

"Constructing a PropertyResourceBundle instance from an InputStream requires that the input stream be encoded in ISO-8859-1. In that case, characters that cannot be represented in ISO-8859-1 encoding must be represented by Unicode Escapes, whereas the other constructor which takes a Reader does not have that limitation."

Sprich: wir müssen in der Konfiguration von unserem ResourceBundleEditor-Plugin das Häkchen bei

"Umwandeln Unicode-Werte nach \uXXXX"

wieder setzen.

Entsprechende Versionen der Properties-Dateien habe ich jetzt eingecheckt. Als nächstes werde ich mal schauen, wie sich das mit unserer JavaScript-Konvertierung verträgt.

Übrigens: bei dieser Gelegenheit habe ich mir nochmal das Message-Resolving von Spring angeschaut und herausgefunden, wie wir leicht weitere Properties-Dateien einbinden können. Dort ist auch schon eine nette Aufteilung drin - Fehlermeldungen in eine eigene Datei. Des weiteren könnten halt einzelne Module eigene Fehlermeldungen definieren.

everything in German / missing locale

TODO: [[Bibsonomy:Fehlermeldungen%26Lösungen#I18N_-_Internationalisierung.2C_Locales]]

Robert schreibt dazu am 06.06.2008:

Nach stundenlangem Debuggen bis hinunter nach java.util.* habe ich jetzt endlich den Grund gefunden, warum einige lokalisierte Ausgaben in JSPs bei mir stets Deutsch waren, obwohl ich die englische Sprache ausgewählt hatte.

Betroffen waren nicht die mittels <fmt:message ...> erzeugten Ausgaben, sondern nur <spring:message ...> und <form:errors ...> - beides Erweiterungen von Spring. Sie benutzen den normalen Java-Mechanismus, um ResourceBundles zu laden.

Wir haben ja zwei Dateien: messages.properties und messages_de.properties. Nun hatte ich ja "lang=en" ausgewählt und eine messages_en.properties haben wir nicht. In diesem Fall wählt Java ein "Fallback"-Resourcebundle aus. Man würde nun erwarten, dass das messages.properties ist ... ist es aber in meinem Fall nicht gewesen, sondern messages_de.properties. Und warum? Weil meine Betriebssystem-Locale auf de_DE.UTF-8 eingestellt ist. :-( Nachdem ich sie auf en_GB umgestellt hatte, hatte ich endlich meine englischen Fehlermeldungen. Und die deutschen gehen natürlich auch.

Unter Linux könnt ihr mittels "locale" die Locale-Einstellung herausfinden. Wenn ihr sie vor dem Start von Eclipse mittels "export LC_ALL=en_GB" ändert, bekommt ihr im Tomcat später englische Fehlermeldungen.

Es kann nun noch passieren, dass das Betriebssystem die entsprechende Locale (en_GB) nicht hat und man daher beim Aufruf von "locale" Fehlermeldungen bekommt und in BibSonomy einige Meldungen auf Deutsch sind. Unter Ubuntu muss man dazu die fehlende Locale zur Datei /var/lib/locales/supported.d/local hinzufügen und die locales mittels des Aufrufs dpkg-reconfigure locales neu generieren.

Updated