01: package com.xoetrope.langmgr;
02:
03: import java.util.Enumeration;
04: import java.util.Hashtable;
05: import java.util.ResourceBundle;
06: import java.util.Locale;
07: import net.xoetrope.optional.data.sql.DatabaseTableModel;
08: import net.xoetrope.xui.XProject;
09:
10: /**
11: * <p>A resource bundle interface for a language database resource. See the Localization chapter of the
12: * <i>XuiPro User Guide</i> for more detail.</p>
13: * <p>XUI uses standard property files for localization. These localization files can be set
14: * for an individual page (by setting the 'resource' attribute of the XPage
15: * element or for the component factory. The project's resource manager
16: * is used to identify the current locale and the name of the property file by default.</p>
17: *
18: * <p> Copyright (c) Xoetrope Ltd., 2001-2006, This software is licensed under
19: * the GNU Public License (GPL), please see license.txt for more details. If
20: * you make commercial use of this software you must purchase a commercial
21: * license from Xoetrope.</p>
22: * <p> $Revision: 1.5 $</p>
23: */
24: public class LanguageDatabaseResourceBundle extends ResourceBundle {
25: private Hashtable translations;
26:
27: /**
28: * Construct a new resource bundle for the given context. The context may be a
29: * page name or a named subset of a translation
30: * @param keyField The database field to use as the language key
31: * @param context the translation subset name
32: */
33: public LanguageDatabaseResourceBundle(XProject currentProject,
34: String keyField, String context) {
35: Locale locale = Locale.getDefault();
36: String language = locale.getLanguage();
37:
38: DatabaseTableModel translationTable = new DatabaseTableModel(
39: currentProject);
40: String where = "(" + language + " IS NOT NULL)";
41: if (context != null)
42: where = " AND (context=" + context + ")";
43: translationTable.setupTable("translations", keyField + ","
44: + language, where);
45: translationTable.retrieve();
46:
47: translations = new Hashtable();
48: int numValves = translationTable.getNumChildren();
49: for (int currentRecordIdx = 0; currentRecordIdx < numValves; currentRecordIdx++) {
50: translationTable.get(currentRecordIdx);
51:
52: String id = translationTable.getAttribValueAsString(0);
53: String trans = translationTable.getAttribValueAsString(1);
54: translations.put(id, trans);
55: }
56: }
57:
58: /**
59: * Gets an object for the given key from this resource bundle. Returns the key if
60: * this resource bundle does not contain an object for the given key.
61: * @param key the key for the desired object
62: * @return the object for the given key, or null
63: */
64: protected Object handleGetObject(String key) {
65: Object value = translations.get(key);
66: if (value == null)
67: value = key;
68: return value;
69: }
70:
71: /**
72: * Returns an enumeration of the keys.
73: * @return the language keys
74: */
75: public Enumeration getKeys() {
76: return translations.keys();
77: }
78: }
|