默认语言环境和数字格式

时间:2013-02-03 23:24:35

标签: java localization

您好我正在努力格式化数字,比如NumberFormat.getInstance()的文档说。 (Windows 7,NetBeans,Java 7)

我首先进入区域设置并删除了我们英语,我们英语键盘和一切。我把这一切都归功于法国和法国。我甚至重新启动了我的电脑。我的代码是:

System.setProperty("user.language", "fr");
System.setProperty("user.country", "FR");
System.setProperty("user.language.display", "fr");
System.setProperty("user.country.display", "FR");
System.setProperty("user.language.format", "fr");
System.setProperty("user.country.format", "FR");
Locale locale = new Locale("French", "France");
Locale.setDefault(locale);
Locale.setDefault(Locale.Category.DISPLAY, locale);
Locale.setDefault(Locale.Category.FORMAT, locale);
java.text.NumberFormat nf = java.text.NumberFormat.getInstance();
System.out.println(nf.format(4.5));

尽管如此,该程序仍然打印“4.5”。我不明白,对于法国法国来说这应该是“4,5”。我还需要做什么?

3 个答案:

答案 0 :(得分:3)

这是问题所在:

Locale locale = new Locale("French", "France");

应该是:

Locale locale = new Locale("fr", "FR");

或者只使用Locale.FRENCH

此外,您无需设置任何属性或更改默认语言环境。只需获取您感兴趣的语言区域NumberFormat即可。

答案 1 :(得分:2)

比那更容易......

    Locale locale = Locale.FRENCH;

将使用法语区域设置初始化变量,

    java.text.NumberFormat nf = java.text.NumberFormat.getInstance(locale);

将为您提供该区域设置的NumberFormat。

编辑:当你使用NetBeans时,有两个提示可以避免将来出现这种麻烦:

键入

    Locale locale = new Locale(

后面是ctrl-space NetBeans将弹出一个可能的语句完成列表,每个替代方案都会显示一个显示JavaDoc的小窗口。

或者,当光标在Locale时,当您按Alt-F1或右键单击Show JavaDoc时,NetBeans将显示带有JavaDoc的浏览器窗口。

Java的库已有详细记录,只需一次击键即可获得文档,这是一个真正的节省时间。

答案 2 :(得分:0)

这是一个非常老的问题,但是我想报告一下,我刚刚发现在OSX的JVM实现中似乎有一个错误(仅Mac的错误)。

这是一小段显示问题的代码:

public static void main(String[] args) {
    DecimalFormatSymbols d = DecimalFormatSymbols.getInstance(Locale.getDefault(Locale.Category.FORMAT));

    System.out.println(System.getProperty("user.language.format"));
    System.out.println(System.getProperty("user.language"));
    System.out.println(d.getDecimalSeparator());
    System.out.println(d.getGroupingSeparator());

    Locale l = Locale.getDefault();
    System.out.println("Language: "+l.getLanguage());
    System.out.println("Country: "+l.getCountry());
    System.out.println("Variant: "+l.getVariant());
    System.out.println("Tag: "+l.toLanguageTag());
    Currency c = Currency.getInstance(l);
    System.out.println("Code: "+c.getCurrencyCode());
    NumberFormat nc = DecimalFormat.getCurrencyInstance();
    NumberFormat ni = DecimalFormat.getNumberInstance();

}

在我的情况下,输出为:

en
es
.
,
Language: es
Country: ES
Variant: 
Tag: es-ES
Code: EUR

在我的操作系统中,我设置了es_ES,但由于存在错误。 JVM系统属性user.language.format未正确初始化,这是造成一些麻烦的原因。