[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