Author: kwin
Date: Tue Jun 28 11:50:46 2016
New Revision: 1750489
URL: http://svn.apache.org/viewvc?rev=1750489&view=rev
Log:
SLING-5781 support BCP 47 compliant language tags as well
Modified:
sling/trunk/bundles/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java
sling/trunk/bundles/extensions/i18n/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleProviderTest.java
Modified:
sling/trunk/bundles/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java?rev=1750489&r1=1750488&r2=1750489&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java
(original)
+++
sling/trunk/bundles/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java
Tue Jun 28 11:50:46 2016
@@ -567,20 +567,25 @@ public class JcrResourceBundleProvider i
}
/**
- * Converts the given <code>localeString</code> to valid
- * <code>java.util.Locale</code>. If the locale string is
- * <code>null</code> or empty, the platform default locale is assumed. If
+ * Converts the given <code>localeString</code> to a valid
+ * <code>java.util.Locale</code>. It must either be in the format
specified by
+ * {@link Locale#toString()} or in <a
href="https://tools.ietf.org/html/bcp47">BCP 47 format</a>
+ * If the locale string is <code>null</code> or empty, the platform
default locale is assumed. If
* the localeString matches any locale available per default on the
* platform, that platform locale is returned. Otherwise the localeString
is
* parsed and the language and country parts are compared against the
* languages and countries provided by the platform. Any unsupported
* language or country is replaced by the platform default language and
* country.
+ * @param localeString the locale as string
+ * @return the {@link Locale} being generated from the {@code localeString}
*/
static Locale toLocale(String localeString) {
if (localeString == null || localeString.length() == 0) {
return Locale.getDefault();
}
+ // support BCP 47 compliant strings as well (using a different
separator "-" instead of "_")
+ localeString = localeString.replaceAll("-", "_");
// check language and country
final String[] parts = localeString.split("_");
Modified:
sling/trunk/bundles/extensions/i18n/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleProviderTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/i18n/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleProviderTest.java?rev=1750489&r1=1750488&r2=1750489&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/i18n/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleProviderTest.java
(original)
+++
sling/trunk/bundles/extensions/i18n/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleProviderTest.java
Tue Jun 28 11:50:46 2016
@@ -35,15 +35,15 @@ public class JcrResourceBundleProviderTe
Assert.assertEquals(Locale.ENGLISH,
JcrResourceBundleProvider.toLocale("en"));
Assert.assertEquals(Locale.GERMAN,
JcrResourceBundleProvider.toLocale("de"));
// for invalid languages assume default language
- Assert.assertEquals(new Locale(Locale.getDefault().getLanguage()),
JcrResourceBundleProvider.toLocale("-"));
+ Assert.assertEquals(new Locale(Locale.getDefault().getLanguage()),
JcrResourceBundleProvider.toLocale("invalid"));
// both language and country being set
Assert.assertEquals(Locale.GERMANY,
JcrResourceBundleProvider.toLocale("de_DE"));
Assert.assertEquals(Locale.UK,
JcrResourceBundleProvider.toLocale("en_GB"));
// for invalid languages assume default language
- Assert.assertEquals(new Locale(Locale.getDefault().getLanguage(),
"GB"), JcrResourceBundleProvider.toLocale("-_GB"));
+ Assert.assertEquals(new Locale(Locale.getDefault().getLanguage(),
"GB"), JcrResourceBundleProvider.toLocale("invalid_GB"));
// for invalid countries assume default country
- Assert.assertEquals(new Locale("en",
Locale.getDefault().getCountry()), JcrResourceBundleProvider.toLocale("en_-"));
+ Assert.assertEquals(new Locale("en",
Locale.getDefault().getCountry()),
JcrResourceBundleProvider.toLocale("en_invalid"));
// language, country and variant being set
Assert.assertEquals(new Locale(Locale.UK.getLanguage(),
Locale.UK.getCountry(), "variant1"),
JcrResourceBundleProvider.toLocale("en_GB_variant1"));
@@ -51,4 +51,21 @@ public class JcrResourceBundleProviderTe
// parts after the variant are just ignored
Assert.assertEquals(new Locale(Locale.UK.getLanguage(),
Locale.UK.getCountry(), "variant1"),
JcrResourceBundleProvider.toLocale("en_GB_variant1_something"));
}
+
+ @Test
+ public void testToLocaleWithBcp47CompliantStrings() {
+ // both language and country being set
+ Assert.assertEquals(Locale.GERMANY,
JcrResourceBundleProvider.toLocale("de-DE"));
+ Assert.assertEquals(Locale.UK,
JcrResourceBundleProvider.toLocale("en-GB"));
+ // for invalid languages assume default language
+ Assert.assertEquals(new Locale(Locale.getDefault().getLanguage(),
"GB"), JcrResourceBundleProvider.toLocale("invalid-GB"));
+ // for invalid countries assume default country
+ Assert.assertEquals(new Locale("en",
Locale.getDefault().getCountry()),
JcrResourceBundleProvider.toLocale("en-invalid"));
+
+ // language, country and variant being set
+ Assert.assertEquals(new Locale(Locale.UK.getLanguage(),
Locale.UK.getCountry(), "variant1"),
JcrResourceBundleProvider.toLocale("en-GB-variant1"));
+
+ // parts after the variant are just ignored
+ Assert.assertEquals(new Locale(Locale.UK.getLanguage(),
Locale.UK.getCountry(), "variant1"),
JcrResourceBundleProvider.toLocale("en-GB-variant1_something-else"));
+ }
}