如何在 Django 翻译中翻译数字?

How to translate numbers in django translation?

我的脑袋无法点击如何翻译 django translation 中的数字。 string id 无法翻译。我可以像这样打印 2020

{% translate '2' %}{% translate '0' %}{% translate '2' %}{% translate '0' %}

很明显,这不是方法。所以,我错过了一些东西。我想要这样的东西:

{% translate "2020"|number %} # May be ?? It should be that easy right?

应该是,从0翻译成9

Django(目前)还没有这个功能,但您可以通过创建自定义模板标签来实现同样的功能。您可以在此处阅读创建标签的完整文档,Custom template tags and filters

通过这种方式,您可以将Arabic Numerals(或任何形式)翻译成任何形式,您只需要一个mapper dict 和一个使用 mapper dict.

转换事物的函数

我们需要一个以源数字为键、目标数字为值的字典。在这种情况下,我假设您需要从 Arabic numerals to nepali numerals

翻译

因此,我使用 dict 创建了一个 简单 映射器,并使用 translate_nepal_numeral(...)[ 将接收值转换为其他值=40=]函数。

from django import template
from django.template.defaultfilters import stringfilter

NUMBER_MAP = {
    "0": "०",
    "1": "१",
    "2": "२",
    # and so on

}

register = template.Library()


@register.filter()
@stringfilter
def translate_nepal_numeral(value):
    try:
        return "".join([NUMBER_MAP[char] for char in value])
    except KeyError:
        return value

然后在您的模板中,

{% load custom_numerals %}

{{ "2010"|translate_nepal_numeral }}

例子

In [3]: translate_nepal_numeral("2020")
Out[3]: '२०२०'

In [4]: translate_nepal_numeral("2120")
Out[4]: '२१२०'

In [5]: translate_nepal_numeral("2120a")
Out[5]: '2120a'

备注

  1. 如果您要传递 non-numeral,此函数将 return 输入