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); // } // } // } // } }