如何在Windows中更改python中的语言环境?

时间:2017-08-31 17:33:31

标签: python windows python-2.7 locale setlocale

我想将整数格式的格式化为格式正确的货币。示例10000到或₹10,000

所以,我在python中使用以下命令

import locale
locale.setlocale(locale.LC_MONETARY, 'en_US')
or
locale.setlocale(locale.LC_MONETARY, 'en_IN')
print str(locale.currency(10000, grouping=True))

当我在不同笔记本电脑的ubuntu中使用python中的上述命令时,它们工作得很好。但是,在Windows上,它们无法正常工作。

它给我的错误如下

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\locale.py", line 581, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

如何解决此错误?

我正在使用Windows 10.我打开cmd并键入&#34; python&#34;输入。 python shell提供以下版本。在那里我输入上面的命令。

Python 2.7 (r27:82525, Jul  4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32

注意: - 我尝试将locale.py文件从ubuntu系统中的python目录复制到Windows目录,即&#34; C:\ Python27 \ Lib&#34;但它仍无法正常工作。

3 个答案:

答案 0 :(得分:2)

您可以查看pycountry库,以获得Windows和Linux语言代码之间的映射:

>>> pycountry.languages.lookup('fr')
Language(alpha_2=u'fr', alpha_3=u'fra', bibliographic=u'fre', name=u'French', scope=u'I', type=u'L')
>>> pycountry.languages.lookup('french')
Language(alpha_2=u'fr', alpha_3=u'fra', bibliographic=u'fre', name=u'French', scope=u'I', type=u'L')
>>> pycountry.languages.lookup('chinese')
Language(alpha_2=u'zh', alpha_3=u'zho', bibliographic=u'chi', name=u'Chinese', scope=u'M', type=u'L')
>>> pycountry.languages.lookup('chinese-traditional')
Traceback (most recent call last):
  ...
LookupError: Could not find a record for 'chinese-traditional'

然后你可以这样做:

import os
import locale
import pycountry

lang = "en_IN"  # your code
language = pycountry.languages.lookup(lang)
if os.name == "posix":
    locale.setlocale(locale.LC_MONETARY, language.alpha_2)
else:
    locale.setlocale(locale.LC_MONETARY, language.name)

修改

要格式化货币值,您可以考虑使用Babel,例如:

>>> babel.numbers.format_currency(10000, 'INR', locale='en_IN')
u'\u20b9\xa010,000.00'

>>> print(babel.numbers.format_currency(10000, 'INR', locale='en_IN'))
₹ 10,000.00

答案 1 :(得分:1)

对于Python 3.6.4,我在Windows 10上执行了以下操作

import locale
locale.setlocale(locale.LC_ALL,'enn')
>>'English_India.1252'
locale.currency(10000000.32,grouping=True,symbol=True)
>>'? 1,00,00,000.32'
locale.currency(10000000.32,grouping=True,symbol=True).replace('?','₹')
>>'₹ 1,00,00,000.32'

答案 2 :(得分:0)

对于Windows,您需要设置locale.setlocale(locale.LC_ALL, '<language string>') https://msdn.microsoft.com/en-us/library/39cwe7zf(vs.71).aspx(已弃用) https://msdn.microsoft.com/en-us/library/39cwe7zf(v=vs.140).aspx(已更新)。