IMO we'll need to find a better place than Util for this since Util is meant to 
be deprecated and we should slim it down instead.

Thanks
-Vincent

On Aug 18, 2010, at 11:44 PM, abusenius (SVN) wrote:

> Author: abusenius
> Date: 2010-08-18 23:44:07 +0200 (Wed, 18 Aug 2010)
> New Revision: 30697
> 
> Modified:
>   platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/Util.java
> Log:
> Added Util.normalizeLanguage(String)
> 
> Modified: 
> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/Util.java
> ===================================================================
> --- platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/Util.java 
> 2010-08-18 19:11:05 UTC (rev 30696)
> +++ platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/Util.java 
> 2010-08-18 21:44:07 UTC (rev 30697)
> @@ -37,7 +37,9 @@
> import java.util.HashSet;
> import java.util.Hashtable;
> import java.util.List;
> +import java.util.Locale;
> import java.util.Map;
> +import java.util.MissingResourceException;
> import java.util.Set;
> import java.util.Vector;
> 
> @@ -880,4 +882,54 @@
> 
>         return 
> Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);
>     }
> +
> +    /**
> +     * Normalize the given language code. Converts the given language code 
> to lower case and checks its validity (i.e.
> +     * whether it is an ISO 639 language code or the string "default").
> +     * <p><pre>
> +     * Util.normalizeLanguage(null)      = null
> +     * Util.normalizeLanguage("")        = ""
> +     * Util.normalizeLanguage("  ")      = ""
> +     * Util.normalizeLanguage("default") = "default"
> +     * Util.normalizeLanguage("DeFault") = "default"
> +     * Util.normalizeLanguage("invalid") = "default"
> +     * Util.normalizeLanguage("en")      = "en"
> +     * Util.normalizeLanguage("DE_at")   = "de_AT"
> +     * </pre></p>
> +     * 
> +     * @param languageCode the language code to normalize
> +     * @return normalized language code or the string "default" if the code 
> is invalid
> +     */
> +    public static String normalizeLanguage(String languageCode)
> +    {
> +        if (languageCode == null) {
> +            return null;
> +        }
> +        if (StringUtils.isBlank(languageCode)) {
> +            return "";
> +        }
> +        // handle language_COUNTRY case
> +        final String separator = "_";
> +        String[] parts = languageCode.toLowerCase().split(separator);
> +        String result = parts[0];
> +        if (parts.length > 1) {
> +            parts[1] = parts[1].toUpperCase();
> +            // NOTE cannot use Locale#toString(), because it would change 
> some language codes
> +            result = parts[0] + separator + parts[1];
> +        }
> +        // handle the "default" case
> +        final String defaultLanguage = "default";
> +        if (defaultLanguage.equals(result)) {
> +            return defaultLanguage;
> +        }
> +        try {
> +            Locale l = new Locale(parts[0], parts.length > 1 ? parts[1] : 
> "");
> +            // Will throw an exception if the language code is not valid
> +            l.getISO3Language();
> +            return result;
> +        } catch (MissingResourceException ex) {
> +            LOG.warn("Invalid language: " + languageCode);
> +        }
> +        return defaultLanguage;
> +    }
> }
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to