【问题标题】:Django-jinja jinja2 templates i18n not translatingDjango-jinja jinja2 模板 i18n 未翻译
【发布时间】:2016-07-26 11:55:19
【问题描述】:

我的 Django 项目有问题,我使用 Jinja2 作为模板引擎;特别是使用 django-jinja “提供不显眼的 Jinja2 支持” :(。 我的问题是模板中的字符串没有翻译。 Django 识别正确的语言,也可以使用 /i18n/setlang 视图来设置。

奇怪的是 Python 中定义的字符串被翻译了:

# in settings/base.py
from django.utils.translation import ugettext_lazy as _

LANGUAGES = (
    ('en', _('English')),
    ('de', _('German')),
)

LANGUAGE_CODE = "en"
TIME_ZONE = "UTC"
USE_I18N = True
USE_L10N = True

我有一个位于locale/de/LC_MESSAGES/django.podjango.po 和对应的django.mo

#: PyLatein/settings/base.py:144
msgid "English"
msgstr "Englisch"

#: PyLatein/settings/base.py:145
msgid "German"
msgstr "Deutsch"

#: templates/about.jinja:9
msgid "About"
msgstr "Über"

在我渲染的模板中,使用了正确的语言(LANGUAGE_CODE 是正确的)并且

if the language is en, then I can choose between "English" and "German",
if the language is de, then I can choose between "Englisch" and "Deutsch"!

-> 所以这些都被正确翻译了,但About 仍然是About 而不是Über,尽管我在模板中使用了about.jinja

<h1 class="page-header">{{ _('About') }}</h1>

我的中间件是:

MIDDLEWARE_CLASSES = (
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.locale.LocaleMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.auth.middleware.SessionAuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
    "django.middleware.security.SecurityMiddleware",
)

而我的模板定义是:

TEMPLATES = [
    {
        "BACKEND": "django_jinja.backend.Jinja2",
        "DIRS": [osp.join(BASE_DIR, "templates")],
        "APP_DIRS": True,
        "OPTIONS": {
            "match_extension": ".jinja",
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
                "django.template.context_processors.i18n",
            ],
            "extensions": [
                "jinja2.ext.do",
                "jinja2.ext.loopcontrols",
                "jinja2.ext.with_",
                "jinja2.ext.i18n",
                "jinja2.ext.autoescape",
                "django_jinja.builtins.extensions.CsrfExtension",
                "django_jinja.builtins.extensions.CacheExtension",
                "django_jinja.builtins.extensions.TimezoneExtension",
                "django_jinja.builtins.extensions.UrlsExtension",
                "django_jinja.builtins.extensions.StaticFilesExtension",
                "django_jinja.builtins.extensions.DjangoFiltersExtension",
            ],
            "constants": {
                "settings": settings,
            },
            "translation_engine": "django.utils.translation",
        }
    },
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]

我使用 Python 3、Django 1.9.8 和 django-jinja 2.2.0

【问题讨论】:

    标签: django python-3.x templates internationalization jinja2


    【解决方案1】:

    原来我需要指定LOCALE_PATHS

    LOCALE_PATHS = (
        osp.join(BASE_DIR, "locale"),
    )
    

    我不知何故假设它们默认设置为“语言环境”(因为我在 Unable to find a locale path to store translations for file __init__.py 中读到了这个)。

    所以这就是它没有翻译我的字符串的原因。 “English”和“German”这两个词仍然被翻译,因为 django 在$PYTHONPATH/django/conf/locale/&lt;language&gt;/LC_MESSAGES/django.(po|mo)有一个备用语言环境@

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 2012-10-01
      相关资源
      最近更新 更多