Django 翻译不工作
Django Translations Not Working
我在 Django 1.9 / python3.5 应用程序中工作,并尝试使用 Django 的翻译实用程序。我有一个语言环境目录,其中有一个 'es' 目录用于我在其中创建了一个 .po 文件的西班牙语翻译。我将它设置为有几个翻译只是为了测试它。
msgid "Sign In"
msgstr "Registrarse"
msgid "Create an Account"
msgstr "Crea una cuenta"
我的设置文件也正确配置了
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',
'webapp.middleware.LanguageSwitchMiddleware',
)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'APP_DIRS': True,
'DIRS': [os.path.join(BASE_DIR, 'templates'), ],
'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',
'webapp.context_processors.detail_context',
'django.template.context_processors.i18n'
],
},
},
]
# Internationalization
# https://docs.djangoproject.com/en/dev/topics/i18n/
LOCALE_PATHS = (
os.path.join(PROJECT_ROOT, 'locale/'),
)
from django.utils.translation import ugettext_lazy as _
LANGUAGES = (
('en', _('English')), # first language is the default used by modeltranslations
('es', _('Spanish')),
)
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'America/Chicago'
USE_I18N = True
在我的模板中,我使用 Django 'trans' 模板标签来登录,并创建一个帐户。 select 框将编辑来自应用程序的 Content-Language http 响应 header,我已经测试过,它成功地做到了。但是,header 注册、创建和帐户不会翻译成西班牙语。我是否缺少某些步骤?
HTML
{% load i18n %}
<ul class="list-inline-xxs">
{% if customer %}
<li>
Welcome,
<a href='{% url "customer:dashboard" %}'>
{{ customer.first_name }}
</a>
</li>
<li>
<a href='{% url "customer:logout" %}'>
{% trans 'Logout' %}
</a>
</li>
{% else %}
<li>
<a href='{% url "customer:login" %}'>
{% trans 'Sign In' %}
</a>
</li>
<li>
<a href='{% url "subscription:customer-subscribe" %}'>
{% trans 'Create an Account' %}
</a>
</li>
{% endif %}
</ul>
I have a locale directory which has an 'es' directory for spanish
translations that I created a .po file in.
该 ^^^ 行表明您正在手动创建翻译文件。让Django create translation files给你:
django-admin makemessages -a
然后放入你的翻译,保存文件并用
编译
django-admin compilemessages
重新启动您的应用程序,它应该可以运行。
我整理了一个如何使用 Django 进行翻译的简单示例:https://github.com/DusanMadar/Django-multilang-demo
编辑
As django django-admin makemessages -h
suggests --ignore PATTERN, -i PATTERN
是你需要用来忽略第三方目录的东西。所以像 django-admin makemessages -a -i 3rdparty_dir
我在 Django 1.9 / python3.5 应用程序中工作,并尝试使用 Django 的翻译实用程序。我有一个语言环境目录,其中有一个 'es' 目录用于我在其中创建了一个 .po 文件的西班牙语翻译。我将它设置为有几个翻译只是为了测试它。
msgid "Sign In"
msgstr "Registrarse"
msgid "Create an Account"
msgstr "Crea una cuenta"
我的设置文件也正确配置了
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',
'webapp.middleware.LanguageSwitchMiddleware',
)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'APP_DIRS': True,
'DIRS': [os.path.join(BASE_DIR, 'templates'), ],
'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',
'webapp.context_processors.detail_context',
'django.template.context_processors.i18n'
],
},
},
]
# Internationalization
# https://docs.djangoproject.com/en/dev/topics/i18n/
LOCALE_PATHS = (
os.path.join(PROJECT_ROOT, 'locale/'),
)
from django.utils.translation import ugettext_lazy as _
LANGUAGES = (
('en', _('English')), # first language is the default used by modeltranslations
('es', _('Spanish')),
)
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'America/Chicago'
USE_I18N = True
在我的模板中,我使用 Django 'trans' 模板标签来登录,并创建一个帐户。 select 框将编辑来自应用程序的 Content-Language http 响应 header,我已经测试过,它成功地做到了。但是,header 注册、创建和帐户不会翻译成西班牙语。我是否缺少某些步骤?
HTML
{% load i18n %}
<ul class="list-inline-xxs">
{% if customer %}
<li>
Welcome,
<a href='{% url "customer:dashboard" %}'>
{{ customer.first_name }}
</a>
</li>
<li>
<a href='{% url "customer:logout" %}'>
{% trans 'Logout' %}
</a>
</li>
{% else %}
<li>
<a href='{% url "customer:login" %}'>
{% trans 'Sign In' %}
</a>
</li>
<li>
<a href='{% url "subscription:customer-subscribe" %}'>
{% trans 'Create an Account' %}
</a>
</li>
{% endif %}
</ul>
I have a locale directory which has an 'es' directory for spanish translations that I created a .po file in.
该 ^^^ 行表明您正在手动创建翻译文件。让Django create translation files给你:
django-admin makemessages -a
然后放入你的翻译,保存文件并用
编译django-admin compilemessages
重新启动您的应用程序,它应该可以运行。
我整理了一个如何使用 Django 进行翻译的简单示例:https://github.com/DusanMadar/Django-multilang-demo
编辑
As django django-admin makemessages -h
suggests --ignore PATTERN, -i PATTERN
是你需要用来忽略第三方目录的东西。所以像 django-admin makemessages -a -i 3rdparty_dir