KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > teamkonzept > international > LanguageManager


1 package com.teamkonzept.international;
2
3 import java.util.*;
4 import java.text.MessageFormat JavaDoc;
5 import org.apache.log4j.Category;
6 import com.teamkonzept.web.TKEvent;
7
8 /**
9  * The language manager.
10  *
11  * @author $Author: uli $
12  * @version $Revision: 1.25 $
13  */

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 JavaDoc 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     /** aktuell gesetztes Server Locale */
45     private static Locale serverLocale = Locale.GERMAN;
46
47     /** aktuell gesetzte LanguageSelektion */
48     private static int languageCode = USER_CHOSEN_LOCALE;
49
50
51     /**
52            registriert Kontext und den Ort -> Properties mussen also in dem Package der uebergebenen
53            Klasse liegen
54            @param context name des Kontexts
55            @param source die aufrufende Klasse, um den Ort des PropertyFiles zu bestimmen
56     */

57     public static void registerContext(String JavaDoc context, Object JavaDoc source)
58     {
59         Class JavaDoc cl = source.getClass();
60         String JavaDoc name = cl.getName();
61         int index = name.lastIndexOf(".");
62         if (index == -1 || context.startsWith("/"))
63         {
64             // kein Package
65
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     /**
79      * Returns the specified internationalized text token.
80      *
81      * @param context the name of the context.
82      * @param identifier the identifier of the text token.
83      * @return the specified internationalized text token.
84      */

85     public static String JavaDoc getText (String JavaDoc context,
86                                   String JavaDoc identifier)
87     {
88         return getText(context, identifier, null);
89     }
90
91     /**
92      * Returns the specified internationalized text token.
93      *
94      * @param context the name of the context.
95      * @param identifier the identifier of the text token.
96      * @param arguments the arguments of the text token.
97      * @return the specified internationalized text token.
98      */

99     public static String JavaDoc getText (String JavaDoc context,
100                                   String JavaDoc identifier,
101                                   Object JavaDoc[] arguments)
102     {
103         try
104         {
105             String JavaDoc location = (String JavaDoc)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 JavaDoc 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                     // Generator !!!
134
bundle = ResourceBundle.getBundle(location, serverLocale);
135                 }
136             }
137             String JavaDoc 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 JavaDoc e)
150         {
151             cat.error("Unknown error" , e);
152         }
153         return "";
154     }
155
156     /**
157      * holt eine gecachte Locale instanz oder erzeugt eine neue
158      */

159     public static Locale getLocale(String JavaDoc 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         // noch was machen ???
177
}
178
179     public static void setLocale(Locale locale)
180     {
181         serverLocale = locale;
182     }
183
184
185     /**
186      * returns the language as a ISO 639 language code, as it would be used
187      * for a getText() method call. */

188     public static String JavaDoc 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 JavaDoc 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