[Yanel-commits] rev 26758 - in public/yanel/trunk/src: core/java/org/wyona/yanel/core/transformation impl/java/org/wyona/yanel/impl/resources

simon at wyona.com simon at wyona.com
Wed Aug 15 17:56:01 CEST 2007


Author: simon
Date: 2007-08-15 17:56:00 +0200 (Wed, 15 Aug 2007)
New Revision: 26758

Modified:
   public/yanel/trunk/src/core/java/org/wyona/yanel/core/transformation/I18nTransformer2.java
   public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java
Log:
allow multiple catalogues. see bug#5456. thanks to josias!

Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/core/transformation/I18nTransformer2.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/core/transformation/I18nTransformer2.java	2007-08-15 15:04:37 UTC (rev 26757)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/core/transformation/I18nTransformer2.java	2007-08-15 15:56:00 UTC (rev 26758)
@@ -36,8 +36,7 @@
 public class I18nTransformer2 extends AbstractTransformer {
 
     private static Category log = Category.getInstance(I18nTransformer2.class);
-    private Locale currentLocale = null;
-    private ResourceBundle messageBundle = null;
+    private ResourceBundle[] messageBundles;
     private boolean insideI18n;
     private String key;
     private StringBuffer textBuffer;
@@ -45,15 +44,43 @@
     public static final String NS_URI = "http://www.wyona.org/yanel/i18n/1.0";
     
     public I18nTransformer2(String messages, String language, String defaultLanguage) {
-        try {
-            currentLocale = new Locale(language);
-            messageBundle = ResourceBundle.getBundle(messages, currentLocale);
-        } catch (MissingResourceException e) {
-            currentLocale = new Locale(defaultLanguage);
-            messageBundle = ResourceBundle.getBundle(messages, currentLocale);
-        } 
+        String[] messagesArray = new String[1];
+        messagesArray[0] = messages;
+        this.messageBundles = getMessageBundles(messagesArray, language, defaultLanguage);
     }
 
+    public I18nTransformer2(String[] messagesArray, String language, String defaultLanguage) {
+        this.messageBundles = getMessageBundles(messagesArray, language, defaultLanguage);
+    }
+    
+    protected ResourceBundle[] getMessageBundles(String[] messages, String language, String defaultLanguage) {
+        Locale currentLocale = new Locale(language);
+        Locale defaultLocale = new Locale(defaultLanguage);
+        ResourceBundle[] messageBundles = new ResourceBundle[messages.length];
+        for (int i = 0; i < messages.length; i++) {
+            try {
+                messageBundles[i] = ResourceBundle.getBundle(messages[i], currentLocale);
+            } catch (MissingResourceException e) {
+                messageBundles[i] = ResourceBundle.getBundle(messages[i], defaultLocale);
+            } 
+        }
+        return messageBundles;
+    }
+
+    protected String getMessage(String key) {
+        String value = null;
+        for (int i = 0; i < this.messageBundles.length; i++) {
+            try {
+                value = this.messageBundles[i].getString(key);
+                return value;
+            } catch (MissingResourceException e) {
+                // ignore
+            }
+        }
+        log.error("cannot find message for key: " + key);
+        return null;
+    }
+    
     public void startElement(String namespaceURI, String localName, String qName, Attributes attrs) throws SAXException {
         
         if (this.insideI18n) {
@@ -83,11 +110,8 @@
                     
                     if (!attrLocalName.equals("attr") || !attrUri.equals(NS_URI)) {
                         if (i18nAttrs.contains(attrQName)) {
-                            String i18nValue;
-                            try {
-                                i18nValue = messageBundle.getString(attrValue);
-                            } catch (Exception e) {
-                                log.error("cannot find message for key: " + attrValue);
+                            String i18nValue = getMessage(attrValue);
+                            if (i18nValue == null) {
                                 i18nValue = attrValue;
                             }
                             newAttrs.addAttribute(attrUri, attrLocalName, attrQName, attrType, i18nValue);
@@ -112,11 +136,8 @@
                     if (attrValue.indexOf("i18n:attr key=") != -1) {
                         String key = attrValue.substring(14);
 
-                        String i18nValue;
-                        try {
-                            i18nValue = messageBundle.getString(key);
-                        } catch (Exception e) {
-                            log.error("cannot find message for key: " + key);
+                        String i18nValue = getMessage(key);
+                        if (i18nValue == null) {
                             i18nValue = key;
                         }
                         newAttrs.addAttribute(attrUri, attrLocalName, attrQName, attrType, i18nValue);
@@ -135,13 +156,13 @@
             if (this.key == null) {
                 this.key = defaultText;
             }
-            String i18nText;
-            try {
-                i18nText = messageBundle.getString(this.key);
-            } catch (Exception e) {
-                log.error("cannot find message for key: " + this.key);
-                i18nText = defaultText.length() == 0 ? this.key : defaultText;
+            String i18nText = getMessage(key);
+            if (i18nText == null) {
+                i18nText = defaultText;
             }
+            if (i18nText.length() == 0) {
+                i18nText = key;
+            }
             
             if (log.isDebugEnabled()) {
                 log.debug("TAG [key] " + this.key + " [message]" + i18nText);

Modified: public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java
===================================================================
--- public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java	2007-08-15 15:04:37 UTC (rev 26757)
+++ public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java	2007-08-15 15:56:00 UTC (rev 26758)
@@ -129,7 +129,7 @@
             }
            
             // create i18n transformer:
-            I18nTransformer2 i18nTransformer = new I18nTransformer2("global", getRequestedLanguage(), getRealm().getDefaultLanguage());
+            I18nTransformer2 i18nTransformer = new I18nTransformer2(getI18NCatalogueNames(), getRequestedLanguage(), getRealm().getDefaultLanguage());
             i18nTransformer.setEntityResolver(catalogResolver);
            
             // create xinclude transformer:
@@ -175,6 +175,20 @@
     }
    
     /**
+     * Gets the names of the i18n message catalogues used for the i18n transformation.
+     * Looks for an rc config property named 'i18n-catalogue'. Defaults to 'global'.
+     * @return i18n catalogue name
+     */
+    protected String[] getI18NCatalogueNames() throws Exception {
+        String[] catalogueNames = getResourceConfigProperties("i18n-catalogue");
+        if (catalogueNames == null || catalogueNames.length == 0) {
+            catalogueNames = new String[1];
+            catalogueNames[0] = "global";
+        }
+        return catalogueNames;
+    }
+    
+    /**
      * Pass parameters to xslt transformer.
      * @param transformer
      * @throws Exception



More information about the Yanel-commits mailing list