Skip to main content
 首页 » 编程设计

python之OSX 上的 locale.getlocale() 问题

2025年05月04日17arxive

我需要获取系统语言环境来做很多事情,最终我想使用 gettext 翻译我的应用程序。我打算在 Linux 和 OSX 上分发它,但我在 OSX Snow Leopard 上遇到了问题:

$ python 
Python 2.5.2 (r252:60911, Jan  4 2009, 17:40:26)  
[GCC 4.3.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import locale 
>>> locale.setlocale(locale.LC_ALL, '') 
'sv_SE.UTF-8' 
>>> locale.getlocale() 
('sv_SE', 'UTF8') 
 
$ python 
Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51)  
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import locale 
>>> locale.setlocale(locale.LC_ALL, '') 
'C' 
>>> locale.getlocale() 
(None, None) 

两个系统都使用瑞典语。在 Linux 上,环境变量 LANG 已经设置为“sv_SE.UTF-8”。如果我将该变量传递给 OSX 上的 python(改为 LANG="sv_SE.UTF-8"python),则会很好地检测到语言环境。但是 locale.getlocale() 不应该能够获取操作系统的任何语言吗?我根本不想强制用户设置 LANG、LC_ALL 或任何环境变量。

locale 命令的输出:

$ locale 
LANG= 
LC_COLLATE="C" 
LC_CTYPE="C" 
LC_MESSAGES="C" 
LC_MONETARY="C" 
LC_NUMERIC="C" 
LC_TIME="C" 
LC_ALL= 

请您参考如下方法:

Odd on OSX (Smow Leopard 10.6.1) 我明白了

$ python 
Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51)  
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 
Type "help", "copyright", "credits" or "license" for more information.   
>>> import locale 
>>> locale.getlocale() 
(None, None) 
>>> locale.setlocale(locale.LC_ALL, '') 
'en_GB.UTF-8' 
>>> locale.getlocale() 
('en_GB', 'UTF8') 

编辑:

我刚在 apple python mailing list 上找到这个

基本上这取决于运行时环境中的设置(LANG、LANGUAGE、LC_ALL 之一)我的 shell 环境中有 LANG=en_GB.UTF-8