Как перевести числа в переводе django?

#django #django-templates #translation

#django #django-шаблоны #перевод

Вопрос:

Моя голова не могла щелкнуть, как перевести числа 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 .

Комментарии:

1. в чем смысл перевода числа ?

2. @ArakkalAbu Хорошо… 1 на английском языке на моем языке. Итак, я хочу перевести язык в основном.

Ответ №1:

В Django нет такой функциональности (пока), но вы можете добиться того же, создав пользовательский тег шаблона. Вы можете прочитать всю документацию по созданию тега здесь, пользовательские теги шаблонов и фильтры.

Таким образом, вы можете переводить арабские цифры (или что угодно) в любую форму, все, что вам нужно, это dict mapper и функция, которая преобразует вещи с помощью dict mapper .

Нам нужно иметь dict, который имеет исходные цифры в качестве ключей и целевое число в качестве значений. В этом случае, я полагаю, вам нужно перевести с арабских цифр на непальские цифры

Итак, я создал простой картограф, используя dict и преобразовал получаемое значение во что-то другое, используя translate_nepal_numeral(...) функцию.

 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. Если вы передаете не числовое значение, эта функция вернет входные данные

Комментарии:

1. О!!! Хорошо, это имеет смысл. Я дам вам знать после того, как смогу применить его в своей системе.

2. Хорошо. Он работает, но customtags не принимает запрос правильно? Итак, я должен проверить текущий язык и только сделать перевод. Для этого я должен передать другой аргумент в качестве текущего кода из шаблона. Есть ли что-нибудь, что мы можем сделать??

3. Я думаю, что это сработает, но я не думаю, что это все еще лучший способ. Давайте посмотрим, что скажут другие люди.

4. «Я не думаю, что это все еще лучший способ» , что, по вашему мнению , идеально в этой ситуации?

5. Кстати, в самом документе говорится, что «Если вы пишете фильтр шаблона, который ожидает только строку в качестве первого аргумента, вам следует использовать декоратор stringfilter . Это преобразует объект в его строковое значение перед передачей вашей функции »