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

ban*_*anx 21 python

是否有任何通用方法来检测操作系统默认语言?(无论运行代码的操作系统是什么)

import os
os.getenv('LANG')
Run Code Online (Sandbox Code Playgroud)

以上代码在Linux下运行,是否可以在其他操作系统下运行?

Dav*_*ebb 27

您可以使用模块中getdefaultlocale功能locale.它返回元组中系统默认语言环境的语言代码和编码:

>>> import locale
>>> locale.getdefaultlocale()
('en_GB', 'cp1252')
Run Code Online (Sandbox Code Playgroud)

  • 我从未接触过我的语言环境环境变量(例如“LC_ALL”)。它被设置为空字符串,因此当运行 `locale.getdefaultlocale()` 时,我得到了令人印象深刻的元组:`(None, 'UTF-8')`。被警告。 (3认同)
  • 看起来它已被弃用:“<stdin>:1:DeprecationWarning:使用 setlocale()、getencoding() 和 getlocale() 代替” (3认同)
  • @bank - 是的,我相信是这样。在 Windows 上工作,文档描述了它在 POSIX 环境中的工作方式,所以你应该没问题。 (2认同)
  • 奇怪的是它对我不起作用。始终返回 en_US,即使在德语版本的 Windows 上也是如此 (2认同)
  • ***此功能反映您当前位置的区域设置*** (2认同)

小智 25

你不能相信locale模块检测OS语言!

无论何时使用此信息而未经过验证的人,都会有一个程序在世界范围内失败,而那些用户的操作系统语言与区域语言不同.

它们是不同的,(1)OS语言和(2)本地化信息.

MSDN声明"区域设置ID反映了特定地理区域的本地约定和语言.",http://msdn.microsoft.com/en-us/library/8w60z792.aspx

和python文档,

"POSIX语言环境机制允许程序员处理应用程序中的某些文化问题,而无需程序员知道执行软件的每个国家/地区的所有细节." https://docs.python.org/2/library/locale.html

我的Windows7是英文的.但是我住在西班牙......所以我的地方是'es_ES'..不是'en_EN'

我不知道跨平台的方式,对于Linux你已经有了它.对于Windows我会给你:

另一篇文章谈到使用win32 GetSystemDefaultUILanguage,找出安装的语言窗口为.

但是如果你想获得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
Run Code Online (Sandbox Code Playgroud)

  • 更好的答案:) (2认同)