我已经按照文档说明了如何操作i18n,但单词仍以英文显示。
Settings.py:
USE_I18N = True
LANGUAGES = (
('en', 'English'),
('de', 'German'),
)
LANGUAGE_CODE = 'de'
查看:
from django.utils.translation import ugettext as _
...
messages.set_level(request, messages.SUCCESS)
messages.success(request, _(u'An invitation was sent to %s.') % invitation.email)
我在Ubuntu上开发并安装了gettext。 在命令行中输入以下内容:
django-admin.py makemessages -l de
我得到一个.po文件并相应地编辑它:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-01 17:42+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: MyBookmarks/templates/friend_invite.html:3
#: MyBookmarks/templates/friend_invite.html:4
msgid "Invite A Friend"
msgstr "hhhhh"
#: MyBookmarks/templates/friend_invite.html:11
msgid "send invite"
msgstr "gggggggggg"
#: MyBookmarksApp/forms.py:8
msgid "Friend's Name"
msgstr "ffffffffff"
#: MyBookmarksApp/forms.py:9
msgid "Friend's Email"
msgstr "ddddddddd"
#: MyBookmarksApp/views.py:123
#, python-format
msgid "An invitation was sent to %s."
msgstr "ssssssssssss %s"
#: MyBookmarksApp/views.py:127
msgid "An error happened when sending the invitation."
msgstr "aaaaaaa"
然后我运行这个命令:
django-admin.py compilemessages
并创建.mo文件。我运行应用程序,一切仍然是简单的英语。我错过了什么?
更新2:
我现在尝试了一种新方法:
我添加了
'django.middleware.locale.LocaleMiddleware',
到settings.py
中的MIDDLEWARE_CLASSES然后我在url.py中添加了以下内容:
# i18n
(r'^i18n/', include('django.conf.urls.i18n')),
在我的base.html模板中,我添加了这个:
{% load i18n %}
...
<div id="footer">
<form action="/i18n/setlang/" method="post">
<select name="language">
{% for lang in LANGUAGES %}
<option value="{{ lang.0 }}">{{ lang.1 }}</option>
{% endfor %}
</select>
<input type="submit" value="Go" />
</form>
</div>
现在我可以在我的页面上看到一个下拉列表来更改语言。即使将语言改为德语,也没有任何改变。在1.4 ......中似乎有些东西被打破了。
更新3:
我创建了一个新的简单测试项目来演示这个问题。
这是一个非常简单的项目,您可以在德语和主页上的英文。您看到所选语言代码实际上发生了变化,这是一个好兆头,但翻译根本不会发生。我想知道这是否是需要报告的错误。非常感谢您的合作。
请从这里下载: http://www.chasebot.com/TestProject.zip
(在settings.py中提取后,您需要更改数据库的绝对路径)
如果您可以复制,请告诉我。谢谢
答案 0 :(得分:4)
您是否使用set_language()方法? https://docs.djangoproject.com/en/1.4/topics/i18n/translation/#set-language-redirect-view
您如何更改当前语言?使用表格?你确定语言改变了吗?在html模板中打印当前语言。可能是某些cookie已经存储在浏览器中并且已经存在非“DE”值,从而无法切换到所需的语言。
<强>更新强>: 好吧,似乎Django找不到locale目录。目录结构似乎有点乱。请在此处阅读:https://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-translations
The directories listed in LOCALE_PATHS have the highest precedence, with the ones appearing first having higher precedence than the ones appearing later.
Then, it looks for and uses if it exists a locale directory in each of the installed apps listed in INSTALLED_APPS. The ones appearing first have higher precedence than the ones appearing later.
因此,您在settings.py中没有LOCALE_PATHS,并且locale /不是应用程序的子目录,包含在INSTALLED_APPS中。
添加
LOCALE_PATHS = ('/path/to/locale/', )
这应该可以解决问题(我已经测试了你的测试项目)。