Django的国际化不会被激活

时间:2012-06-01 16:46:54

标签: django

我已经按照文档说明了如何操作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中提取后,您需要更改数据库的绝对路径)

如果您可以复制,请告诉我。谢谢

1 个答案:

答案 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/', )

这应该可以解决问题(我已经测试了你的测试项目)。