diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/i18n/selection/LocaleSelectionSetup.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/i18n/selection/LocaleSelectionSetup.java index 98ff8b02f..2884cfaa9 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/i18n/selection/LocaleSelectionSetup.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/i18n/selection/LocaleSelectionSetup.java @@ -154,7 +154,7 @@ public class LocaleSelectionSetup implements ServletContextListener { Locale locale = LocaleUtility.languageStringToLocale(localeString); if (!"es_GO".equals(localeString) && // No complaint about bogus locale - !LocaleUtils.isAvailableLocale(locale)) { + !LocaleUtils.isAvailableLocale(locale.stripExtensions())) { ssWarning("'" + locale + "' is not a recognized locale."); } diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/LocaleUtility.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/LocaleUtility.java index efbe51288..4c6bf5745 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/LocaleUtility.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/LocaleUtility.java @@ -10,10 +10,20 @@ public final class LocaleUtility { public static Locale languageStringToLocale(String localeString){ String[] parsedLoc = localeString.trim().split("_", -1); - //regex pattern for locale tag with script specified - Locale locale = localeString.matches("^[a-z]{1,3}_[A-Z][a-z]{3}_[A-Z]{2}") ? - new Locale.Builder().setLanguage(parsedLoc[0]).setRegion(parsedLoc[2]).setScript(parsedLoc[1]).build() : - LocaleUtils.toLocale(localeString); + Locale locale = null; + //regex pattern for locale tag with script and private-use subtag, e.g. sr_Latn_RS_x_uns + if (localeString.matches("^[a-z]{1,3}_[A-Z][a-z]{3}_[A-Z]{2}_x_[a-z]{1,}")) + locale = new Locale.Builder().setLanguage(parsedLoc[0]).setRegion(parsedLoc[2]).setScript(parsedLoc[1]).setExtension('x', parsedLoc[4]).build(); + //regex pattern for locale tag with script and private-use subtag, e.g. fr_CA_x_uqam + if (localeString.matches("^[a-z]{1,3}_[A-Za-z]{2}_x_[a-z]{1,}")) + locale = new Locale.Builder().setLanguage(parsedLoc[0]).setRegion(parsedLoc[1]).setExtension('x', parsedLoc[3]).build(); + //regex pattern for locale tag with script specified, e.g. sr_Latn_RS + else if (localeString.matches("^[a-z]{1,3}_[A-Z][a-z]{3}_[A-Z]{2}")) + locale = new Locale.Builder().setLanguage(parsedLoc[0]).setRegion(parsedLoc[2]).setScript(parsedLoc[1]).build(); + // other, just languge, e.g. es, or language + region, e.g. en_US, pt_BR, ru_RU, etc. + else + locale = LocaleUtils.toLocale(localeString); + String localeLang = locale.toLanguageTag(); return locale; } }