#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. О!!! Хорошо, это имеет смысл. Я дам вам знать после того, как смогу применить его в своей системе.
2. Хорошо. Он работает, но
customtags
не принимает запрос правильно? Итак, я должен проверить текущий язык и только сделать перевод. Для этого я должен передать другой аргумент в качестве текущего кода из шаблона. Есть ли что-нибудь, что мы можем сделать??3. Я думаю, что это сработает, но я не думаю, что это все еще лучший способ. Давайте посмотрим, что скажут другие люди.
4. «Я не думаю, что это все еще лучший способ» , что, по вашему мнению , идеально в этой ситуации?
5. Кстати, в самом документе говорится, что «Если вы пишете фильтр шаблона, который ожидает только строку в качестве первого аргумента, вам следует использовать декоратор
stringfilter
. Это преобразует объект в его строковое значение перед передачей вашей функции »