Django翻译生成po和mo文件,但翻译失败,显示占位符
我正在使用 Django 1.6.5 和 virtualenv
(虚拟环境)以及 apache2
。
我的 settings.py
文件结构如下:
from django.utils.translation import ugettext_lazy as _
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',
)
LANGUAGE_CODE = 'tr_TR'
LANGUAGE_COOKIE_NAME = 'wm_lang'
LOCALE_PATHS = (
'/home/mustafa/python/myproject/locale'
)
USE_I18N = True
USE_L10N = True
LANGUAGES = (
('tr', _(u'Türkçe')),
('en', _(u'English')),
)
我有一个模板文件,长这样:
{% extends .... %}
{% load i18n %}
{% block content %}
<h2>{% trans 'Hosgeldin' %}</h2>
....
....
我运行以下命令来创建 po
文件:
django-admin.py makemessages --locale=tr --locale=en
这会生成以下文件:
/home/mustafa/python/myproject/locale/tr/LC_MESSAGES/django.po
/home/mustafa/python/myproject/locale/en/LC_MESSAGES/django.po
我应用了翻译字符串,所以我的 django.po
翻译文件看起来是这样的:
英文:
#: templates/websitesi/index.html:6
msgid "Hosgeldin"
msgstr "Welcome, that is a test"
土耳其文:
#: templates/websitesi/index.html:6
msgid "Hosgeldin"
msgstr "Hoşgeldiniz, bu bir deneme"
然后我用以下命令编译它们:
django-admin.py compilemessages
这样 Django 会在 django.po
文件旁边生成 django.mo
文件,适用于两种语言。
但是当我访问页面时,我看到的是 Hosgeldin
(翻译占位符),而不是翻译后的文本。
在模板中写 {{ LANGUAGE_CODE }}
会显示所选的语言代码。当我的地址是 someadress/en
时,语言代码显示为 en
...
我漏掉了什么吗?
更新:这是我 根目录 的 urls.py
的一部分:
urlpatterns = patterns('',
(r'^i18n/', include('django.conf.urls.i18n')),
)
urlpatterns += i18n_patterns('',
url(r'^admin/docs/', include('django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
)
urlpatterns += staticfiles_urlpatterns()
urlpatterns += i18n_patterns('websitesi.views',
url(r'^$', 'index', name='index'), # This is my home page
....
....
然后我去 my_local_server/
或 my_local_server/tr
或 my_local_server/en
测试,但翻译都失败了。
当我通过 my_local_server/tr/admin
或 my_local_server/en/admin
访问管理界面时,Django 的翻译功能正常工作。
1 个回答
7
最后,果然是个打字错误。
在 settings.py
文件里
LOCALE_PATHS = (
'/home/mustafa/python/myproject/locale'
)
但是 Django 期望 LOCALE_PATHS
是一个元组,所以加上一个逗号就解决了这个问题...
LOCALE_PATHS = (
'/home/mustafa/python/myproject/locale',
)