X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fi18n%2FLocaleUtils.java;h=700e731058037a26a2da15c998910b315523332c;hb=35507e18257f2e9f59842ba5120fcd3f19c4cf4d;hp=e422e21fea8212608520fd7d935d4288522d973a;hpb=5146af93007c599cf9edb35d8b173753bc45a52f;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/i18n/LocaleUtils.java b/org.argeo.cms/src/org/argeo/cms/i18n/LocaleUtils.java index e422e21fe..700e73105 100644 --- a/org.argeo.cms/src/org/argeo/cms/i18n/LocaleUtils.java +++ b/org.argeo.cms/src/org/argeo/cms/i18n/LocaleUtils.java @@ -1,10 +1,10 @@ package org.argeo.cms.i18n; +import java.util.ArrayList; +import java.util.List; 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) { @@ -19,10 +19,8 @@ public class LocaleUtils { 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); + public static Object local(Enum en, Locale locale, String resource, ClassLoader classLoader) { + ResourceBundle rb = ResourceBundle.getBundle(resource, locale, classLoader); return rb.getString(en.name()); } @@ -39,112 +37,31 @@ public class LocaleUtils { } static Locale getCurrentLocale() { - return UiContext.getLocale(); + // return UiContext.getLocale(); + // FIXME look into Subject or settings + return Locale.getDefault(); } - // 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); - // } - // } - // } - // } + /** Returns null if argument is null. */ + public static List asLocaleList(Object locales) { + if (locales == null) + return null; + ArrayList availableLocales = new ArrayList(); + String[] codes = locales.toString().split(","); + for (int i = 0; i < codes.length; i++) { + String code = codes[i]; + // variant not supported + int indexUnd = code.indexOf("_"); + Locale locale; + if (indexUnd > 0) { + String language = code.substring(0, indexUnd); + String country = code.substring(indexUnd + 1); + locale = new Locale(language, country); + } else { + locale = new Locale(code); + } + availableLocales.add(locale); + } + return availableLocales; + } }