Difference between revisions of "Internationalization"
From OpenKM Documentation
Line 9: | Line 9: | ||
public class Lang_en_GB { | 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"); | |
− | + | } | |
} | } | ||
</source> | </source> | ||
Line 25: | Line 25: | ||
public class Lang_es_ES { | 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"); | |
− | + | } | |
− | |||
} | } | ||
</source> | </source> |
Revision as of 13:43, 2 December 2010
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"));
}
}
}