在语言环境中获取货币符号

时间:2018-09-23 18:58:45

标签: python locale

如何在python中使用语言环境获取给定货币alpha-3代码名称的对应货币符号?

我在做:

import locale, re
def get_currency_symbol(alpha_3='USD'):
    locales_all = locale.locale_alias.values()
    for l in locales_all:
        try:
            try:
                locale.setlocale(locale.LC_ALL, l)
            except NameError:
                l = re.sub('\..*$','.utf8',l) # On Linux the file are normally
                                              # finished with '.utf8'.
                locale.setlocale(locale.LC_ALL, l)

            conv=locale.localeconv()
            if conv['int_curr_symbol'] == alpha_3.upper():
                return conv['currency_symbol']
        except:
            pass
    return None

但是我在使用语言环境名称时遇到了问题:

  

locale.Error:不支持的语言环境设置

2 个答案:

答案 0 :(得分:0)

setlocale()的文档说,如果给定语言环境参数,则它应该是语言环境的名称或包含别名的两个部分的可迭代。 因此,请将获取语言环境的行更改为:

locales_all = locale.locale_alias.keys()

或将其设置为以下行:

locale.setlocale(locale.LC_ALL, l.split('_'))

(但是当然不要同时做这两者:))

第一种方法更好,第二种可能需要进一步完善才能与所有区域设置别名一起使用。

documentation

中的更多信息

答案 1 :(得分:0)

您可以使用

locale.setlocale()

然后致电localeconv

In [10]: locale.localeconv()
Out[10]:
{'currency_symbol': '$',
 'decimal_point': '.',
 'frac_digits': 2,
 'grouping': [3, 3, 0],
 'int_curr_symbol': 'USD ',
 'int_frac_digits': 2,
 'mon_decimal_point': '.',
 'mon_grouping': [3, 3, 0],
 'mon_thousands_sep': ',',
 'n_cs_precedes': 1,
 'n_sep_by_space': 0,
 'n_sign_posn': 1,
 'negative_sign': '-',
 'p_cs_precedes': 1,
 'p_sep_by_space': 0,
 'p_sign_posn': 1,
 'positive_sign': '',
 'thousands_sep': ','}