如何在Python中检测操作系统默认语言?

39 投票
3 回答
31863 浏览
提问于 2025-04-16 02:26

有没有一种通用的方法可以检测操作系统的默认语言?(不管运行代码的是哪个操作系统)

import os
os.getenv('LANG')

上面的代码在Linux系统下可以运行,那在其他操作系统上也能用吗?

3 个回答

-5

最好使用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

52

请注意,你不能仅仅依靠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
34

你可以使用 locale 模块中的 getdefaultlocale 函数。这个函数会返回系统默认语言和编码的代码,结果是一个元组:

>>> import locale
>>> locale.getdefaultlocale()
('en_GB', 'cp1252')

撰写回答