是否有任何通用的方法来检测操作系统默认语言? (无论运行代码的操作系统是什么)
import os
os.getenv('LANG')
以上代码在Linux下运行,是否可以在其他操作系统下运行?
答案 0 :(得分:23)
您可以使用getdefaultlocale
function in the locale
module。它返回元组中的系统默认语言环境的语言代码和编码:
>>> import locale
>>> locale.getdefaultlocale()
('en_GB', 'cp1252')
答案 1 :(得分:23)
请您不能相信语言环境模块检测操作系统语言 !!!
在未经过验证的情况下使用此信息的人,如果用户的操作系统语言与区域语言不同,则会有一个程序在世界范围内失败。
它们不同,(1)操作系统语言和(2)本地化信息。
MSDN声明“区域设置ID反映了特定地理区域的本地惯例和语言。”,http://msdn.microsoft.com/en-us/library/8w60z792.aspx
和python docs,
“POSIX语言环境机制允许程序员处理应用程序中的某些文化问题,而无需程序员知道执行软件的每个国家/地区的所有细节。” https://docs.python.org/2/library/locale.html
我的Windows7是英文的。但我住在西班牙......所以我的地方是'es_ES'..不是'en_EN'
我不知道跨平台的方式,对于linux你已经有了它。对于Windows我会给你:
另一篇文章谈到使用win32 GetSystemDefaultUILanguage ,Find out the language windows was installed as。
但是如果你想获得windows语言标识符,我建议使用 GetUserDefaultUILanguage(),因为如MSDN所述,将递归搜索直到达到语言:
“返回当前用户的用户UI语言的语言标识符。如果当前用户尚未设置语言,则GetUserDefaultUILanguage返回系统的首选语言集。如果没有为系统设置首选语言,则返回系统默认UI语言(也称为“安装语言”)。有关用户UI语言的更多信息,请参阅用户界面语言管理。“
代码:
>>> 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
答案 2 :(得分:-1)
最好使用 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