You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ju...@apache.org on 2011/06/30 02:15:17 UTC
svn commit: r1141340 - in /sling/trunk/contrib/extensions/i18n/src:
main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java
test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java
Author: justin
Date: Thu Jun 30 00:15:17 2011
New Revision: 1141340
URL: http://svn.apache.org/viewvc?rev=1141340&view=rev
Log:
SLING-2111 - querying for jcr:language values which either match the value of Locale.toString() or the RFC 4646 version of the Locale's String representation.
Modified:
sling/trunk/contrib/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java
sling/trunk/contrib/extensions/i18n/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java
Modified: sling/trunk/contrib/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java?rev=1141340&r1=1141339&r2=1141340&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java (original)
+++ sling/trunk/contrib/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java Thu Jun 30 00:15:17 2011
@@ -150,9 +150,23 @@ public class JcrResourceBundle extends R
final String baseName) {
StringBuilder buf = new StringBuilder(64);
- buf.append("//element(*,mix:language)[@jcr:language='");
- buf.append(locale);
- buf.append('\'');
+ buf.append("//element(*,mix:language)[");
+
+ String localeString = locale.toString();
+ String localeRFC4646String = toRFC4646String(locale);
+
+ if (localeString.equals(localeRFC4646String)) {
+ buf.append("@jcr:language='");
+ buf.append(localeString);
+ buf.append('\'');
+ } else {
+ buf.append("(@jcr:language='");
+ buf.append(localeString);
+ buf.append('\'');
+ buf.append(" or @jcr:language='");
+ buf.append(localeRFC4646String);
+ buf.append("\')");
+ }
if (baseName != null) {
buf.append(" and @");
@@ -168,4 +182,9 @@ public class JcrResourceBundle extends R
return buf.toString();
}
+
+ // Would be nice if Locale.toString() output RFC 4646, but it doesn't
+ private static String toRFC4646String(Locale locale) {
+ return locale.toString().replace('_', '-');
+ }
}
Modified: sling/trunk/contrib/extensions/i18n/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/i18n/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java?rev=1141340&r1=1141339&r2=1141340&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/i18n/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java (original)
+++ sling/trunk/contrib/extensions/i18n/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java Thu Jun 30 00:15:17 2011
@@ -244,6 +244,8 @@ public class JcrResourceBundleTest exten
// test data to add to the repository (use linked hash map for insertion order)
public static final Map<String, Message> MESSAGES_DE = new LinkedHashMap<String, Message>();
public static final Map<String, Message> MESSAGES_EN = new LinkedHashMap<String, Message>();
+ public static final Map<String, Message> MESSAGES_EN_DASH_US = new LinkedHashMap<String, Message>();
+ public static final Map<String, Message> MESSAGES_EN_UNDERSCORE_UK = new LinkedHashMap<String, Message>();
public static final Map<String, Message> MESSAGES_DE_APPS = new LinkedHashMap<String, Message>();
public static final Map<String, Message> MESSAGES_DE_BASENAME = new LinkedHashMap<String, Message>();
@@ -267,6 +269,9 @@ public class JcrResourceBundleTest exten
// 5. not present in DE
add(MESSAGES_EN, PARENT_MSG);
+ add(MESSAGES_EN_DASH_US, new Message("", "pigment", "color", false));
+ add(MESSAGES_EN_UNDERSCORE_UK, new Message("", "pigment", "colour", false));
+
// 6. same as 1.-4., but different translations for overwriting into apps
for (Message msg : MESSAGES_DE.values()) {
add(MESSAGES_DE_APPS, new Message(msg.path, msg.key, "OTHER", msg.useNodeName));
@@ -298,6 +303,24 @@ public class JcrResourceBundleTest exten
msg.add(en);
}
getSession().save();
+
+ // some EN US content
+ Node enDashUS = i18n.addNode("en-US", "nt:folder");
+ enDashUS.addMixin("mix:language");
+ enDashUS.setProperty("jcr:language", "en-US");
+ for (Message msg : MESSAGES_EN_DASH_US.values()) {
+ msg.add(enDashUS);
+ }
+ getSession().save();
+
+ // some EN US content
+ Node enUnderscoreUK = i18n.addNode("en_UK", "nt:folder");
+ enUnderscoreUK.addMixin("mix:language");
+ enUnderscoreUK.setProperty("jcr:language", "en_UK");
+ for (Message msg : MESSAGES_EN_UNDERSCORE_UK.values()) {
+ msg.add(enUnderscoreUK);
+ }
+ getSession().save();
}
// ---------------------------------------------------------------< tests >
@@ -307,6 +330,16 @@ public class JcrResourceBundleTest exten
for (Message msg : MESSAGES_DE.values()) {
assertEquals(msg.message, bundle.getString(msg.key));
}
+
+ bundle = new JcrResourceBundle(new Locale("en", "us"), null, resolver);
+ for (Message msg : MESSAGES_EN_DASH_US.values()) {
+ assertEquals(msg.message, bundle.getString(msg.key));
+ }
+
+ bundle = new JcrResourceBundle(new Locale("en", "uk"), null, resolver);
+ for (Message msg : MESSAGES_EN_UNDERSCORE_UK.values()) {
+ assertEquals(msg.message, bundle.getString(msg.key));
+ }
}
public void test_getObject() {