2012-05-13 59 views
1

有没有办法获得正在运行的操作系统的语言?我希望能够在开始时更改程序的语言。操作系统的语言?

+0

如果您想遵循国际化的最佳实践,您不应该在应用程序启动时更改***语言,您应该在应用程序启动时选择***用户的***语言。正如你从下面的答案中看到的,在LUA中没有这样做的标准多平台。更糟糕的是,操作系统本机功能和操作系统在Windows上的LCID存在差异。***不是你想要的,你正在寻找用户LCID(相信我,它可能会有所不同)。 –

+0

是的,谢谢。我会让用户选择他最喜欢的语言,这是最好的解决方案。感谢你们所有人! – user1248569

+0

不,这是最糟糕的解决方案。想象一下,系统中的所有应用程序都会这样做 - 它们基本上会迫使您始终选择语言(甚至在第一次启动时)。我不了解你,但在我的情况下,你会在这种情况下听到很多字母。操作系统具有区域首选项设置是有原因的 - 所以您可以选择一次您的首选项。就LUA而言,我很确定有人写了一些很好的脚本来检测语言,只是Google它。 –

回答

0

也许

 print(os.setlocale(nil)); 

可以给你所需要的信息,虽然你可能需要分析它一下。或者你可以访问正确的env var,例如

print(os.getenv("LANG")); 

给en_GB.utf8我的系统上,这样你就可以推断出我的系统“谈判”的英语。

+0

感谢您的回答,但当我使用os.getenv进行尝试时,我得到了“无”。有没有其他办法可以解决这个问题? – user1248569

+0

envar没有设置,但在“* nix”系统上(它也可以在windows上,但是如果你看到零,它不是!);如果你在windows上,你可以尝试系统特定的方式,比如挖掘寄存器或者使用一些API(GetUserDefaultLangID应该做的);那么你的程序当然是不可移植的。我不知道lua是否有“win32”模块 – ShinTakezou

1

这是平台特定的,超出了Lua标准库的处理范围。在一些的情况下,你可能能够从getenv或其他东西中找到它,但你不能以跨平台的方式依赖它。

你可以写一个小的扩展模块,你移植到你需要支持,让你为特定的操作系统信息的各种平台。