java.lang.System.properties的内容是否随语言环境而变化?

时间:2011-07-20 20:15:31

标签: java localization internationalization

我不习惯考虑i18n的东西。我为Java程序编写了这个方法:

boolean isWindows()
{
    return System.getProperty("os.name").toLowerCase().contains("windows");
}

我需要此检查才能为特定于Windows的JVM错误提供解决方法。

在我看来,这个程序可能需要在没有英语作为所选语言的系统上运行,是否会导致这行代码中断?

也许我应该澄清一下,我问这个希望能看到人们可以挖掘的证据(所以我觉得把这个代码放到野外会更好)。带有文档,实验证据或某种支持理由的链接的答案会得到偏好。

3 个答案:

答案 0 :(得分:3)

让我直截了当地说,你想知道OS名称(由os.name属性返回)是否可以国际化并包含其他语言的 windows 这个词?

我会说,99%它不会因为 Microsoft Windows 是商标(或其他什么, IANAL )并且可能没有被翻译并保留原样。但是,我looked up在Apache Commons Lang SystemUtils类中定义了IS_OS_WINDOWS属性。删除所有间接层后,所有这些都归结为:

System.getProperty("os.name").startsWith("Windows");

我并不是说这是一个证据,但我倾向于相信这些完善的图书馆。

答案 1 :(得分:1)

正如Tomasz和Edward所说,“os.name”可以安全地检查“startWith”,但回答“java.lang.System.properties的内容是否随语言环境而变化?”,您必须注意到,System.getProperties的某些属性可能会随区域设置而变化。使用不同的Linux LANG打印属性,我发现三个属性发生了变化:“user.country”,“user.language”和“sun.jnu.encoding”。

答案 2 :(得分:0)

无论语言环境如何,

System.getProperty("os.name").startsWith("Windows")都是安全的。