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

Django trans template tag only displaying placeholder constant string

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

{% trans "test" %}

无论我选择哪种语言,它总是打印 "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/home.html继承的templates/_base.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 作为 _

语言环境文件夹的名称必须是 zh_Hans 而不是 zh-hans。这就是我不看源代码得到的结果! https://github.com/django/django/tree/master/django/contrib/auth/locale