我不习惯考虑i18n的东西。我为Java程序编写了这个方法:
boolean isWindows()
{
return System.getProperty("os.name").toLowerCase().contains("windows");
}
我需要此检查才能为特定于Windows的JVM错误提供解决方法。
在我看来,这个程序可能需要在没有英语作为所选语言的系统上运行,是否会导致这行代码中断?
也许我应该澄清一下,我问这个希望能看到人们可以挖掘的证据(所以我觉得把这个代码放到野外会更好)。带有文档,实验证据或某种支持理由的链接的答案会得到偏好。
答案 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")
都是安全的。