我遇到了翻译不能使用Django 1.6的问题!我已添加到我的settings.py
LANGUAGE_CODE = 'en-us'
ugettext = lambda s: s
LANGUAGES = (
('en', ugettext('English')),
('de', ugettext('German')),
)
还添加了中间件:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
以及我的* .py文件,每当我使用的字符串应该是l10nd:
from django.utils.translation import ugettext_lazy as _
我的模板以
开头{% extends "base.html" %}
{% load i18n %}
和模板内部比我使用trans占位符。例如。
<h1>{% trans "Register a tank" %}</h1>
实际上,字符串出现在locale / de / LC_MESSAGES / django.po中,并且在运行时我已经翻译了它们。例如。
msgid "Register a tank"
msgstr "Einen neuen Tank anmelden"
我的浏览器设置为首先请求德语内容: Browser settings
我错过了什么?
P.S。我目前正在模糊的项目托管在github上:https://github.com/frlan/blankspot
答案 0 :(得分:40)
将LOCALE_PATHS
添加到settings.py
并将其设置为以下:
请注意LOCALE_PATHS
必须是元组(查看路径末尾的逗号)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
现在基于LOCALE_PATHS
,locale
文件夹应位于项目的根目录中。
请务必从项目的根目录运行django-admin.py makemessages -l de
和django-admin.py compilemessages
cmds。
djPrj
|
+---> djPrj
|
+---> djApp
|
+---> locale
|
+---> templates
在MIDDLEWARE_CLASSES
之后和提及here的LocaleMiddleware
之前,还要将SessionMiddleware
重新排列为CommonMiddleware
:
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.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
重新启动您的服务(python manage.py runserver
)并再次检查。
为了确保您的本地化应用于django的默认django.mo
文件的django管理页面,请执行以下测试:
项目的主要urls.py
中的第一个用patterns
替换i18n_patterns
:
from django.conf.urls.i18n import i18n_patterns
urlpatterns = i18n_patterns('',
url(r'^admin/', include(admin.site.urls)),
# ...
)
现在转到带有Admin
前缀的de
页面,例如:http://127.0.0.1:8000/de/admin/
Admin
页面应以German
语言显示。
好的,你能用Admin
语言看到django的de
页吗?
同时使用de
前缀检查您的观点。
根据您的project代码,某些句子不在反式块中。把它们当作:
{% trans "your sentence" %}
此外,您必须在代码中使用ugettext_lazy
代替ugettext查看视图和模型,(read here)
替换这个:
from django.utils.translation import ugettext as _
with:
from django.utils.translation import ugettext_lazy as _
现在一切都会奏效。
答案 1 :(得分:4)
就我而言,我使用en-gb作为运行
的参数 django-admin.py makemessages -l en-gb
相反,它应该是en_GB。
django-admin.py makemessages -l en_GB
答案 2 :(得分:2)
请在translated string
中设置django.po
,然后使用python manage.py compilemessages
for e.g
#: path/to/python/module.py:23
msgid "Welcome to my site."
msgstr "put appropriate translated string here"
建议 - :您可以使用django-rosetta
包从UI界面添加translated string
。从django-admin添加T-string很容易。 https://github.com/mbi/django-rosetta
答案 3 :(得分:2)
检查cookie和会话 - 根据How Django Discovers Language Preference,流程如下:
由于您的浏览器设置设置为首选&#39; de&#39;,我怀疑LocaleMiddleware必须在之前的步骤1中确定其他步骤。 -
答案 4 :(得分:0)
您需要在设置中enable the LocaleMiddleware
告诉Django根据浏览器设置进行语言检测。更改语言首选项会有效地设置Accept-Language
标题。您可能需要签入隐身窗口,因为其他语言检测方法具有更高的优先级,例如用户的会话和django_language
cookie。