我在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',
)
以及每当我使用应为l10nd的字符串时的* .py文件:
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"
我的浏览器设置为首先请求德语内容:浏览器设置
我错过了什么?
PS:我目前不了解的项目托管在GitHub:https://github.com/frlan/blankspot
添加LOCALE_PATHS
到settings.py
并将其设置如下:
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
请注意,它LOCALE_PATHS
必须是一个元组(请查看路径末尾的逗号)。
现在基于LOCALE_PATHS
,该locale
文件夹应位于项目的根目录中。
而且可以肯定的是你运行的命令django-admin.py makemessages -l de
,并django-admin.py compilemessages
从项目的根。
djPrj
|
+---> djPrj
|
+---> djApp
|
+---> locale
|
+---> templates
还重新安排你的MIDDLEWARE_CLASSES
是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)),
# ...
)
现在转到带有de
前缀的管理页面,例如:http://127.0.0.1:8000/de/admin/
并且该管理页面应以德语显示。
好的,您能够以德语查看Django的管理页面吗?
还要检查您的视图与de
前缀。
根据您的项目代码,有些句子不是成trans
块的。将它们作为:
{% trans "your sentence" %}
此外,您还必须在代码中使用ugettext_lazy
代替ugettext
视图和模型(在此处和此处阅读)。
替换为:
from django.utils.translation import ugettext as _
与:
from django.utils.translation import ugettext_lazy as _
现在一切正常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句