Другой шаблон локали в автономном приложении Java и веб-приложении
Почему при использовании в качестве отдельного Java-приложения и веб-приложения (сервлета) используются разные выходные данные для приведенного ниже кода?
Код:
Locale locale=new java.util.Locale("nb");// locale for Norwegian, Bokmal (Norway)
DecimalFormat decimalFormatter=(DecimalFormat) DecimalFormat.getInstance(locale);
System.out.println(decimalFormatter.toLocalizedPattern());
System.out.println(locale.getDisplayLanguage());
System.out.println(decimalFormatter.format(1234.567));
Выходы:
автономное приложение JAVA:
# ##0,###
Norwegian Bokmål
1 234,567
как веб-приложение (сервлет)
#,##0.###
Norwegian Bokmål
1,234.567
Java Version : JDK.1.6.0_23
Web Server : Jetty enclosed in Eclipse Juno
РЕДАКТИРОВАТЬ
Вот некоторые выводы, предложенные @haraldK
Можно ли получить NumberFormat, как это предусмотрено стандартной реализацией Java, а не реализацией провайдера?
Вот исходный код NumberFormat.getInstance(Locale), который внутренне вызывает закрытый метод NumberFormat.getInstance(Locale,int), как показано ниже:
private static NumberFormat getInstance(Locale desiredLocale,
int choice) {
// Check whether a provider can provide an implementation that's closer
// to the requested locale than what the Java runtime itself can provide.
LocaleServiceProviderPool pool =
LocaleServiceProviderPool.getPool(NumberFormatProvider.class);
if (pool.hasProviders()) {
NumberFormat providersInstance = pool.getLocalizedObject(
NumberFormatGetter.INSTANCE,
desiredLocale,
choice);
if (providersInstance != null) {
return providersInstance;
}
}
...
}