【问题标题】:How to localize numbers only?如何仅本地化数字?
【发布时间】:2020-07-31 22:57:46
【问题描述】:

我有一个包含所有英文文本和控件的 Django 应用程序,但我需要以正确的本地格式显示数字;即使用适当的符号表示小数点和千位分隔符。其他所有内容,包括日期,我都希望保留为英文格式。

使用 USE_L10N=True 和 USE_I18N=True,所有数字和日期都会根据 HTTP 标头中设置的语言进行格式化。

使用 USE_L10N=True 和 USE_I18N=False,只有数字被格式化,但 HTTP 标头中设置的语言被忽略;即数字根据 settings.LANGUAGE_CODE 格式化。这似乎是设计使然:django/utils/translation/trans_null.py

我一定错过了什么。仅本地化数字的最佳做法是什么?谢谢。

【问题讨论】:

    标签: django


    【解决方案1】:

    由于缺乏更好的解决方案,我创建了以下过滤器:

    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 %}
    

    不理想,但作为临时解决方案可能对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 2012-06-18
      • 2011-01-05
      • 1970-01-01
      相关资源
      最近更新 更多