Как локализовать только номера? - PullRequest
0 голосов
/ 01 августа 2020

У меня есть приложение Django со всеми текстами и элементами управления на английском sh, но мне нужно отображать числа в правильном локальном формате; т.е. использование соответствующих символов для десятичных знаков и разделения тысяч. Все остальное, включая даты, я хотел бы сохранить в формате Engli sh.

С USE_L10N = True и USE_I18N = True , все числа и даты будут форматируется в соответствии с языком, установленным в заголовках HTTP.

С USE_L10N = True и USE_I18N = False форматируются только числа, но язык, установленный в заголовках HTTP, является игнорируется; т.е. числа отформатированы согласно settings.LANGUAGE_CODE. Похоже, это сделано намеренно: django / utils / translation / trans_null.py

Мне, должно быть, чего-то не хватает. Как лучше всего локализовать только номера? Спасибо.

1 Ответ

0 голосов
/ 03 августа 2020

Из-за отсутствия лучшего решения я создал следующий фильтр:

from django.conf import settings
from django import template
from django.utils import numberformat
from django.utils.formats import get_format

register = template.Library()

@register.filter()
    def localnumber(value, lang=None):
        lang = lang or settings.LANGUAGE_CODE
        return numberformat.format(
            value,
            get_format("DECIMAL_SEPARATOR", lang, use_l10n=True),
            None,
            get_format("NUMBER_GROUPING", lang, use_l10n=True),
            get_format("THOUSAND_SEPARATOR", lang, use_l10n=True),
            force_grouping=True,
            use_l10n=True,
        )

В моем шаблоне я использую фильтр следующим образом:

{% with lang=request.META.HTTP_ACCEPT_LANGUAGE %}

<span>{{ my_var_with_raw_number|localnumber:lang }}</span>

{% endwith %}

Не идеально, но это может кому-то помочь в качестве временного решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...