在java中获取OS语言

时间:2012-06-02 13:01:21

标签: java internationalization resourcebundle

我在这里遇到了一个问题。

我是法国人,正在使用英文版的Windows XP。因此,我将区域选项设置为法语,但仍然具有英语UI。

我正在开发一个小型Java SE应用程序,并决定使用资源包将其国际化。

要显示正确的语言,我使用此功能创建包:

private static ResourceBundle bundle = ResourceBundle
          .getBundle("locale.Strings", Locale.getDefault());

但是Locale.getDefault()函数返回区域设置(意思是:法语),而不是系统UI语言。因此,我的UI在英语环境中默认为法语。好吧,那不是我所期待的......

有谁知道恢复系统UI语言的平台无关方式? 提前谢谢!

修改:修复本地到语言环境,谢谢。

3 个答案:

答案 0 :(得分:7)

这是Windows中的错误配置。 Locale#getDefault()返回系统区域设置,而不是日期/时间格式化区域或位置。

在下面的Windows XP特定屏幕截图中,您可以将区域选项语言设置为法语或任何您喜欢的内容。 Advanced 菜单中的下拉列表实际上设置了系统区域设置,在您的情况下应该设置为英语。

enter image description here

不可否认,这在Windows XP中解释不足,Windows 7做得更好一些:

enter image description here

答案 1 :(得分:3)

我无法尝试(因为我倾向于避免微软制造的任何东西),但请看看这些:

需要Java 7:

Locale uiLocale = Locale.getDefault(Locale.Category.DISPLAY);

无论如何,这应该用于获取翻译(从Java 7开始)。

如果这不是很有帮助,我会尝试:

System.out.println(System.getenv("LC_MESSAGES"));       
System.out.println(System.getenv("LANG"));
System.out.println(System.getenv("LANGUAGE"));

但是,在这种情况下,我希望与默认的Locale有一些相似之处......

答案 2 :(得分:0)

由于你的建议,我尝试了一些事情,这是我的观察:

  • 如果您使用的是Java 6而不是Java 7,则可以使用它。
  • 如果您使用的是Java 7,您应该按照BalusC的说法进行操作:更改区域和语言设置中的设置。之后,Locale.getDefault()将默认返回显示语言,如果您将其设置为英语,则表示英语。要确保它,您可以通过调用Locale.getDefault(Locale.Category.DISPLAY)
  • 来创建语言环境。