8000245: SimpleDateFormat.format(date, StringBuffer, FieldPosition) doesn't work as expected with custom extensions
8000273: java.util.Locale.getDisplayVariant(Locale l) isn't transferred to the custom service provider 8000615: JRE adapter: timezone name of en_US is changed when extension directory is added Reviewed-by: okutsu
This commit is contained in:
parent
a14592d891
commit
2647f75cdd
@ -26,10 +26,9 @@
|
|||||||
package sun.util.locale.provider;
|
package sun.util.locale.provider;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.MissingResourceException;
|
import java.util.ResourceBundle;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.spi.CurrencyNameProvider;
|
import java.util.spi.CurrencyNameProvider;
|
||||||
import sun.util.resources.OpenListResourceBundle;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Concrete implementation of the
|
* Concrete implementation of the
|
||||||
@ -121,16 +120,10 @@ public class CurrencyNameProviderImpl extends CurrencyNameProvider
|
|||||||
throw new NullPointerException();
|
throw new NullPointerException();
|
||||||
}
|
}
|
||||||
|
|
||||||
OpenListResourceBundle bundle = LocaleProviderAdapter.forType(type).getLocaleData().getCurrencyNames(locale);
|
ResourceBundle bundle = LocaleProviderAdapter.forType(type).getLocaleData().getCurrencyNames(locale);
|
||||||
LocaleServiceProviderPool pool =
|
if (bundle.containsKey(key)) {
|
||||||
LocaleServiceProviderPool.getPool(CurrencyNameProvider.class);
|
|
||||||
try {
|
|
||||||
if (!pool.hasProviders() ||
|
|
||||||
(bundle.getLocale().equals(locale) &&
|
|
||||||
bundle.handleGetKeys().contains(key))) {
|
|
||||||
return bundle.getString(key);
|
return bundle.getString(key);
|
||||||
}
|
}
|
||||||
} catch (MissingResourceException mre) {}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -26,10 +26,9 @@
|
|||||||
package sun.util.locale.provider;
|
package sun.util.locale.provider;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.MissingResourceException;
|
import java.util.ResourceBundle;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.spi.LocaleNameProvider;
|
import java.util.spi.LocaleNameProvider;
|
||||||
import sun.util.resources.OpenListResourceBundle;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Concrete implementation of the
|
* Concrete implementation of the
|
||||||
@ -175,15 +174,10 @@ public class LocaleNameProviderImpl extends LocaleNameProvider implements Availa
|
|||||||
throw new NullPointerException();
|
throw new NullPointerException();
|
||||||
}
|
}
|
||||||
|
|
||||||
OpenListResourceBundle rb = LocaleProviderAdapter.forType(type).getLocaleData().getLocaleNames(locale);
|
ResourceBundle rb = LocaleProviderAdapter.forType(type).getLocaleData().getLocaleNames(locale);
|
||||||
LocaleServiceProviderPool pool =
|
if (rb.containsKey(key)) {
|
||||||
LocaleServiceProviderPool.getPool(LocaleNameProvider.class);
|
|
||||||
try {
|
|
||||||
if (!pool.hasProviders() ||
|
|
||||||
(rb.getLocale().equals(locale) && rb.handleGetKeys().contains(key))) {
|
|
||||||
return rb.getString(key);
|
return rb.getString(key);
|
||||||
}
|
}
|
||||||
} catch (MissingResourceException mre) {}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -302,7 +302,7 @@ public final class LocaleServiceProviderPool {
|
|||||||
|
|
||||||
for (LocaleProviderAdapter.Type type: findProviders(current)) {
|
for (LocaleProviderAdapter.Type type: findProviders(current)) {
|
||||||
LocaleServiceProvider lsp = providers.get(type);
|
LocaleServiceProvider lsp = providers.get(type);
|
||||||
providersObj = getter.getObject((P)lsp, current, key, params);
|
providersObj = getter.getObject((P)lsp, locale, key, params);
|
||||||
if (providersObj != null) {
|
if (providersObj != null) {
|
||||||
return providersObj;
|
return providersObj;
|
||||||
} else if (isObjectProvider) {
|
} else if (isObjectProvider) {
|
||||||
|
@ -26,11 +26,10 @@
|
|||||||
package sun.util.locale.provider;
|
package sun.util.locale.provider;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.MissingResourceException;
|
import java.util.ResourceBundle;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
import java.util.spi.TimeZoneNameProvider;
|
import java.util.spi.TimeZoneNameProvider;
|
||||||
import sun.util.resources.OpenListResourceBundle;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Concrete implementation of the
|
* Concrete implementation of the
|
||||||
@ -102,12 +101,8 @@ public class TimeZoneNameProviderImpl extends TimeZoneNameProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
LocaleProviderAdapter adapter = LocaleProviderAdapter.forType(type);
|
LocaleProviderAdapter adapter = LocaleProviderAdapter.forType(type);
|
||||||
OpenListResourceBundle rb = adapter.getLocaleResources(locale).getTimeZoneNames();
|
ResourceBundle rb = adapter.getLocaleResources(locale).getTimeZoneNames();
|
||||||
LocaleServiceProviderPool pool =
|
if (rb.containsKey(id)) {
|
||||||
LocaleServiceProviderPool.getPool(TimeZoneNameProvider.class);
|
|
||||||
try {
|
|
||||||
if (!pool.hasProviders() ||
|
|
||||||
(rb.getLocale().equals(locale) && rb.handleGetKeys().contains(id))) {
|
|
||||||
String[] names = rb.getStringArray(id);
|
String[] names = rb.getStringArray(id);
|
||||||
int index = daylight ? 3 : 1;
|
int index = daylight ? 3 : 1;
|
||||||
if (style == TimeZone.SHORT) {
|
if (style == TimeZone.SHORT) {
|
||||||
@ -115,8 +110,6 @@ public class TimeZoneNameProviderImpl extends TimeZoneNameProvider {
|
|||||||
}
|
}
|
||||||
return names[index];
|
return names[index];
|
||||||
}
|
}
|
||||||
} catch (MissingResourceException mre) {
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,10 @@ public class LocaleProviders {
|
|||||||
bug7198834Test();
|
bug7198834Test();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "tzNameTest":
|
||||||
|
tzNameTest(args[1]);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new RuntimeException("Test method '"+methodName+"' not found.");
|
throw new RuntimeException("Test method '"+methodName+"' not found.");
|
||||||
}
|
}
|
||||||
@ -81,4 +85,12 @@ public class LocaleProviders {
|
|||||||
System.out.println("Windows HOST locale adapter not found. Ignoring this test.");
|
System.out.println("Windows HOST locale adapter not found. Ignoring this test.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void tzNameTest(String id) {
|
||||||
|
TimeZone tz = TimeZone.getTimeZone(id);
|
||||||
|
String tzName = tz.getDisplayName(false, TimeZone.SHORT, Locale.US);
|
||||||
|
if (tzName.startsWith("GMT")) {
|
||||||
|
throw new RuntimeException("JRE's localized time zone name for "+id+" could not be retrieved. Returned name was: "+tzName);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
#
|
||||||
# @test
|
# @test
|
||||||
# @bug 6336885 7196799 7197573 7198834
|
# @bug 6336885 7196799 7197573 7198834 8000245 8000615
|
||||||
# @summary tests for "java.locale.providers" system property
|
# @summary tests for "java.locale.providers" system property
|
||||||
# @compile -XDignore.symbol.file LocaleProviders.java
|
# @compile -XDignore.symbol.file LocaleProviders.java
|
||||||
# @run shell/timeout=600 LocaleProviders.sh
|
# @run shell/timeout=600 LocaleProviders.sh
|
||||||
@ -65,6 +65,36 @@ case "$OS" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# create an SPI implementation
|
||||||
|
mk() {
|
||||||
|
d=`dirname $1`
|
||||||
|
if [ ! -d $d ]; then mkdir -p $d; fi
|
||||||
|
cat - >$1
|
||||||
|
}
|
||||||
|
|
||||||
|
SPIDIR=${TESTCLASSES}${FS}spi
|
||||||
|
rm -rf ${SPIDIR}
|
||||||
|
mk ${SPIDIR}${FS}src${FS}tznp.java << EOF
|
||||||
|
import java.util.spi.TimeZoneNameProvider;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
public class tznp extends TimeZoneNameProvider {
|
||||||
|
public String getDisplayName(String ID, boolean daylight, int style, Locale locale) {
|
||||||
|
return "tznp";
|
||||||
|
}
|
||||||
|
|
||||||
|
public Locale[] getAvailableLocales() {
|
||||||
|
Locale[] locales = {Locale.GERMAN, Locale.US, Locale.JAPANESE, Locale.CHINESE};
|
||||||
|
return locales;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
mk ${SPIDIR}${FS}dest${FS}META-INF${FS}services${FS}java.util.spi.TimeZoneNameProvider << EOF
|
||||||
|
tznp
|
||||||
|
EOF
|
||||||
|
${TESTJAVA}${FS}bin${FS}javac -d ${SPIDIR}${FS}dest ${SPIDIR}${FS}src${FS}tznp.java
|
||||||
|
${TESTJAVA}${FS}bin${FS}jar cvf ${SPIDIR}${FS}tznp.jar -C ${SPIDIR}${FS}dest .
|
||||||
|
|
||||||
# get the platform default locales
|
# get the platform default locales
|
||||||
PLATDEF=`${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} LocaleProviders getPlatformLocale display`
|
PLATDEF=`${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} LocaleProviders getPlatformLocale display`
|
||||||
DEFLANG=`echo ${PLATDEF} | sed -e "s/,.*//"`
|
DEFLANG=`echo ${PLATDEF} | sed -e "s/,.*//"`
|
||||||
@ -199,4 +229,20 @@ PARAM2=
|
|||||||
PARAM3=
|
PARAM3=
|
||||||
runTest
|
runTest
|
||||||
|
|
||||||
|
# testing 8000245 fix.
|
||||||
|
METHODNAME=tzNameTest
|
||||||
|
PREFLIST="JRE -Djava.ext.dirs=${SPIDIR}"
|
||||||
|
PARAM1=Europe/Moscow
|
||||||
|
PARAM2=
|
||||||
|
PARAM3=
|
||||||
|
runTest
|
||||||
|
|
||||||
|
# testing 8000615 fix.
|
||||||
|
METHODNAME=tzNameTest
|
||||||
|
PREFLIST="JRE -Djava.ext.dirs=${SPIDIR}"
|
||||||
|
PARAM1=America/Los_Angeles
|
||||||
|
PARAM2=
|
||||||
|
PARAM3=
|
||||||
|
runTest
|
||||||
|
|
||||||
exit $result
|
exit $result
|
||||||
|
@ -50,12 +50,13 @@ public class CurrencyNameProviderTest extends ProviderTest {
|
|||||||
com.bar.CurrencyNameProviderImpl cnp = new com.bar.CurrencyNameProviderImpl();
|
com.bar.CurrencyNameProviderImpl cnp = new com.bar.CurrencyNameProviderImpl();
|
||||||
Locale[] availloc = Locale.getAvailableLocales();
|
Locale[] availloc = Locale.getAvailableLocales();
|
||||||
Locale[] testloc = availloc.clone();
|
Locale[] testloc = availloc.clone();
|
||||||
|
List<Locale> jreimplloc = Arrays.asList(LocaleProviderAdapter.forJRE().getCurrencyNameProvider().getAvailableLocales());
|
||||||
List<Locale> providerloc = Arrays.asList(cnp.getAvailableLocales());
|
List<Locale> providerloc = Arrays.asList(cnp.getAvailableLocales());
|
||||||
|
|
||||||
for (Locale target: availloc) {
|
for (Locale target: availloc) {
|
||||||
// pure JRE implementation
|
// pure JRE implementation
|
||||||
OpenListResourceBundle rb = (OpenListResourceBundle)LocaleProviderAdapter.forJRE().getLocaleData().getCurrencyNames(target);
|
OpenListResourceBundle rb = (OpenListResourceBundle)LocaleProviderAdapter.forJRE().getLocaleData().getCurrencyNames(target);
|
||||||
boolean jreHasBundle = rb.getLocale().equals(target);
|
boolean jreSupportsTarget = jreimplloc.contains(target);
|
||||||
|
|
||||||
for (Locale test: testloc) {
|
for (Locale test: testloc) {
|
||||||
// get a Currency instance
|
// get a Currency instance
|
||||||
@ -82,27 +83,24 @@ public class CurrencyNameProviderTest extends ProviderTest {
|
|||||||
providersname = cnp.getDisplayName(c.getCurrencyCode(), target);
|
providersname = cnp.getDisplayName(c.getCurrencyCode(), target);
|
||||||
}
|
}
|
||||||
|
|
||||||
// JRE's name (if any)
|
// JRE's name
|
||||||
String jrescurrency = null;
|
String jrescurrency = null;
|
||||||
String jresname = null;
|
String jresname = null;
|
||||||
String key = c.getCurrencyCode();
|
String key = c.getCurrencyCode();
|
||||||
String nameKey = key.toLowerCase(Locale.ROOT);
|
String nameKey = key.toLowerCase(Locale.ROOT);
|
||||||
if (jreHasBundle) {
|
if (jreSupportsTarget) {
|
||||||
try {
|
try {
|
||||||
jrescurrency = rb.getString(key);
|
jrescurrency = rb.getString(key);
|
||||||
} catch (MissingResourceException mre) {
|
} catch (MissingResourceException mre) {}
|
||||||
// JRE does not have any resource, "jrescurrency" should remain null
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
jresname = rb.getString(nameKey);
|
jresname = rb.getString(nameKey);
|
||||||
} catch (MissingResourceException mre) {
|
} catch (MissingResourceException mre) {}
|
||||||
// JRE does not have any resource, "jresname" should remain null
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
checkValidity(target, jrescurrency, providerscurrency, currencyresult, jrescurrency!=null);
|
checkValidity(target, jrescurrency, providerscurrency, currencyresult,
|
||||||
|
jreSupportsTarget && jrescurrency != null);
|
||||||
checkValidity(target, jresname, providersname, nameresult,
|
checkValidity(target, jresname, providersname, nameresult,
|
||||||
jreHasBundle && rb.handleGetKeys().contains(nameKey));
|
jreSupportsTarget && jresname != null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,15 +36,21 @@ public class LocaleNameProviderTest extends ProviderTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
LocaleNameProviderTest() {
|
LocaleNameProviderTest() {
|
||||||
|
checkAvailLocValidityTest();
|
||||||
|
variantFallbackTest();
|
||||||
|
}
|
||||||
|
|
||||||
|
void checkAvailLocValidityTest() {
|
||||||
com.bar.LocaleNameProviderImpl lnp = new com.bar.LocaleNameProviderImpl();
|
com.bar.LocaleNameProviderImpl lnp = new com.bar.LocaleNameProviderImpl();
|
||||||
Locale[] availloc = Locale.getAvailableLocales();
|
Locale[] availloc = Locale.getAvailableLocales();
|
||||||
Locale[] testloc = availloc.clone();
|
Locale[] testloc = availloc.clone();
|
||||||
|
List<Locale> jreimplloc = Arrays.asList(LocaleProviderAdapter.forJRE().getLocaleNameProvider().getAvailableLocales());
|
||||||
List<Locale> providerloc = Arrays.asList(lnp.getAvailableLocales());
|
List<Locale> providerloc = Arrays.asList(lnp.getAvailableLocales());
|
||||||
|
|
||||||
for (Locale target: availloc) {
|
for (Locale target: availloc) {
|
||||||
// pure JRE implementation
|
// pure JRE implementation
|
||||||
OpenListResourceBundle rb = LocaleProviderAdapter.forJRE().getLocaleData().getLocaleNames(target);
|
OpenListResourceBundle rb = LocaleProviderAdapter.forJRE().getLocaleData().getLocaleNames(target);
|
||||||
boolean jreHasBundle = rb.getLocale().equals(target);
|
boolean jreSupportsTarget = jreimplloc.contains(target);
|
||||||
|
|
||||||
for (Locale test: testloc) {
|
for (Locale test: testloc) {
|
||||||
// codes
|
// codes
|
||||||
@ -67,7 +73,7 @@ public class LocaleNameProviderTest extends ProviderTest {
|
|||||||
providersvrnt = lnp.getDisplayVariant(vrnt, target);
|
providersvrnt = lnp.getDisplayVariant(vrnt, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
// JRE's name (if any)
|
// JRE's name
|
||||||
String jreslang = null;
|
String jreslang = null;
|
||||||
String jresctry = null;
|
String jresctry = null;
|
||||||
String jresvrnt = null;
|
String jresvrnt = null;
|
||||||
@ -84,18 +90,41 @@ public class LocaleNameProviderTest extends ProviderTest {
|
|||||||
if (!vrnt.equals("")) {
|
if (!vrnt.equals("")) {
|
||||||
try {
|
try {
|
||||||
jresvrnt = rb.getString("%%"+vrnt);
|
jresvrnt = rb.getString("%%"+vrnt);
|
||||||
} catch (MissingResourceException mre) {
|
} catch (MissingResourceException mre) {}
|
||||||
jresvrnt = vrnt;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
System.out.print("For key: "+lang+" ");
|
||||||
checkValidity(target, jreslang, providerslang, langresult,
|
checkValidity(target, jreslang, providerslang, langresult,
|
||||||
jreHasBundle && rb.handleGetKeys().contains(lang));
|
jreSupportsTarget && jreslang != null);
|
||||||
|
System.out.print("For key: "+ctry+" ");
|
||||||
checkValidity(target, jresctry, providersctry, ctryresult,
|
checkValidity(target, jresctry, providersctry, ctryresult,
|
||||||
jreHasBundle && rb.handleGetKeys().contains(ctry));
|
jreSupportsTarget && jresctry != null);
|
||||||
|
System.out.print("For key: "+vrnt+" ");
|
||||||
checkValidity(target, jresvrnt, providersvrnt, vrntresult,
|
checkValidity(target, jresvrnt, providersvrnt, vrntresult,
|
||||||
jreHasBundle && rb.handleGetKeys().contains("%%"+vrnt));
|
jreSupportsTarget && jresvrnt != null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void variantFallbackTest() {
|
||||||
|
Locale YY = new Locale("yy", "YY", "YYYY");
|
||||||
|
Locale YY_suffix = new Locale("yy", "YY", "YYYY_suffix");
|
||||||
|
String retVrnt = null;
|
||||||
|
String message = "variantFallbackTest() succeeded.";
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
YY.getDisplayVariant(YY_suffix);
|
||||||
|
message = "variantFallbackTest() failed. Either provider wasn't invoked, or invoked without suffix.";
|
||||||
|
} catch (RuntimeException re) {
|
||||||
|
retVrnt = re.getMessage();
|
||||||
|
if (YY_suffix.getVariant().equals(retVrnt)) {
|
||||||
|
System.out.println(message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
message = "variantFallbackTest() failed. Returned variant: "+retVrnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new RuntimeException(message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
#
|
||||||
# @test
|
# @test
|
||||||
# @bug 4052440
|
# @bug 4052440 8000273
|
||||||
# @summary LocaleNameProvider tests
|
# @summary LocaleNameProvider tests
|
||||||
# @run shell ExecTest.sh bar LocaleNameProviderTest true
|
# @run shell ExecTest.sh bar LocaleNameProviderTest true
|
||||||
|
@ -42,5 +42,7 @@ public class ProviderTest {
|
|||||||
"result do not match with provider's result. target: "+target+" result: "+result+" providers: "+providers);
|
"result do not match with provider's result. target: "+target+" result: "+result+" providers: "+providers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
System.out.println("checkValidity succeeded. target: "+target+" result: "+result+" jre's: "+jres+" providers: "+providers+" jre-preferred: "+jresPreferred);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,13 +45,14 @@ public class TimeZoneNameProviderTest extends ProviderTest {
|
|||||||
|
|
||||||
void test1() {
|
void test1() {
|
||||||
Locale[] available = Locale.getAvailableLocales();
|
Locale[] available = Locale.getAvailableLocales();
|
||||||
|
List<Locale> jreimplloc = Arrays.asList(LocaleProviderAdapter.forJRE().getTimeZoneNameProvider().getAvailableLocales());
|
||||||
List<Locale> providerLocales = Arrays.asList(tznp.getAvailableLocales());
|
List<Locale> providerLocales = Arrays.asList(tznp.getAvailableLocales());
|
||||||
String[] ids = TimeZone.getAvailableIDs();
|
String[] ids = TimeZone.getAvailableIDs();
|
||||||
|
|
||||||
for (Locale target: available) {
|
for (Locale target: available) {
|
||||||
// pure JRE implementation
|
// pure JRE implementation
|
||||||
OpenListResourceBundle rb = LocaleProviderAdapter.forJRE().getLocaleData().getTimeZoneNames(target);
|
OpenListResourceBundle rb = LocaleProviderAdapter.forJRE().getLocaleData().getTimeZoneNames(target);
|
||||||
boolean jreHasBundle = rb.getLocale().equals(target);
|
boolean jreSupportsTarget = jreimplloc.contains(target);
|
||||||
|
|
||||||
for (String id: ids) {
|
for (String id: ids) {
|
||||||
// the time zone
|
// the time zone
|
||||||
@ -59,7 +60,7 @@ public class TimeZoneNameProviderTest extends ProviderTest {
|
|||||||
|
|
||||||
// JRE string array for the id
|
// JRE string array for the id
|
||||||
String[] jrearray = null;
|
String[] jrearray = null;
|
||||||
if (jreHasBundle) {
|
if (jreSupportsTarget) {
|
||||||
try {
|
try {
|
||||||
jrearray = rb.getStringArray(id);
|
jrearray = rb.getStringArray(id);
|
||||||
} catch (MissingResourceException mre) {}
|
} catch (MissingResourceException mre) {}
|
||||||
@ -75,14 +76,14 @@ public class TimeZoneNameProviderTest extends ProviderTest {
|
|||||||
providersname = tznp.getDisplayName(id, i>=3, i%2, target);
|
providersname = tznp.getDisplayName(id, i>=3, i%2, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
// JRE's name (if any)
|
// JRE's name
|
||||||
String jresname = null;
|
String jresname = null;
|
||||||
if (jrearray != null) {
|
if (jrearray != null) {
|
||||||
jresname = jrearray[i];
|
jresname = jrearray[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
checkValidity(target, jresname, providersname, name,
|
checkValidity(target, jresname, providersname, name,
|
||||||
jreHasBundle && rb.handleGetKeys().contains(id));
|
jreSupportsTarget && jresname != null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,57 +37,64 @@ public class LocaleNameProviderImpl extends LocaleNameProvider {
|
|||||||
Locale.JAPAN,
|
Locale.JAPAN,
|
||||||
new Locale("ja", "JP", "osaka"),
|
new Locale("ja", "JP", "osaka"),
|
||||||
new Locale("ja", "JP", "kyoto"),
|
new Locale("ja", "JP", "kyoto"),
|
||||||
new Locale("xx")};
|
new Locale("xx"),
|
||||||
|
new Locale("yy", "YY", "YYYY")};
|
||||||
static List<Locale> availList = Arrays.asList(avail);
|
static List<Locale> availList = Arrays.asList(avail);
|
||||||
public Locale[] getAvailableLocales() {
|
public Locale[] getAvailableLocales() {
|
||||||
return avail;
|
return avail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getDisplayLanguage(String lang, Locale target) {
|
public String getDisplayLanguage(String lang, Locale target) {
|
||||||
|
return getDisplayString(lang, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDisplayCountry(String ctry, Locale target) {
|
||||||
|
return getDisplayString(ctry, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDisplayVariant(String vrnt, Locale target) {
|
||||||
|
return getDisplayString(vrnt, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getDisplayString(String key, Locale target) {
|
||||||
if (!Utils.supportsLocale(availList, target)) {
|
if (!Utils.supportsLocale(availList, target)) {
|
||||||
throw new IllegalArgumentException("locale is not supported: "+target);
|
throw new IllegalArgumentException("locale is not supported: "+target);
|
||||||
}
|
}
|
||||||
|
|
||||||
String ret = null;
|
String ret = null;
|
||||||
|
|
||||||
|
if (target.getLanguage().equals("yy") &&
|
||||||
|
target.getCountry().equals("YY")) {
|
||||||
|
String vrnt = target.getVariant();
|
||||||
|
if (vrnt.startsWith("YYYY")) {
|
||||||
|
switch (key) {
|
||||||
|
case "yy":
|
||||||
|
case "YY":
|
||||||
|
ret = "waiwai";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "YYYY":
|
||||||
|
if (vrnt.equals("YYYY_suffix")) {
|
||||||
|
// for LocaleNameProviderTest.variantFallbackTest()
|
||||||
|
throw new RuntimeException(vrnt);
|
||||||
|
} else {
|
||||||
|
ret = "waiwai";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// resource bundle based (allows fallback)
|
||||||
try {
|
try {
|
||||||
ResourceBundle rb = ResourceBundle.getBundle("com.bar.LocaleNames", target);
|
ResourceBundle rb = ResourceBundle.getBundle("com.bar.LocaleNames", target);
|
||||||
ret = rb.getString(lang);
|
ret = rb.getString(key);
|
||||||
} catch (MissingResourceException mre) {
|
} catch (MissingResourceException mre) {
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDisplayCountry(String ctry, Locale target) {
|
|
||||||
if (!Utils.supportsLocale(availList, target)) {
|
|
||||||
throw new IllegalArgumentException("locale is not supported: "+target);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String ret = null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
ResourceBundle rb = ResourceBundle.getBundle("LocaleNames", target);
|
|
||||||
ret = rb.getString(ctry);
|
|
||||||
} catch (MissingResourceException mre) {
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDisplayVariant(String vrnt, Locale target) {
|
|
||||||
if (!Utils.supportsLocale(availList, target)) {
|
|
||||||
throw new IllegalArgumentException("locale is not supported: "+target);
|
|
||||||
}
|
|
||||||
|
|
||||||
String ret = null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
ResourceBundle rb = ResourceBundle.getBundle("LocaleNames", target);
|
|
||||||
ret = rb.getString(vrnt);
|
|
||||||
} catch (MissingResourceException mre) {
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user