首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用L10N和Django在模板中对数字进行L10N定位

使用L10N和Django在模板中对数字进行L10N定位
EN

Stack Overflow用户
提问于 2015-02-20 20:13:25
回答 2查看 1.1K关注 0票数 2

我试图让Jinja2 (和Django,通过django-jinja)本地化一个数字,例如。123456变成123,456 (当然,根据地区而定,也就是123.456 )。我已经阅读了所有我能找到的关于这个主题的文档,却找不到任何真正有用的东西。使用标准DTL,只需:

代码语言:javascript
复制
{% localize on %}{{ some_number }}{% endlocalize %}

这在我使用普通Django模板的项目中运行得很好,但当然在Jinja2中不起作用。我提到这很好,因为任何涉及settings.py的东西,比如USE_L10NFalse,都可以排除。

我尝试了以下方法,所有这些都是基于我发现的文档:

  • {{ gettext("%(num)d", num=some_number) }} -输出没有逗号或本地化的数字。
  • {% trans num=some_number %}{{ num }} {% endtrans %} --按照django-jinja文档的建议--输出没有逗号或本地化的数字。
  • {{ _(some_number|string) }} -输出没有逗号或本地化的数字。
  • {{ some_number|localize }} - localize不是有效的过滤器.

那么,如何使用Jinja2轻松和正确地本地化一个数字呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-20 20:31:17

弄明白了。Jinja2似乎没有单独处理本地化问题,但是django-jinja包含了一个内置的控制机制,它封装了django.contrib.humanize.templatetags。根据这方面的文件,如果启用了|intcomma过滤器,则使用L10n筛选器来尊重格式本地化。

要使用它,请将django_jinja.contrib._humanize添加到settings.py中的INSTALLED_APPS

代码语言:javascript
复制
INSTALLED_APPS += ('django_jinja.contrib._humanize',)

然后在模板中,只需使用|intcomma过滤器:

代码语言:javascript
复制
{{ some_number|intcomma }}
票数 1
EN

Stack Overflow用户

发布于 2019-02-12 06:03:28

虽然这是一个老问题,但我遇到了同样的问题,我发现这个解决方案是可行的,不需要很多编辑。这里是为jinja2模板实现L10n的库。您可以将其与您的应用程序集成,如

代码语言:javascript
复制
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',
            ]
        },
    },
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28637423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档