--- /dev/null
+username=username
+password=password
+logout=log out
+login=sign in
+register=register
--- /dev/null
+username=identifiant
+password=mot de passe
+logout=déconnexion
+login=connexion
+register=créer un compte
+
+changePassword=changement de mot de passe
+currentPassword=mot de passe actuel
+newPassword=nouveau mot de passe
+repeatNewPassword=répéter le nouveau mot de passe
+passwordChanged=mot de passe changé
--- /dev/null
+username=\u0438\u043C\u044F
+password=\u043F\u0430\u0440\u043E\u043B\u044C
+logout=\u0432\u044B\u0439\u0442\u0438
+login=\u0432\u043E\u0439\u0442\u0438
+register=créer un compte
+
+changePassword=\u0438\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u0430\u0440\u043E\u043B\u044C
+currentPassword=mot de passe actuel
+newPassword=nouveau mot de passe
+repeatNewPassword=répéter le nouveau mot de passe
+passwordChanged=mot de passe changé
package org.argeo.cms;
-import org.argeo.cms.i18n.DefaultsResourceBundle;
-import org.argeo.cms.i18n.Msg;
+import java.util.Locale;
-/** Standard CMS messages. */
-public class CmsMsg extends DefaultsResourceBundle {
- public final static Msg username = new Msg("username");
- public final static Msg password = new Msg("password");
- public final static Msg logout = new Msg("log out");
- public final static Msg login = new Msg("sign in");
- public final static Msg register = new Msg("register");
+import org.argeo.cms.i18n.LocaleUtils;
+import org.argeo.cms.i18n.Localized;
- public final static Msg changePassword = new Msg("change password");
- public final static Msg currentPassword = new Msg("current password");
- public final static Msg newPassword = new Msg("new password");
- public final static Msg repeatNewPassword = new Msg("repeat new password");
- public final static Msg passwordChanged = new Msg("password changed");
+public enum CmsMsg implements Localized {
+ username, password, login, logout, register, changePassword, currentPassword, newPassword, repeatNewPassword, passwordChanged;
- static {
- Msg.init(CmsMsg.class);
+ public Object local(Locale locale) {
+ return LocaleUtils.local(this, locale);
+ }
+
+ public String lead() {
+ return LocaleUtils.lead(this);
+ }
+
+ public String lead(Locale locale) {
+ return LocaleUtils.lead(local(locale).toString(), locale);
}
}
+++ /dev/null
-username=identifiant
-password=mot de passe
-logout=déconnexion
-login=connexion
-register=créer un compte
-
-changePassword=changement de mot de passe
-currentPassword=mot de passe actuel
-newPassword=nouveau mot de passe
-repeatNewPassword=répéter le nouveau mot de passe
-passwordChanged=mot de passe changé
+++ /dev/null
-username=\u0438\u043C\u044F
-password=\u043F\u0430\u0440\u043E\u043B\u044C
-logout=\u0432\u044B\u0439\u0442\u0438
-login=\u0432\u043E\u0439\u0442\u0438
-register=créer un compte
-
-changePassword=\u0438\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u0430\u0440\u043E\u043B\u044C
-currentPassword=mot de passe actuel
-newPassword=nouveau mot de passe
-repeatNewPassword=répéter le nouveau mot de passe
-passwordChanged=mot de passe changé
for (Field field : fieldArray) {
if (Modifier.isStatic(field.getModifiers())
- && field.getType().isAssignableFrom(Msg.class)) {
+ && field.getType().isAssignableFrom(LocaleUtils.class)) {
res.add(field.getName());
}
}
--- /dev/null
+package org.argeo.cms.i18n;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+import org.argeo.eclipse.ui.specific.UiContext;
+
+/** Utilities simplifying the development of localization enums. */
+public class LocaleUtils {
+ public static Object local(Enum<?> en) {
+ return local(en, getCurrentLocale(), "/OSGI-INF/l10n/bundle");
+ }
+
+ public static Object local(Enum<?> en, Locale locale) {
+ return local(en, locale, "/OSGI-INF/l10n/bundle");
+ }
+
+ public static Object local(Enum<?> en, Locale locale, String resource) {
+ return local(en, locale, resource, en.getClass().getClassLoader());
+ }
+
+ public static Object local(Enum<?> en, Locale locale, String resource,
+ ClassLoader classLoader) {
+ ResourceBundle rb = ResourceBundle.getBundle(resource, locale,
+ classLoader);
+ return rb.getString(en.name());
+ }
+
+ public static String lead(String raw, Locale locale) {
+ return raw.substring(0, 1).toUpperCase(locale) + raw.substring(1);
+ }
+
+ public static String lead(Localized localized) {
+ return lead(localized, getCurrentLocale());
+ }
+
+ public static String lead(Localized localized, Locale locale) {
+ return lead(localized.local(locale).toString(), locale);
+ }
+
+ static Locale getCurrentLocale() {
+ return UiContext.getLocale();
+ }
+ // private String id;
+ // private ClassLoader classLoader;
+ // private final Object defaultLocal;
+ //
+ // public Msg() {
+ // defaultLocal = null;
+ // }
+ //
+ // public Msg(Object defaultMessage) {
+ // this.defaultLocal = defaultMessage;
+ // }
+ //
+ // public String getId() {
+ // return id;
+ // }
+ //
+ // public void setId(String id) {
+ // this.id = id;
+ // }
+ //
+ // public ClassLoader getClassLoader() {
+ // return classLoader;
+ // }
+ //
+ // public void setClassLoader(ClassLoader classLoader) {
+ // this.classLoader = classLoader;
+ // }
+ //
+ // public Object getDefault() {
+ // return defaultLocal;
+ // }
+ //
+ // public String toString() {
+ // return local().toString();
+ // }
+ //
+ // /** When used as the first word of a sentence. */
+ // public String lead() {
+ // return lead(UiContext.getLocale());
+ // }
+ //
+ // public String lead(Locale locale) {
+ // return lead(this, locale);
+ // }
+
+ // private static String lead(Msg msg, Locale locale) {
+ // String raw = msg.local(locale).toString();
+ // return lead(raw, locale);
+ // }
+
+ // public Object local() {
+ // Object local = local(this);
+ // if (local == null)
+ // local = getDefault();
+ // if (local == null)
+ // throw new CmsException("No translation found for " + id);
+ // return local;
+ // }
+ //
+ // public Object local(Locale locale) {
+ // Object local = local(this, locale);
+ // if (local == null)
+ // local = getDefault();
+ // if (local == null)
+ // throw new CmsException("No translation found for " + id);
+ // return local;
+ // }
+ //
+ // private static Object local(Msg msg) {
+ // Locale locale = UiContext.getLocale();
+ // return local(msg, locale);
+ // }
+ //
+ // public static Object local(Msg msg, Locale locale) {
+ // String key = msg.getId();
+ // int lastDot = key.lastIndexOf('.');
+ // String className = key.substring(0, lastDot);
+ // String fieldName = key.substring(lastDot + 1);
+ // ResourceBundle rb = ResourceBundle.getBundle("/OSGI-INF/l10n/bundle",
+ // locale, msg.getClassLoader());
+ // // ResourceBundle rb = ResourceBundle.getBundle(className, locale,
+ // // msg.getClassLoader());
+ // return rb.getString(fieldName);
+ // }
+
+ // public static void init(Class<?> clss) {
+ // final Field[] fieldArray = clss.getDeclaredFields();
+ // ClassLoader loader = clss.getClassLoader();
+ //
+ // for (Field field : fieldArray) {
+ // if (Modifier.isStatic(field.getModifiers())
+ // && field.getType().isAssignableFrom(Msg.class)) {
+ // try {
+ // Object obj = field.get(null);
+ // String id = clss.getCanonicalName() + "." + field.getName();
+ // obj.getClass().getMethod("setId", String.class)
+ // .invoke(obj, id);
+ // obj.getClass()
+ // .getMethod("setClassLoader", ClassLoader.class)
+ // .invoke(obj, loader);
+ // } catch (Exception e) {
+ // throw new CmsException("Cannot prepare field " + field);
+ // }
+ // }
+ // }
+ // }
+}
--- /dev/null
+package org.argeo.cms.i18n;
+
+import java.util.Locale;
+
+/** Localized object. */
+public interface Localized {
+ public Object local(Locale locale);
+}
+++ /dev/null
-package org.argeo.cms.i18n;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-import org.argeo.cms.CmsException;
-import org.argeo.eclipse.ui.specific.UiContext;
-
-/** A single message to be internationalised. */
-public class Msg {
- private String id;
- private ClassLoader classLoader;
- private final Object defaultLocal;
-
- public Msg() {
- defaultLocal = null;
- }
-
- public Msg(Object defaultMessage) {
- this.defaultLocal = defaultMessage;
- }
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public ClassLoader getClassLoader() {
- return classLoader;
- }
-
- public void setClassLoader(ClassLoader classLoader) {
- this.classLoader = classLoader;
- }
-
- public Object getDefault() {
- return defaultLocal;
- }
-
- public String toString() {
- return local().toString();
- }
-
- /** When used as the first word of a sentence. */
- public String lead() {
- return lead(UiContext.getLocale());
- }
-
- public String lead(Locale locale) {
- return lead(this, locale);
- }
-
- private static String lead(Msg msg, Locale locale) {
- String raw = msg.local(locale).toString();
- return lead(raw, locale);
- }
-
- public static String lead(String raw, Locale locale) {
- return raw.substring(0, 1).toUpperCase(locale) + raw.substring(1);
- }
-
- public Object local() {
- Object local = local(this);
- if (local == null)
- local = getDefault();
- if (local == null)
- throw new CmsException("No translation found for " + id);
- return local;
- }
-
- public Object local(Locale locale) {
- Object local = local(this, locale);
- if (local == null)
- local = getDefault();
- if (local == null)
- throw new CmsException("No translation found for " + id);
- return local;
- }
-
- private static Object local(Msg msg) {
- Locale locale = UiContext.getLocale();
- return local(msg, locale);
- }
-
- private static Object local(Msg msg, Locale locale) {
- String key = msg.getId();
- int lastDot = key.lastIndexOf('.');
- String className = key.substring(0, lastDot);
- String fieldName = key.substring(lastDot + 1);
- ResourceBundle rb = ResourceBundle.getBundle(className, locale,
- msg.getClassLoader());
- return rb.getString(fieldName);
- }
-
- public static void init(Class<?> clss) {
- final Field[] fieldArray = clss.getDeclaredFields();
- ClassLoader loader = clss.getClassLoader();
-
- for (Field field : fieldArray) {
- if (Modifier.isStatic(field.getModifiers())
- && field.getType().isAssignableFrom(Msg.class)) {
- try {
- Object obj = field.get(null);
- String id = clss.getCanonicalName() + "." + field.getName();
- obj.getClass().getMethod("setId", String.class)
- .invoke(obj, id);
- obj.getClass()
- .getMethod("setClassLoader", ClassLoader.class)
- .invoke(obj, loader);
- } catch (Exception e) {
- throw new CmsException("Cannot prepare field " + field);
- }
- }
- }
- }
-}
import org.argeo.cms.CmsView;
import org.argeo.cms.auth.CurrentUser;
import org.argeo.cms.auth.HttpRequestCallback;
-import org.argeo.cms.i18n.Msg;
+import org.argeo.cms.i18n.LocaleUtils;
import org.argeo.cms.util.CmsUtils;
import org.argeo.util.LocaleChoice;
import org.eclipse.rap.rwt.RWT;
}
protected Composite userUi(Composite parent) {
+ Locale locale = localeChoice == null ? this.defaultLocale
+ : localeChoice.getSelectedLocale();
credentialsBlock = new Composite(parent, SWT.NONE);
credentialsBlock.setLayout(new GridLayout());
credentialsBlock.setLayoutData(CmsUtils.fillAll());
Label l = new Label(credentialsBlock, SWT.NONE);
l.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU_ITEM);
- l.setText(CmsMsg.logout.lead());
+ l.setText(CmsMsg.logout.lead(locale));
GridData lData = CmsUtils.fillWidth();
lData.widthHint = 120;
l.setLayoutData(lData);
}
protected void updateLocale(Locale selectedLocale) {
- // usernameT.setMessage(username.lead(selectedLocale));
- // passwordT.setMessage(password.lead(selectedLocale));
+ // save already entered values
+ String usernameStr = usernameT.getText();
+ char[] pwd = passwordT.getTextChars();
+
for (Control child : parent.getChildren())
child.dispose();
createContents(parent);
parent.getParent().layout();
else
parent.layout();
+ usernameT.setText(usernameStr);
+ passwordT.setTextChars(pwd);
}
protected Composite createLocalesBlock(final Composite parent) {
Locale locale = locales.get(i);
Button button = new Button(c, SWT.RADIO);
button.setData(i);
- button.setText(Msg.lead(locale.getDisplayName(locale), locale)
- + " (" + locale + ")");
+ button.setText(LocaleUtils.lead(locale.getDisplayName(locale),
+ locale) + " (" + locale + ")");
// button.addListener(SWT.Selection, listener);
button.addSelectionListener(selectionListener);
if (i == localeChoice.getSelectedIndex())
-changePassword=\u0438\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u0430\u0440\u043E\u043B\u044C
+changePassword=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u0430\u0440\u043E\u043B\u044C