Internationalization
The idea is add in database some records like
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('extension', 'new_extension.button.add', 'Add', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('extension', 'new_extension.button.add', 'Añadir', 'es-ES');
And then call in source code with
GeneralComunicator.i18nExtension("new_extension.button.add");
or you can use some of OpenKM frontend translations with
GeneralComunicator.i18n("button.close");
OpenKM 4.x and older
It's good idea centralizing Internationalization in a single class package for all OpenKM extensions.
For example if you want to make internationalization for english and spanish you migh create two classes Lang_en_GB.java and Lang_es_ES.java
package com.openkm.extension.frontend.client.lang;
import java.util.HashMap;
public class Lang_en_GB {
public final static HashMap<String, String> lang;
static {
lang = new HashMap<String, String>();
// Download button
lang.put("download.button.tittle", "Download document");
}
}
package com.openkm.extension.frontend.client.lang;
import java.util.HashMap;
public class Lang_es_ES {
public final static HashMap<String, String> lang;
static {
lang = new HashMap<String, String>();
// Download button
lang.put("download.button.tittle", "Descargar documento");
}
}
And has a main Lang.java class to get language mapping translations
package com.openkm.extension.frontend.client.lang;
import java.util.HashMap;
public class Lang {
// Languages
public static final String LANG_es_ES = "es-ES";
public static final String LANG_en_GB = "en-GB";
public static HashMap<String, String> getLang(String lang) {
HashMap<String, String> hLang = new HashMap<String, String>();
if (LANG_es_ES.equalsIgnoreCase(lang) || LANG_es_ES.substring(0, 2).equalsIgnoreCase(lang.substring(0, 2))) {
hLang = Lang_es_ES.lang;
} else if (LANG_en_GB.equalsIgnoreCase(lang) || LANG_en_GB.substring(0, 2).equalsIgnoreCase(lang.substring(0, 2))) {
hLang = Lang_en_GB.lang;
} else {
hLang = Lang_en_GB.lang;
}
return hLang;
}
}
As you can see in Lang.java the variables LANG_es_ES and LANG_en_GB refers to "es-ES" and "en-GB". When in your extensions makes a call to GeneralComunicator.getLang() to get language it returns a String with that format "language-Country".
Here there's some example how you could use it in your extensions:
String lang = GeneralComunicator.getLang();
String translation = Lang.getLang(lang).get("download.button.tittle")
Remember any extension internationalized must implements LanguageHandlerExtension, for example:
private class ToolBarButton extends ToolBarButtonExtension implements LanguageHandlerExtension {
public ToolBarButton(Image image, String title, ClickHandler handler) {
super(image, title, handler);
}
@Override
public void checkPermissions(GWTFolder folder, GWTFolder folderParent, int originPanel) {
// TODO
}
@Override
public void checkPermissions(GWTDocument doc, GWTFolder folder) {
// TODO
}
@Override
public void checkPermissions(GWTMail mail, GWTFolder folder) {
// TODO
}
@Override
public void enable(boolean enable) {
// TODO
}
@Override
public boolean isEnabled() {
return true;
}
@Override
public void onChange(LanguageEventConstant event) {
if (event.equals(HasLanguageEvent.LANGUAGE_CHANGED)) {
String lang = GeneralComunicator.getLang();
setTitle(Lang.getLang(lang).get("download.button.tittle"));
}
}
}