我有一个问题,翻译不工作在Django 1.6!我已经添加到我的settings.py
LANGUAGE_CODE ='en-us' ugettext = lambda s:s LANGUAGES =(('en',ugettext('English')),('de',ugettext('German')),)还添加了中间件:
MIDDLEWARE_CLASSES =('django.middlewaremon.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托管: github/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.middlewaremon.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 前缀,如: 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.middlewaremon.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: github/frlan/blankspot
解决方案Add the LOCALE_PATHS to settings.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, The locale folder should be in root of your project.
And be sure that you run django-admin.py makemessages -l de and django-admin.py compilemessages cmds from the root of your project.
djPrj | +---> djPrj | +---> djApp | +---> locale | +---> templatesAlso rearrange your MIDDLEWARE_CLASSES to be LocaleMiddleware after SessionMiddleware and before CommonMiddleware that mentioned here:
MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middlewaremon.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 replace patterns with i18n_patterns:
from django.conf.urls.i18n import i18n_patterns urlpatterns = i18n_patterns('', url(r'^admin/', include(admin.site.urls)), # ... )Now go to Admin page with de prefix, like: 127.0.0.1:8000/de/admin/ And Admin page should be show in German language.
Ok, are you able to see Admin page of django in de 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翻译?
发布评论