是否有任何通用方法来检测操作系统默认语言?(无论运行代码的操作系统是什么)
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)
小智 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)
| 归档时间: |
|
| 查看次数: |
14534 次 |
| 最近记录: |