2

Python 2.6 で Django サイトを 1.2 から 1.5 に移植すると、国際化の問題が発生しました。

奇妙なことは、サイト全体で 1 つの文字列しか翻訳されないことです (テストしたところ、ほとんどの場合、日付フィルターは長い月の名前を翻訳できました)。同じテンプレートにある他の文字列は翻訳されず、すべての翻訳は単一の po/mo ファイルにあります。すべての翻訳がそこにあり、Poedit で検証され、 でコンパイルされていmanage.py compilemessagesます。

編集:単一の翻訳された文字列の理由は、管理サイトの文字列と一致したためです。

それを機能させようとしている間LOCALE_PATH、.. 後で同じテキストを再度追加してこれを確認しましたが、それでも翻訳されるため、クライアント側のキャッシュは関与しません。

言語の切り替えは期待どおりに機能し、翻訳された要素のみがデフォルトの言語に変更され、{{ LANGUAGE_CODE }}これが確認されました。セッションデータとdjangoキャッシュ(開発サーバーでは使用されていないようです)をクリアしようとしました。

誰かがここで何が起こっているか推測できますか? より広範なログなどを取得するためのデバッグ フラグはありませんか?

最小限のビュー:

def locale_test(request):
    locale = request.GET.get('l', None)
    if locale:
        translation.activate(locale)
    di = {"foobar": _("foobar")}
    return render_to_response('locale_test.html',di, context_instance=RequestContext(request))

対応するテンプレート ( locale_test.html):

{% load i18n %}
<p>Language: {{ LANGUAGE_CODE }}</p>
<p>Matching string from admin site that gets translated correctly: {% trans "Log out" %}</p>
<p>Translated in template: {% trans "Foobar" %}</p>
<p>Translated in view: {{ foobar }}</p>

関連する設定:

USE_I18N = True

USE_L10N = True

LANGUAGES = (
    ('en', 'English'),
    ('foo', 'Fooo'),
)

LANGUAGE_CODE = 'en'

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',

 )

 TEMPLATE_CONTEXT_PROCESSORS = (
      'django.contrib.auth.context_processors.auth',
      'django.core.context_processors.i18n',
      'django.core.context_processors.request',
     )
LOCALE_PATHS = ('/path/to/my/locale',)

参考までに、これらの質問は役に立ちませんでした。

4

2 に答える 2

3

Gah! I got bit by the same issue as this guy : https://code.djangoproject.com/ticket/18492

Namely that a trailing comma was missing in the LOCALE_PATHS tuple. Too bad Django doesn't raise an error for that.

于 2013-08-15T12:37:42.573 に答える
0

django.po ファイルを更新するたびにコンパイルするようにすることで解決した同様の問題がありました。

./manage.py compilemessages

翻訳は、.po ファイルではなく、コンパイル済みファイル (django.mo) から行われます。

  1. 翻訳ファイルを生成します。./manage.py makemessages -a
  2. 翻訳: 手動または自動翻訳などのツールを使用
  3. ファイルをコンパイルします。./manage.py compilemessages
  4. テストして変更を確認します。デフォルトの言語が最初に選択される可能性があるわけではありません。必ず言語を変更してください。たとえば、表示したい言語に変更localhost:8000/en/するlocalhost:8000/fr/か、それに応じて変更しますlocalhost:8000/foo/

これが役立つことを願っています

于 2018-01-19T16:14:43.930 に答える