package org.smartly.commons.i18n; import org.smartly.Smartly; import org.smartly.commons.i18n.resourcebundle.AbstractI18nBundle; import org.smartly.commons.util.FormatUtils; import org.smartly.commons.util.LocaleUtils; import org.smartly.commons.util.StringUtils; import java.util.Collection; import java.util.Locale; import java.util.Map; /** * Dictionary helper class */ public class Dictionary { public static final String NAME = "dic"; // velocity name public Dictionary() { } public String getName() { return NAME; } public String get(final String lang, final String key) { return Dictionary.getMessage(lang, key); } public String get(final String lang, final String key, final Object... args) { return Dictionary.getMessage(lang, key, args); } public String get(final String lang, final String dicName, final String key) { return Dictionary.getMessage(lang, dicName, key); } public String get(final String lang, final String dicName, final String key, final Object... args) { return Dictionary.getMessage(lang, dicName, key, args); } // -------------------------------------------------------------------- // S T A T I C // -------------------------------------------------------------------- public static String getMessage(final String lang, final String key, final Object... args) { final Locale locale = LocaleUtils.getLocaleFromString(toLangString(lang)); return getMessage(locale, key, args); } public static String getMessage(final String lang, final String key, final Map<String, ? extends Object> args) { final Locale locale = LocaleUtils.getLocaleFromString(toLangString(lang)); return getMessage(locale, key, args); } public static String getMessage(final Locale locale, final String key, final Object... args) { final String resource = lookup(key, locale); return StringUtils.hasText(resource) ? FormatUtils.format(resource, args) : ""; } public static String getMessage(final Locale locale, final String key, final Map<String, ? extends Object> args) { final String resource = lookup(key, locale); return StringUtils.hasText(resource) ? FormatUtils.format(resource, args) : ""; } public static String getMessage(final String lang, final String dicName, final String key, final Object... args) { final Locale locale = LocaleUtils.getLocaleFromString(toLangString(lang)); return getMessage(locale, dicName, key, args); } public static String getMessage(final String lang, final String dicName, final String key, final Map<String, ? extends Object> args) { final Locale locale = LocaleUtils.getLocaleFromString(toLangString(lang)); return getMessage(locale, dicName, key, args); } public static String getMessage(final Locale locale, final String dicName, final String key, final Object... args) { final String resource = lookup(dicName, key, locale); return StringUtils.hasText(resource) ? FormatUtils.format(resource, args) : ""; } public static String getMessage(final Locale locale, final String dicName, final String key, final Map<String, ? extends Object> args) { final String resource = lookup(dicName, key, locale); return StringUtils.hasText(resource) ? FormatUtils.format(resource, args) : ""; } // ------------------------------------------------------------------------ // p r i v a t e // ------------------------------------------------------------------------ private static String lookup(final String key, final Locale locale) { final Collection<AbstractI18nBundle> list = DictionaryRegistry.getDictionaries(); for (final AbstractI18nBundle dic : list) { final String resource = dic.getMessage(key, locale, dic.getClass().getClassLoader()); if (StringUtils.hasText(resource)) { return resource; } } return ""; } private static String lookup(final String dicName, final String key, final Locale locale) { final AbstractI18nBundle dic = DictionaryRegistry.getDictionary(dicName); if (null != dic) { return dic.getMessage(key, locale, dic.getClass().getClassLoader()); } return ""; } private static String toLangString(final Object lang) { return null != lang ? lang.toString() : Smartly.getLang(); } }