Hop internationalisation
Using Weblate
Use Weblate as a Translation Tool
Weblate official website: https://weblate.org
Weblate documentation: https://docs.weblate.org
Weblate source code: https://github.com/WeblateOrg/weblate
Apache Hop project translation address: https://translate.project-hop.org
You can go to the Apache Hop project translation page and participate in the translation work of the project. Thank you for your participation.
Translating changes in the source code
The message bundles that contains the translations for the various parts of Hop are part of the source code. If you want to start any i18n efforts we recommend that you set up your development environment first as described here:
How is it configured?
In the Hop configuration file
there is an entry called hop-config.json
which points to the locale string that you want to use. Such a locale string is always in the format: language code, underscore and country. For example, the default is en_US for English in the US.LocaleDefault
You can change the locale you want to use in the configuration file or in the Hop GUI under the Tools / options menu.
Translating strings
In Java code
Suppose we’re working on a class in file
What we want to do is have an easy way to get our hands on a translated String. The easiest way to do this is with the standard BaseMessages class. For example, you can see the following pop up all over the place in the Apache Hop source code:src/main/java/org/apache/hop/p1/Foo.java
org.apache.hop.i18n.BaseMessages.getString(PKG, "Foo.MyMessage");
If references a PKG variable typically defined at the top of the class like this:
private static final Class<?> PKG = Foo.class;
By doing this we know the location of the message bundles that will be used for translations. In this case the message bundles will be looked for in
src/main/resources/org/apache/hop/p1/messages/
For the default locale
it will point to a file called messages_en_US.properties in that folder:en_US
src/main/resources/org/apache/hop/p1/messages/messages_en_US.properties
In that file we can place an entry:
Foo.MyMessage = My own personal message
In annotations
Many plugin and GUI annotations support i18n as well. Unfortunately it is not possible to use the method explained above to resolve keys into strings. Because of this we use the following format:
i18n:package:key
For example, the main File menu in the Hop GUI is defined with an annotation:
@GuiMenuElement(
root = ID_MAIN_MENU,
id = ID_MAIN_MENU_FILE,
label = "i18n::HopGui.Menu.File",
parentId = ID_MAIN_MENU)
With the
prefix the Hop GUI registry knows that it can translate this using the given package and key. If there is no package defined it simply means: use the package from the current class. In our example it is i18n:
which means that we can find the message bundles for this class in org.apache.hop.ui.hopgui
and for locale ui/src/main/resources/org/apache/hop/ui/hopgui/messages/
in :en_US
ui/src/main/resources/org/apache/hop/ui/hopgui/messages/messages_en_US.properties
In there we can find the English translation:
...
HopGui.Menu.File=&File
....