2016-07-26 9 views
0

私は私のDjangoプロジェクトに問題があります。私はJinja2をテンプレートエンジンとして使用しています。具体的にはdjango-jinjaを使って "控えめなJinja2のサポート"を提供しています: 私の問題は、テンプレートの文字列が翻訳されていないということです。 Django-jinja jinja2テンプレートi18n翻訳していません

何奇妙なことは、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 

私は、対応するdjango.molocale/de/LC_MESSAGES/django.poに位置django.poを持っている:

#: 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.jinjaに私は

を使用ものの Aboutは、まだ Aboutない Überです
<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", 
) 

そして、私のテンプレートdefiniションは次のとおりです。

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", 
      ], 
     }, 
    }, 
] 

私はそれは私がLOCALE_PATHSを指定するために必要なことが判明2.2.0

答えて

0

のPython 3に、Django 1.9.8とDjango神社を使用します。

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

私は何とか私がUnable to find a locale path to store translations for file __init__.pyでこれを読んでいるので、デフォルトで "locale"に設定されていると仮定しています。

これが私の弦を翻訳しなかった理由です。 djangoにはフォールバックロケールがあるため、「英語」と「ドイツ語」の単語はまだ翻訳されています$PYTHONPATH/django/conf/locale/<language>/LC_MESSAGES/django.(po|mo)

関連する問題