package org.ripple.power.i18n; import java.awt.ComponentOrientation; import java.util.Locale; import java.util.ResourceBundle; import org.ripple.power.config.LSystem; import org.ripple.power.config.RPConfig; import org.ripple.power.ui.UIRes; import org.ripple.power.utils.StringUtils; import com.google.common.base.Preconditions; public class LangConfig { private static RPConfig _config; private static I18nSupport _javai18n; private static String fontName = "Dialog"; public static String getFontName() { init(); return fontName; } public static ComponentOrientation currentComponentOrientation() { return ComponentOrientation.getOrientation(Language.DEF.getLocale()); } public static boolean isLeftToRight() { return ComponentOrientation.getOrientation(Language.DEF.getLocale()) .isLeftToRight(); } public static boolean isEast() { return isEastLocale(Language.DEF.getLocale()); } public static Locale newLocaleFromCode(String value) { Preconditions.checkNotNull(value, "'value' must be present"); String[] parameters = value.split("_"); Preconditions.checkState(parameters.length > 0, "'value' must not be empty"); final Locale newLocale; switch (parameters.length) { case 1: newLocale = new Locale(parameters[0]); break; case 2: newLocale = new Locale(parameters[0], parameters[1]); break; case 3: newLocale = new Locale(parameters[0], parameters[1], parameters[2]); break; default: throw new IllegalArgumentException("Unknown locale descriptor: " + value); } return newLocale; } public static boolean isEastLocale(Locale locale) { return locale.equals(Locale.CHINA) || locale.equals(Locale.CHINESE) || locale.equals(new Locale("zh", "HK")) || locale.equals(Locale.TAIWAN) || locale.equals(Locale.JAPAN) || locale.equals(Locale.JAPANESE) || locale.equals(Locale.KOREA) || locale.equals(Locale.KOREAN); } public static void addJavaI18n(ResourceBundle resourceBundle, Language language) { initJavaI18n(); _javai18n.addBundle(resourceBundle, language); } public static void addJavaI18n(String baseName, Language language) { initJavaI18n(); _javai18n.addBundle(baseName, language); } public static void addJavaI18n(String baseName, Language language, String key) { initJavaI18n(); _javai18n.addBundleOnlyIfNeeded(baseName, language, key); } public String getJavaI18n(String key, Language language) { initJavaI18n(); return _javai18n.translate(key, language); } public boolean hasJavaI18n(String key, Language language) { initJavaI18n(); return _javai18n.hasKey(key, language); } public synchronized static void init() { if (_config == null) { try { // 简 if (Language.SIMPLECN.getLocale().equals( LSystem.applicationLang.getLocale())) { fontName = "宋体"; _config = new RPConfig(UIRes.getStream("cn_zh/mes")); // 繁 } else if (Language.TRADITIONALCN.getLocale().equals( LSystem.applicationLang.getLocale())) { fontName = "Dialog"; _config = new RPConfig(UIRes.getStream("cn_tw/mes")); // 日 } else if (Language.JP.getLocale().equals( LSystem.applicationLang.getLocale())) { // MS ゴシック fontName = "Dialog"; _config = new RPConfig(UIRes.getStream("jp/mes")); // 其它 } else { fontName = "Dialog"; _config = new RPConfig(UIRes.getStream("en/mes")); } } catch (Exception ex) { ex.printStackTrace(); } } } private static void initJavaI18n() { if (_javai18n == null) { _javai18n = new I18nSupport(); } } public static String get(Object obj, String res, String value) { init(); String result = null; if (obj == null) { result = _config.getValue(res, value); } if (result == null) { String clazz = null; if (obj instanceof String) { clazz = (String) obj; } else if (obj instanceof Class) { clazz = ((Class<?>) obj).getName(); } else { clazz = obj.getClass().getName(); } result = _config.getValue(clazz + "." + res); if (result == null) { result = _config.getValue(res, value); } if (result == null && _javai18n != null && _javai18n.isDirty()) { result = _javai18n.translate(res, LSystem.applicationLang); } } if (result != null && result.indexOf("\\n") != -1) { result = StringUtils.replace(result, "\\n", "\n"); } if (result != null && result.indexOf("\\r") != -1) { result = StringUtils.replace(result, "\\r", "\r"); } return result; } }