Difference between revisions of "Internationalization"
From OpenKM Documentation
Line 1: | Line 1: | ||
It's good idea centralizing Internationalization in a single class package for all OpenKM extensions. | 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''' | 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''' | ||
− | |||
<source lang="java"> | <source lang="java"> | ||
Line 11: | 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> | ||
− | |||
− | |||
<source lang="java"> | <source lang="java"> | ||
Line 31: | 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> | ||
− | |||
And has a main '''Lang.java''' class to get '''language mapping translations''' | And has a main '''Lang.java''' class to get '''language mapping translations''' | ||
Line 55: | Line 47: | ||
public static final String LANG_es_ES = "es-ES"; | public static final String LANG_es_ES = "es-ES"; | ||
public static final String LANG_en_GB = "en-GB"; | public static final String LANG_en_GB = "en-GB"; | ||
− | + | ||
public static HashMap<String, String> getLang(String lang) { | public static HashMap<String, String> getLang(String lang) { | ||
HashMap<String, String> hLang = new HashMap<String, String>(); | HashMap<String, String> hLang = new HashMap<String, String>(); | ||
Line 71: | Line 63: | ||
} | } | ||
</source> | </source> | ||
− | |||
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"'''. | 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: | Here there's some example how you could use it in your extensions: | ||
<source lang="java"> | <source lang="java"> | ||
− | + | String lang = GeneralComunicator.getLang(); | |
− | + | String translation = Lang.getLang(lang).get("download.button.tittle") | |
</source> | </source> | ||
− | |||
Remember any extension internationalized must implements LanguageHandlerExtension, for example: | Remember any extension internationalized must implements LanguageHandlerExtension, for example: | ||
Line 88: | Line 77: | ||
<source lang="java"> | <source lang="java"> | ||
private class ToolBarButton extends ToolBarButtonExtension implements LanguageHandlerExtension { | 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")); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
+ | } | ||
} | } | ||
</source> | </source> | ||
− | + | [[Category: Extension Guide]] | |
− | [[Category: | ||
[[Category:OKM Network]] | [[Category:OKM Network]] |
Revision as of 13:42, 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"));
}
}
}