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 テンプレートに現在の言語を出力します。「DE」以外の値を持つ Cookie がブラウザーに既に保存されている可能性があり、目的の言語への切り替えが妨げられています。

更新: OK、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 に答える