独立Java应用程序和Web应用程序上的不同语言环境模式

时间:2014-05-12 15:27:54

标签: java servlets locale decimalformat

当作为独立的Java应用程序和Web应用程序(Servlet)尝试时,为什么下面的代码会有不同的输出?

代码:

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

作为WEB应用程序(Servlet)

#,##0.###
Norwegian Bokmål
1,234.567

Java Version : JDK.1.6.0_23 Web Server : Jetty enclosed in Eclipse Juno


修改

以下是@haraldK

建议的一些调查结果

是否可以获得标准Java实现而非提供程序实现提供的NumberFormat?

以下是内部调用私有方法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;
        }
    }
    ...
}

0 个答案:

没有答案