Django 2.2 翻译不适用,LANGUAGE_CODE 和 i18n URL 模式正确

Django 2.2 translations not applying, LANGUAGE_CODE and i18n URL pattern correct

我正在使用 Django 2.2 和 Python 3.7。

我正在尝试设置 Django 翻译,在看到翻译之前一切似乎都正常。

我使用的是 i18n urls,所以 url 显示为

localhost/language-locale

示例:

localhost/en-us/
localhost/fr-fr/

url 模式:

urlpatterns += i18n_patterns(
    path('jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'),
    path('i18n/', include('django.conf.urls.i18n')),
    ...

settings_l10_i18.py:

LANGUAGE_CODE = 'en-us'
LANGUAGES = [
    ('en-us', _('US English')),
    ('en-gb', _('British English')),
    ('en-ca', _('Canadian English')),
    ('fr-fr', _('French')),
    ('fr-ca', _('Canadian French')),
]

TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = False

USE_THOUSAND_SEPARATOR = True


LOCALE_PATH = [
    os.path.join(BASE_DIR, "locale"),
]

文件结构basedir/locale


├── en_CA
│   └── LC_MESSAGES
│       ├── django.mo
│       └── django.po
├── en_GB
│   └── LC_MESSAGES
│       ├── django.mo
│       └── django.po
├── en_US
│   └── LC_MESSAGES
│       ├── django.mo
│       └── django.po
├── fr_CA
│   └── LC_MESSAGES
│       ├── django.mo
│       └── django.po
├── fr_FR
│   └── LC_MESSAGES
│       ├── django.mo
│       └── django.po
└── README.md

模板中的语言切换器:

<li>
        <form action="{% url 'set_language' %}" method="post">
            {% csrf_token %}
            <input name="next" type="hidden" value="{{ redirect_to }}"/>
            <select name="language" value="" onchange="this.form.submit()">
                {% get_current_language as LANGUAGE_CODE %}
                {% get_available_languages as LANGUAGES %}
                {% for lang in LANGUAGES %}
                    <option value="{{ lang.0 }}" {% if lang.0 == LANGUAGE_CODE %} selected="selected"{% endif %}>
                        {{ lang.1 }} ({{ lang.0 }})
                    </option>
                {% endfor %}
            </select>
        </form>
    </li>

中间件:

MIDDLEWARE =  [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
     ...
]

none 个 .po 个文件有 fuzzy

我在需要翻译的所有内容上使用 ugettext_lazy{% trans 'string' %},并且 .po 文件正在收集所有内容

在 运行 django-admin compilemessages

之后的 .mo 文件中确实显示了翻译

我也试过重新启动 django 服务器和 PC。

LANGUAGE_CODErequest.LANGUAGE_CODE 显示为 en-gb 或我在 select 上的 select 或者如果我查看调试器中的变量.

url 也更改为 localhost/en-gb 或其他任何我 select

真的不确定还能尝试什么,感谢任何帮助。

搞定,只用了4个小时:

LOCALE_PATH = [
    os.path.join(BASE_DIR, "locale"),
]

应该是

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