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"));
+    }
 }


Reply via email to