1

我已按照文档说明如何执行 i18n,但这些单词仍以英文显示。

设置.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 中提取,您需要更改数据库的绝对路径)

请让我知道您是否可以复制它。谢谢

4

1 回答 1

6

你使用 set_language() 方法吗?https://docs.djangoproject.com/en/1.4/topics/i18n/translation/#set-language-redirect-view

您如何更改当前语言?使用表格?你确定语言变了?打印 html 模板中的当前语言。可能是一些 cookie 已经存储在浏览器中,并且具有非“DE”值,从而阻止切换到所需的语言。

更新:好的,似乎 Django 找不到语言环境目录。目录结构似乎有点混乱。在这里阅读: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/', )

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

于 2012-06-01T18:44:57.877 回答