如何在Python中检测操作系统默认语言?
有没有一种通用的方法可以检测操作系统的默认语言?(不管运行代码的是哪个操作系统)
import os
os.getenv('LANG')
上面的代码在Linux系统下可以运行,那在其他操作系统上也能用吗?
3 个回答
最好使用Windows命令行...
import os
current_locale = os.popen('systeminfo | findstr /B /C:"System Locale"').read()
可以查看这个链接了解更多信息: https://www.tenforums.com/tutorials/132175-see-current-system-locale-windows-10-a.html
请注意,你不能仅仅依靠locale模块来判断操作系统的语言!!!
如果有人在没有验证的情况下使用了这些信息,他们的程序可能会在全球范围内出现问题,尤其是那些操作系统语言和地区语言不一致的用户。
这两者是不同的,(1)操作系统语言和(2)本地化信息。
根据MSDN的说法,“区域标识符反映了特定地理区域的当地习俗和语言。”,http://msdn.microsoft.com/en-us/library/8w60z792.aspx
而Python文档中提到,
“POSIX区域机制允许程序员在应用程序中处理某些文化问题,而不需要程序员了解软件执行所在国家的所有细节。” https://docs.python.org/2/library/locale.html
比如,我的Windows 7是英文的,但我住在西班牙,所以我的区域设置是'es_ES',而不是'en_EN'。
我不知道跨平台的解决方案,对于Linux你可以找到。对于Windows,我可以给你一些建议:
另一个帖子提到使用win32的GetSystemDefaultUILanguage, 找出Windows安装时的语言。
但是如果你想获取Windows的语言标识符,我建议使用GetUserDefaultUILanguage(),因为根据MSDN的说明,它会递归查找直到找到语言:
“返回当前用户的用户界面语言的语言标识符。如果当前用户没有设置语言,GetUserDefaultUILanguage将返回系统设置的首选语言。如果系统没有设置首选语言,则返回系统默认的用户界面语言(也称为“安装语言”)。有关用户界面语言的更多信息,请参见用户界面语言管理。”
代码:
>>> import locale
>>> locale.getdefaultlocale()
('es_ES', 'cp1252') # <------------- Bad! I'm on english OS.
>>> import ctypes
>>> windll = ctypes.windll.kernel32
>>> windll.GetUserDefaultUILanguage()
1033
>>> locale.windows_locale[ windll.GetUserDefaultUILanguage() ]
'en_US' # <----------- Good work
你可以使用 locale
模块中的 getdefaultlocale
函数。这个函数会返回系统默认语言和编码的代码,结果是一个元组:
>>> import locale
>>> locale.getdefaultlocale()
('en_GB', 'cp1252')