【问题标题】:Django is printing month name in english even when LANGUAGE_CODE is 'es-CO'即使 LANGUAGE_CODE 是“es-CO”,Django 也会用英文打印月份名称
【发布时间】:2014-09-02 14:45:39
【问题描述】:

我有一个 Django 项目,我试图在带有 date 模板标签的模板中呈现月份名称。

在我的settings.py 我有以下内容,因为这个应用程序在哥伦比亚运行(应该是西班牙语)

LANGUAGE_CODE = 'es-CO'
USE_L10N = True

在模板中,我尝试以这种方式格式化日期:

{{ car.expiration_date|date:'F' }}

根据文档,F 返回月份的全名,这是真的,但它是英文而不是西班牙文。

我有其他 Django 项目在这些设置下正常工作,但我找不到原因,因为这个不是。

【问题讨论】:

  • 不确定es-CO 是一个有效的语言环境。尝试使用es。选中此项可直接从源代码中查看语言环境列表:github.com/django/django/tree/master/django/conf/locale
  • es-CO 是根据 Django 文档共享此链接的有效语言环境i18nguy.com/unicode/language-identifiers.html
  • 那不是 Django 文档。这是指定整体有效语言环境的 RCF,但不是特定于 Django 的语言环境。我上面评论的意思是,Django 没有针对您的特定语言环境的翻译,只有我发布的链接中的翻译。尝试使用 es 语言环境(或最接近您想要的语言环境),它可能会起作用。
  • 啊,好的@EduardLuca,我只用es 进行了测试,但不适用于这个特定的模板。
  • 那我没主意了,抱歉 :)

标签: python django django-templates


【解决方案1】:

如果您没有其他方法为此特定模板设置语言代码,您可以尝试通过切换到正确的语言来呈现电子邮件模板中的日期:

{% load i18n %}

{% language 'es-co' %} {{ car.expiration_date|date:'F' }} {% endlanguage %}

documentation

【讨论】:

    【解决方案2】:

    你试过了吗:

    • 重启服务器
    • pip freeze 检查 Django 版本 => 仔细检查没有变化
      • 也许是 USE_I18N // USE_L10N
    • 在您的代码中搜索 LANGUAGE_CODE 以防万一

    这在某处的视图中或在 Django shell 中只是为了确定:

    from django.conf import settings
    print settings.LANGUAGE_CODE
    print settings. …
    

    【讨论】:

    • 我已经尝试了您发送的内容,但令我惊讶的是,在此应用程序的主页中,我发送到模板的日期时间对象正在以西班牙语打印。我比以前更困惑了。
    • 什么?你试过什么?你的意思是它只在主页上工作?
    • 我正在我的主页视图中打印settings.LANGUAGE_CODE 进行测试,正如预期的那样,它是es-CO。我遇到问题的模板是一封电子邮件,我正在使用 render_to_string 函数来呈现电子邮件正文 html。
    • 您的问题中缺少这一点! render_to_string(…, context_instance = RequestContext(request))
    • 是的!你是对的!即使我在写那条评论,我也只是考虑过。但是发送邮件的方法是 Model 方法,无法访问请求对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    相关资源
    最近更新 更多