Django trans模板标签仅显示占位符常量字符串

时间:2019-12-29 09:58:43

标签: python django django-templates internationalization django-i18n

我在templates/home.html中有以下标签:

{% trans "test" %}

无论选择哪种语言,始终打印“测试”。我知道语言会发生变化,因为我这样打印(并且管理员的语言也发生了变化,等等):

{% get_current_language as LANGUAGE_CODE %}
{{ LANGUAGE_CODE }}

在项目的settings.py中,我有:

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

# modeltranslation settings


LANGUAGES = (
    ('en', _('English')),
    ('zh-hans', _('Simplified Chinese')),
    ('zh-hant', _('Traditional Chinese')),
)

LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale')
]

我想尝试翻译成简体中文,所以我用python3 manage.py makemessages -l zh-hans创建了翻译对象,并在locale/zh-hans/LC_MESSAGES/django.po中填充了test的值,如下所示:

#: templates/home.html:8
msgid "test"
msgstr "你好"

然后我运行python3 manage.py compilemessages

templates/_base.html继承的templates/home.html中,我有

{% load static %}
{% load static i18n %}
{% load i18n %}

templates/home.html中,我有

{% extends '_base.html' %}
{% load i18n %}

尽管如此,当我将语言更改为zh-hans时,它始终显示test。怎么了?

我正在使用Django 3.0.1。

编辑:在settings.py中,我已从gettext切换为gettext_lazy,如评论所建议的那样_

1 个答案:

答案 0 :(得分:0)

语言环境文件夹的名称必须为zh_Hans,而不是zh-hans。那就是我不看源代码而得到的! 4