Python语言环境错误:不支持的语言环境设置

为什么在python中这样做会导致下面的错误:

>>> import locale >>> print str( locale.getlocale() ) (None, None) >>> locale.setlocale(locale.LC_ALL, 'de_DE') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/locale.py", line 531, in setlocale return _setlocale(category, locale) locale.Error: unsupported locale setting 

这也适用于其他语言环境如fr或nl。 我使用Ubuntu 11.04。

更新:做以下没有产生任何东西:

 dpkg-reconfigure locales perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_CTYPE = "UTF-8", LANG = (unset) are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory 

运行以下命令

 export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8" sudo dpkg-reconfigure locales 

这将解决这个问题。 (我无法解决与其他解决scheme的问题,这对我来说很有用)

您可能没有任何可用的de_DE语言环境。

您可以使用locale -a命令查看可用语言环境的列表。 例如,在我的机器上:

 $ locale -a C C.UTF-8 en_AG en_AG.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IN en_IN.utf8 en_NG en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 en_ZA.utf8 en_ZM en_ZM.utf8 en_ZW.utf8 it_CH.utf8 it_IT.utf8 POSIX 

请注意,如果要将语言环境设置为it_IT还必须指定.utf8

 >>> import locale >>> locale.setlocale(locale.LC_ALL, 'it_IT') # error! Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/locale.py", line 539, in setlocale return _setlocale(category, locale) locale.Error: unsupported locale setting >>> locale.setlocale(locale.LC_ALL, 'it_IT.utf8') 'it_IT.utf8' 

要安装新的语言环境,请使用:

 sudo apt-get install language-pack-id 

其中id是语言代码(取自这里 )

安装完语言环境之后,您应该遵循Julien Palard的build议,并重新configuration语言环境:

 sudo dpkg-reconfigure locales 

由于这个链接 ,它通过input这个命令来解决:

导出LC_ALL = C

更长久的解决scheme是填充缺less的值,在命令: locale显示的输出中

locale输出是:

  $ locale LANG=en_US.utf8 LANGUAGE= LC_CTYPE="en_US.utf8" LC_NUMERIC=es_ES.utf8 LC_TIME=es_ES.utf8 LC_COLLATE="en_US.utf8" LC_MONETARY=es_ES.utf8 LC_MESSAGES="en_US.utf8" LC_PAPER=es_ES.utf8 LC_NAME="en_US.utf8" LC_ADDRESS="en_US.utf8" LC_TELEPHONE="en_US.utf8" LC_MEASUREMENT=es_ES.utf8 LC_IDENTIFICATION="en_US.utf8" LC_ALL= 

填写缺失值编辑〜/ .bashrc:

  $ vim ~/.bashrc 

在上面的命令后添加下面几行(假设你想让en_US.UTF-8成为你的语言):

 export LANGUAGE="en_US.UTF-8" export LC_ALL="en_US.UTF-8" 

如果这个文件是ReadOnly,你将需要按照GeekyBoy提到的步骤。 Beco博士在超级用户给出的答案中有关于保存只读文件的详细信息。

保存文件后做:

 $ source ~/.bashrc 

现在你不会再面临同样的问题了。

上面的答案之一提供了解决scheme:

 export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8" sudo dpkg-reconfigure locales 

上面的解决scheme的问题是它必须在Linuxshell上完成。 但是,如果您提供的代码在客户机上工作,那么这是一个糟糕的做法。 我也尝试使用os.system()执行上述命令,但仍然无法正常工作。

解决scheme,为我工作是

 locale.setlocale(locale.LC_ALL,'en_US.UTF-8') 

如果您在Debian(或Debian分支)上,则可以使用以下方法添加区域设置:

 dpkg-reconfigure locales 

在Arch Linux上,我可以通过运行sudo locale-gen来解决这个问题

为了logging,我有同样的问题,但没有解决scheme的工作。 我升级了我的电脑并迁移了我的电脑。 我有一个混合的语言环境英语和西class牙语:

 $ locale LANG=en_US.utf8 LANGUAGE= LC_CTYPE="en_US.utf8" LC_NUMERIC=es_ES.utf8 LC_TIME=es_ES.utf8 LC_COLLATE="en_US.utf8" LC_MONETARY=es_ES.utf8 LC_MESSAGES="en_US.utf8" LC_PAPER=es_ES.utf8 LC_NAME="en_US.utf8" LC_ADDRESS="en_US.utf8" LC_TELEPHONE="en_US.utf8" LC_MEASUREMENT=es_ES.utf8 LC_IDENTIFICATION="en_US.utf8" LC_ALL= 

但是,在我的新的Debian安装,我只是select英语作为语言环境。 最后的工作是重新configurationlocales包来添加和生成西class牙语。

 $ grep -v "#" /etc/locale.gen en_US.UTF-8 UTF-8 es_ES.UTF-8 UTF-8 
  • 运行此命令locale以获取使用的语言环境。 如:

LANG =的en_US.UTF-8
LANGUAGE = EN_US:恩
LC_CTYPE = zh_CN.UTF-8
LC_NUMERIC = “的en_US.UTF-8”
LC_TIME = “的en_US.UTF-8”
LC_COLLATE = “的en_US.UTF-8”
LC_MONETARY = “的en_US.UTF-8”
LC_MESSAGES = “的en_US.UTF-8”
LC_PAPER = “的en_US.UTF-8”
LC_NAME = “的en_US.UTF-8”
LC_ADDRESS = “的en_US.UTF-8”
LC_TELEPHONE = “的en_US.UTF-8”
LC_MEASUREMENT = “的en_US.UTF-8”
LC_IDENTIFICATION = “的en_US.UTF-8”
LC_ALL =

  • /etc/locale-gen文件的第一步中search列出的语言环境列表。 取消对使用的评论
  • 运行locale-gen生成新添加的语言环境

如果您刚刚添加了新的区域设置,则会发生此错误。 您需要重新启动python交互式shell( quit( )和python )才能访问它。

在试图让python 吐出特定语言环境中的名字时,我在这里login了同样的问题。

在追求答案时,我发现事情有点神秘。

我发现,Python代码。

 import locale print locale.getdefaultlocale() >> ('en_DK', 'UTF-8') 

确实locale.setlocale(locale.LC_TIME, 'en_DK.UTF-8')作品

在这里使用技巧,我进一步testing,看看什么是可用的Python代码

 import locale loc_list = [(a,b) for a,b in locale.locale_alias.items() ] loc_size = len(loc_list) print loc_size,'entries' for loc in loc_list: try: locale.setlocale(locale.LC_TIME, loc[1]) print 'SUCCES set {:12} ({})'.format(loc[1],loc[0]) except: pass 

这产生了

 858 entries SUCCES set en_US.UTF-8 (univ) SUCCES set C (c.ascii) SUCCES set C (c.en) SUCCES set C (posix-utf2) SUCCES set C (c) SUCCES set C (c_c) SUCCES set C (c_c.c) SUCCES set en_IE.UTF-8 (en_ie.utf8@euro) SUCCES set en_US.UTF-8 (universal.utf8@ucs4) SUCCES set C (posix) SUCCES set C (english_united-states.437) SUCCES set en_US.UTF-8 (universal) 

其中只有以上是工作! 但是en_DK.UTF-8不在这个列表中,尽pipe它起作用了! 什么?? 而蟒生成的区域列表确实包含大量的组合,我正在寻找的DA和DK,但又没有UTF-8的DA / DK …

我在一个Linux的发行版(基于Debian的),这里的locale说,除了其他LC_TIME="en_DK.UTF-8" ,这是我知道的作品,但不是我需要的语言环境。

locale -a

 C C.UTF-8 en_DK.utf8 en_US.utf8 POSIX 

所以肯定需要安装其他语言环境 ,我通过编辑/etc/locale.gen ,取消注释所需的行da_DK.UTF-8 UTF-8并运行命令locale-gen

现在locale.setlocale(locale.LC_TIME, 'da_DK.UTF-8')也可以工作,我可以得到我的本地化date和月份名称。

我的意见:

Python:locale.locale_alias在find可用的语言环境方面并不是很有用!

Linux:获取本地化列表并安装新的区域设置非常简单。 有很多的帮助可用。

Windows:我一直在调查一下,但没有结论。 虽然有post可以find答案,但是我并没有感受到追求它的冲动。

在我看来,在python {,3}中设置本地语言环境的最简单的方法是:

 >>> import locale >>> locale.setlocale(locale.LC_ALL, '') 'de_DE.UTF-8' 

然后,如果你在一个体面的Linux发行版,并且应该在其他操作系统的二进制发行版上工作(或者这是一个错误,恕我直言),locale意识到的东西就可以工作。

 >>> import datetime as dt >>> print(dt.date.today().strftime("%A %d. %B %Y")) Sonntag 11. Dezember 2016