1 package com.teamkonzept.international; 2 3 import java.util.*; 4 import java.text.MessageFormat ; 5 import org.apache.log4j.Category; 6 import com.teamkonzept.web.TKEvent; 7 8 14 public class LanguageManager 15 implements LanguageSelection 16 { 17 private static Hashtable contexts; 18 19 private static Category cat = Category.getInstance(LanguageManager.class); 20 21 private static Hashtable CACHED_LOCALES = new Hashtable(); 22 23 public final static String GENERAL = "general"; 24 25 static 26 { 27 contexts = new Hashtable(); 28 registerContext("/content", LanguageManager.class); 29 registerContext("/general", LanguageManager.class); 30 registerContext("/workflow", LanguageManager.class); 31 registerContext("/form", LanguageManager.class); 32 registerContext("/field", LanguageManager.class); 33 registerContext("/contenttags", LanguageManager.class); 34 registerContext("/documenttype", LanguageManager.class); 35 registerContext("/copytool", LanguageManager.class); 36 registerContext("/properties", LanguageManager.class); 37 registerContext("/start", LanguageManager.class); 38 registerContext("/accessrights", LanguageManager.class); 39 registerContext("/templates", LanguageManager.class); 40 registerContext("/sitestructure", LanguageManager.class); 41 registerContext("/gui", LanguageManager.class); 42 } 43 44 45 private static Locale serverLocale = Locale.GERMAN; 46 47 48 private static int languageCode = USER_CHOSEN_LOCALE; 49 50 51 57 public static void registerContext(String context, Object source) 58 { 59 Class cl = source.getClass(); 60 String name = cl.getName(); 61 int index = name.lastIndexOf("."); 62 if (index == -1 || context.startsWith("/")) 63 { 64 if (context.startsWith("/")) 66 { 67 contexts.put(context.substring(1, context.length()), context.substring(1, context.length())); 68 } 69 else 70 contexts.put(context, context); 71 } 72 else 73 { 74 contexts.put(context, name.substring(0,index+1) + context); 75 } 76 } 77 78 85 public static String getText (String context, 86 String identifier) 87 { 88 return getText(context, identifier, null); 89 } 90 91 99 public static String getText (String context, 100 String identifier, 101 Object [] arguments) 102 { 103 try 104 { 105 String location = (String )contexts.get(context); 106 if (location == null) 107 { 108 cat.error("Unknown location '" + context + "'"); 109 return ""; 110 } 111 ResourceBundle bundle = null; 112 if (languageCode == SERVER_CURRENT_LOCALE) 113 { 114 bundle = ResourceBundle.getBundle(location, serverLocale); 115 } 116 else if (languageCode == USER_CHOSEN_LOCALE) 117 { 118 TKEvent evt = TKEvent.getEventForThread(); 119 if (evt != null) 120 { 121 String language = evt.getSelectedLanguage(); 122 Locale locale; 123 if (language == null){ 124 locale = serverLocale; 125 } 126 else{ 127 locale = getLocale(language); 128 } 129 bundle = ResourceBundle.getBundle(location, locale); 130 } 131 else 132 { 133 bundle = ResourceBundle.getBundle(location, serverLocale); 135 } 136 } 137 String text = bundle.getString(identifier); 138 if (arguments != null && arguments.length > 0) 139 { 140 text = MessageFormat.format(text, arguments); 141 } 142 143 return text; 144 } 145 catch (MissingResourceException e) 146 { 147 cat.error("No values for '" + identifier + "' in context '" + context + "'"); 148 } 149 catch (Exception e) 150 { 151 cat.error("Unknown error" , e); 152 } 153 return ""; 154 } 155 156 159 public static Locale getLocale(String language){ 160 Locale locale = (Locale)CACHED_LOCALES.get(language); 161 if ( locale == null ){ 162 locale = new Locale(language, ""); 163 CACHED_LOCALES.put(language, locale); 164 } 165 return locale; 166 } 167 168 public static Locale getStandardLocale() 169 { 170 return serverLocale; 171 } 172 173 public static void setLanguageSelection(int code) 174 { 175 languageCode = code; 176 } 178 179 public static void setLocale(Locale locale) 180 { 181 serverLocale = locale; 182 } 183 184 185 188 public static String getAppliableLanguage() { 189 Locale locale = null; 190 if (languageCode == SERVER_CURRENT_LOCALE) { 191 locale = serverLocale; 192 } 193 else if (languageCode == USER_CHOSEN_LOCALE) { 194 TKEvent evt = TKEvent.getEventForThread(); 195 if (evt != null) { 196 String language = evt.getSelectedLanguage(); 197 if (language == null) { 198 locale = serverLocale; 199 } 200 else { 201 locale = getLocale(language); 202 } 203 } 204 else { 205 locale = serverLocale; 206 } 207 } 208 209 return (locale != null ? locale.getLanguage() : null); 210 } 211 } 212
| Popular Tags
|