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',)
参考までに、これらの質問は役に立ちませんでした。