如何以正确的方式设置Django翻译? [英] How to setup up Django translation in the correct way?
问题描述
我有一个问题,翻译不工作在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:
从django.utils.translation import ugettext_lazy as _
我的模板从
{%extendsbase.html%}
{%load i18n%}
和模板内部比我使用的反占位符。例如。
< h1> {%trans注册坦克%}< / h1>
事实上,当运行时,字符串出现在locale / de / LC_MESSAGES / django.po中翻译过来例如。
msgid注册一个坦克
msgstrEinen neuen Tank anmelden
我的浏览器首先要求德语内容:
浏览器设置
我错过了什么?
PS我目前正在模糊的项目由github托管: https://github.com/frlan/blankspot
将 LOCALE_PATHS
添加到设置.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
|
+ --->模板
还将您的 MIDDLEWARE_CLASSES
重新排列为 LocaleMiddleware 在
SessionMiddleware
之前和 CommonMiddleware
之前提到 here :
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
),然后再次检查。 / p>
只是为了确保您的本地化应用于您的django管理页面,默认为 django.mo
django文件,请执行以下测试:
首先在项目的主要 urls.py
将模式
替换为 i18n_patterns
:
code> 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
页面应该显示在德语
语言中。 / p>
好的,你可以在 de $ c中看到django的
Admin
$ c>语言?
还要检查您的视图,还有 de
前缀。
根据您的代码项目,一些句子不在trans块中。将它们作为:
{%trans你的句子%}
pre>
此外,您必须在视图和模型的代码中使用
ugettext_lazy
而不是ugettext(阅读 此处)
替换为:
从django.utils.translation import ugettext为_
with:
from django.utils.translation import ugettext_lazy as _
现在一切都会工作。 / p>
I've got an issue with translations not working on Django 1.6!. I've added to my settings.py
LANGUAGE_CODE = 'en-us' ugettext = lambda s: s LANGUAGES = ( ('en', ugettext('English')), ('de', ugettext('German')), )
Also added middlewares:
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', )
as well as to my *.py files whenever I'm using a string which shall be l10nd:
from django.utils.translation import ugettext_lazy as _
My templates starting with
{% extends "base.html" %} {% load i18n %}
and inside the template than I used the trans placeholder. E.g.
<h1>{% trans "Register a tank" %}</h1>
In fact the string is appearing inside locale/de/LC_MESSAGES/django.po when running as well I have translated them. E.g.
msgid "Register a tank" msgstr "Einen neuen Tank anmelden"
My browser is set to request German content first: Browser settings
What did I miss?
P.S. The project I'm currently fuzzying around is hosted on github: https://github.com/frlan/blankspot
解决方案Add the
LOCALE_PATHS
tosettings.py
and set it as bellow:Note that
LOCALE_PATHS
must be a tuple(look at the comma at the end of the path)import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale'), )
Now based on
LOCALE_PATHS
, Thelocale
folder should be in root of your project.And be sure that you run
django-admin.py makemessages -l de
anddjango-admin.py compilemessages
cmds from the root of your project.djPrj | +---> djPrj | +---> djApp | +---> locale | +---> templates
Also rearrange your
MIDDLEWARE_CLASSES
to beLocaleMiddleware
afterSessionMiddleware
and beforeCommonMiddleware
that mentioned here: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', )
Restart your service(
python manage.py runserver
) and check again.
Just to ensure that your localization is applied to your django admin page with default
django.mo
file of django, do following test:First in main
urls.py
of project replacepatterns
withi18n_patterns
:from django.conf.urls.i18n import i18n_patterns urlpatterns = i18n_patterns('', url(r'^admin/', include(admin.site.urls)), # ... )
Now go to
Admin
page withde
prefix, like:http://127.0.0.1:8000/de/admin/
AndAdmin
page should be show inGerman
language.Ok, are you able to see
Admin
page of django inde
language ?Also check your view with
de
prefix too.
According to your code of project, some sentences are not in trans block. put them as:
{% trans "your sentence" %}
Also you must use
ugettext_lazy
instead of ugettext in your code for views and models, (read here)replace this:
from django.utils.translation import ugettext as _
with:
from django.utils.translation import ugettext_lazy as _
And now everything will work.
这篇关于如何以正确的方式设置Django翻译?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!