Adjusted locale lookup behavior for ResourceBundleStringMessages

This commit is contained in:
Benjamin Barth committed 2016-05-13 10:39:46 +02:00
1 parent 0eadc55856
commit 8c1cc476db
3 files changed
+16 -44

No files matched your search

@@ -5,10 +5,8 @@ import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import java.util.Date;
import java.util.HashSet;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
@@ -81,25 +79,13 @@ public class TestI18N {
@Test
public void testGetLocaleForLocaleInfoName() {
assertThat(ResourceBundleStringMessages.Util.getLocaleFor("default"), is(Locale.ENGLISH));
assertThat(ResourceBundleStringMessages.Util.getLocaleFor("default"), is(Locale.forLanguageTag("default")));
assertThat(ResourceBundleStringMessages.Util.getLocaleFor("en"), is(Locale.ENGLISH));
assertThat(ResourceBundleStringMessages.Util.getLocaleFor("de"), is(Locale.GERMAN));
assertThat(ResourceBundleStringMessages.Util.getLocaleFor("zh"), is(Locale.CHINESE));
assertThat(ResourceBundleStringMessages.Util.getLocaleFor("ja"), is(Locale.JAPANESE));
assertThat(ResourceBundleStringMessages.Util.getLocaleFor("Unsupported locale info name"), is(Locale.ENGLISH));
}
@Test
public void testGetSupportedLocales() {
Set<Locale> supportedLocales = new HashSet<>();
for (Locale locale : ResourceBundleStringMessages.Util.getSupportedLocales()) {
supportedLocales.add(locale);
}
Set<Locale> expectedSupportedLocales = new HashSet<>();
expectedSupportedLocales.add(Locale.GERMAN);
expectedSupportedLocales.add(Locale.ENGLISH);
assertThat(supportedLocales, is(expectedSupportedLocales));
assertThat(ResourceBundleStringMessages.Util.getLocaleFor("Unsupported locale info name"), is(Locale.ROOT));
}
@Test(expected=MissingResourceException.class)
@@ -1,8 +1,7 @@
package com.sap.sse.i18n;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle.Control;
import com.sap.sse.i18n.impl.NullResourceBundleStringMessages;
@@ -29,31 +28,18 @@ public interface ResourceBundleStringMessages {
public String get(Locale locale, String messageKey, String... parameters);
public static final class Util {
private static boolean supportedLocalesHaveBeenInitialized = false;
private static final Locale DEFAULT_LOCALE = Locale.ENGLISH;
private static final Map<String, Locale> supportedLocalesMappedByLocaleInfo = new HashMap<>();
public static Locale getLocaleFor(String localeInfoName) {
Locale locale = getSupportedLocalesMap().get(localeInfoName);
return locale != null ? locale : DEFAULT_LOCALE;
}
public static Iterable<Locale> getSupportedLocales() {
return getSupportedLocalesMap().values();
}
private static Map<String, Locale> getSupportedLocalesMap() {
if (!supportedLocalesHaveBeenInitialized) {
initializeSupportedLocales();
private static final Locale FALLBACK_LOCALE = Locale.ROOT;
public static final Control CONTROL = new Control() {
@Override
public Locale getFallbackLocale(String baseName, Locale locale) {
if (baseName == null) throw new NullPointerException();
return locale.equals(FALLBACK_LOCALE) ? null : FALLBACK_LOCALE;
}
return supportedLocalesMappedByLocaleInfo;
}
};
private static void initializeSupportedLocales() {
supportedLocalesMappedByLocaleInfo.put("en", Locale.ENGLISH);
supportedLocalesMappedByLocaleInfo.put("de", Locale.GERMAN);
supportedLocalesHaveBeenInitialized = true;
public static Locale getLocaleFor(String localeInfoName) {
return Locale.forLanguageTag(localeInfoName);
}
private Util () {
@@ -35,9 +35,9 @@ public class ResourceBundleStringMessagesImpl implements ResourceBundleStringMes
private ResourceBundle getResourceBundle(Locale locale) {
if (resourceClassLoader != null) {
return ResourceBundle.getBundle(resourceBaseName, locale, resourceClassLoader);
return ResourceBundle.getBundle(resourceBaseName, locale, resourceClassLoader, Util.CONTROL);
} else {
return ResourceBundle.getBundle(resourceBaseName, locale);
return ResourceBundle.getBundle(resourceBaseName, locale, Util.CONTROL);
}
}