4

我不确定这是否是寻求此错误帮助的好地方。不知何故,我的 Debian Linux 系统上似乎没有语言环境。基本上,当我尝试运行的 python 程序执行该行时,我意识到了这一点locale.setlocale(locale.LC_ALL, 'en_US')。我得到错误:

回溯(最后一次调用):
文件“”,第 1 行,在
文件“runserver.py”中,第 4 行,在
site = TarbellSite(os.path.dirname(os.path.abspath( file )))
文件中“/ home/brian/.virtualenvs/tarbell/src/flask-tarbell/tarbell/app.py”,第 36 行,在init
self.projects = self.load_projects()
文件中“/home/brian/.virtualenvs/tarbell/src/ flask-tarbell/tarbell/app.py",第 59 行,在 load_projects
项目 = imp.load_module(name, filename, pathname, description)
File "/home/brian/Code/contrib/tarbell/base/config.py",第 28 行,在
locale.setlocale(locale.LC_ALL, 'en_US')
文件“/home/brian/.virtualenvs/tarbell/lib/python2.7/locale.py”,第 547 行,在 setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting

但是,像这样研究关于 SO 的相关现存问题,告诉我 run locale -a,这会产生:

C
C.UTF-8
en_US.utf8
POSIX

因此,在我系统的语言环境中,看起来像是美国英语。我究竟做错了什么?我遇到了其他各种障碍。sudo apt-get install language-pack-en根据互联网上的很多地方获取英语语言包。但是 apt 抱怨这个包不存在。我如何获得这个该死的语言环境?

4

3 回答 3

6

尝试添加“utf8”位;

import locale
locale.getlocale()
>>> (None, None)
locale.setlocale(locale.LC_ALL, 'en_US.utf8')
>>> 'en_US.utf8'
locale.getlocale()
>>> ('en_US', 'UTF-8')
于 2013-08-20T02:17:56.863 回答
0

这是一个更有说服力的答案:

import platform
import locale
system = platform.system() ##<-- to get the platform you are using.
if (system == 'Darwin'): ##<-- Darwin has Different naming
    locale.setlocale(locale.LC_ALL, 'EN_US') ##<-- Default us english on Darwin
else: ##<-- if system isn't Darwin 
    locale.setlocale(locale.LC_ALL,'') ##<-- this works for Windows and Debian
## operations like locale.currency ect......

此代码允许多平台开发,此帖子中显示的错误是区域设置不正确。这个答案允许至少 3 个不同的平台仅使用标准模块正确设置语言环境。

于 2018-03-06T22:55:08.963 回答
0

这是对我有用的解决方案:

我正在使用带有 OS X 10.11.6 (15G19009) Python 版本 3.5.2 的 iMac

我试过了:

locale.setlocale(locale.LC_ALL,'') <-- this line worked fine on windows 7

MAC 的解决方案是像这样指定英语:

locale.setlocale(locale.LC_ALL,'EN_US') <-- this line produced the desired results

这两行必须是操作系统独立的。经过进一步测试,这是一个跨平台解决方案,您可以通过简单地调用 platform.platform 并进行必要的更改来使其适应任何平台。

import locale
import platform
if (platform.platform(aliased = 0, terse = 0)=='Darwin-15.6.0-x86_64-i386-64bit'):
    locale.setlocale( locale.LC_ALL, 'EN_US' )
else:
    locale.setlocale(locale.LC_ALL,'')
于 2018-03-06T14:25:23.967 回答