使用 Jinja2 和 Django 对模板中的数字进行 L10N 本地化
L10N localization of numbers in templates using Jinja2 and Django
我正在尝试让 Jinja2(和 Django,通过 django-jinja
)本地化一个数字,例如。 123456
变为 123,456
(或者,当然,123.456,具体取决于语言环境)。我已经阅读了有关该主题的所有文档,但找不到任何实际有效的文档。使用标准 DTL,可以这样做:
{% localize on %}{{ some_number }}{% endlocalize %}
这在我使用常规 Django 模板的项目中运行良好,但当然在 Jinja2 中不起作用。我提到这很好用,因为任何涉及 settings.py
的事情都可以排除,例如 USE_L10N
是 False
。
我已经尝试了以下方法,所有这些都是基于我找到的文档:
{{ gettext("%(num)d", num=some_number) }}
- 输出没有逗号或本地化的数字。
{% trans num=some_number %}{{ num }} {% endtrans %}
- 按照 django-jinja documentation 的建议 - 输出没有逗号或本地化的数字。
{{ _(some_number|string) }}
- 输出没有逗号或本地化的数字。
{{ some_number|localize }}
- localize
不是有效的过滤器。
那么,如何使用 Jinja2 轻松且正确地本地化数字?
想通了。 Jinja2 似乎不自己处理本地化,但 django-jinja
包含一个包装 django.contrib.humanize.templatetags
的内置贡献。根据 the documentation for that,如果启用 L10n,则使用 |intcomma
过滤器遵守格式本地化。
要使用它,请将 django_jinja.contrib._humanize
添加到 settings.py
中的 INSTALLED_APPS
:
INSTALLED_APPS += ('django_jinja.contrib._humanize',)
然后在模板中,只需使用 |intcomma
过滤器:
{{ some_number|intcomma }}
虽然这是一个老问题,但我遇到了同样的问题,发现这个解决方案无需大量编辑即可实现。
Here 是为 jinja2 模板实现 L10n 的库。您可以将它与您的应用程序集成,例如
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'extensions': [
'jdj_tags.extensions.DjangoStatic',
'jdj_tags.extensions.DjangoI18n',
'jdj_tags.extensions.DjangoL10n',
]
},
},
}
我正在尝试让 Jinja2(和 Django,通过 django-jinja
)本地化一个数字,例如。 123456
变为 123,456
(或者,当然,123.456,具体取决于语言环境)。我已经阅读了有关该主题的所有文档,但找不到任何实际有效的文档。使用标准 DTL,可以这样做:
{% localize on %}{{ some_number }}{% endlocalize %}
这在我使用常规 Django 模板的项目中运行良好,但当然在 Jinja2 中不起作用。我提到这很好用,因为任何涉及 settings.py
的事情都可以排除,例如 USE_L10N
是 False
。
我已经尝试了以下方法,所有这些都是基于我找到的文档:
{{ gettext("%(num)d", num=some_number) }}
- 输出没有逗号或本地化的数字。{% trans num=some_number %}{{ num }} {% endtrans %}
- 按照 django-jinja documentation 的建议 - 输出没有逗号或本地化的数字。{{ _(some_number|string) }}
- 输出没有逗号或本地化的数字。{{ some_number|localize }}
-localize
不是有效的过滤器。
那么,如何使用 Jinja2 轻松且正确地本地化数字?
想通了。 Jinja2 似乎不自己处理本地化,但 django-jinja
包含一个包装 django.contrib.humanize.templatetags
的内置贡献。根据 the documentation for that,如果启用 L10n,则使用 |intcomma
过滤器遵守格式本地化。
要使用它,请将 django_jinja.contrib._humanize
添加到 settings.py
中的 INSTALLED_APPS
:
INSTALLED_APPS += ('django_jinja.contrib._humanize',)
然后在模板中,只需使用 |intcomma
过滤器:
{{ some_number|intcomma }}
虽然这是一个老问题,但我遇到了同样的问题,发现这个解决方案无需大量编辑即可实现。 Here 是为 jinja2 模板实现 L10n 的库。您可以将它与您的应用程序集成,例如
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'extensions': [
'jdj_tags.extensions.DjangoStatic',
'jdj_tags.extensions.DjangoI18n',
'jdj_tags.extensions.DjangoL10n',
]
},
},
}