/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.localization;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public abstract class LocalizationResourceBundleUtils
{
// Pattern to parse locale string on format Languagcode[-country][anything]
private static final String LOCALE_PATTERN = "^(\\w{2})(_(\\w{2}))?(_(\\w{2}))?$";
private static Matcher match( String inputString, final String regexp )
{
Pattern pattern = Pattern.compile( regexp, Pattern.CASE_INSENSITIVE );
if ( inputString == null )
{
inputString = "";
}
return pattern.matcher( inputString );
}
public static Locale parseLocaleString( String localeAsString )
{
localeAsString = localeAsString.replace( '-', '_' );
final Matcher matcher = match( localeAsString, LOCALE_PATTERN );
String language = "";
String country = "";
String variant = "";
if ( matcher.matches() )
{
language = getLanguageFromMatcher( matcher );
country = getCountryFromMatcher( matcher );
variant = getVariantFromMatcher( matcher );
}
else
{
throw new LocaleParsingException( "Could not parse locale string: " + localeAsString + " to valid locale" );
}
return new Locale( language, country == null ? "" : country, variant == null ? "" : variant );
}
private static String getLanguageFromMatcher( final Matcher matcher )
{
return matcher.group( 1 );
}
private static String getCountryFromMatcher( final Matcher matcher )
{
return matcher.group( 3 );
}
private static String getVariantFromMatcher( final Matcher matcher )
{
return matcher.group( 5 );
}
}