1

これに何時間も費やした後は、StackOverflow が役に立ちます。

以下のように settings.py を構成しました。

...
TIME_ZONE = 'Europe/Berlin'

LANGUAGE_CODE = 'de'

LANGUAGES = (
  ('en', u'English'),
  ('de', u'German'),
  ('fr', u'French'),
)

USE_I18N = True

USE_L10N = True

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

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.request',
    'django.core.context_processors.static',
    'django.contrib.messages.context_processors.messages',
)
...

私のbase.htmlファイルには、次のようなフォームがあります。

<form action="/i18n/setlang/" method="post">
    {% csrf_token %}
    <input name="next" type="hidden" value="/" />
    <select name="language">
        {% get_language_info_list for LANGUAGES as languages %}
        {% for language in languages %}
            <option value="{{ language.code }}">{{ language.name_local }} ({{ language.code }})</option>
        {% endfor %}
    </select>
    <input type="submit" value="Go" />
</form>

私のurls.py

urlpatterns = patterns('',
    url(r'^i18n/', include('django.conf.urls.i18n')),
    url(r'^$', 'MainApp.views.index'), #root
)

同じbase.htmlファイルの上部{% load i18n %}に、本体に sample があります{% trans "This is the title." %}。サーバーを実行する前に、次のことを行いました。

django-admin.py makemessages -l de
django-admin.py makemessages -l fr

上記のサンプル テキストは によって取り上げられました。makemessages私は にそれぞれの翻訳を提供しましたmsgstr。その後、django-admin.py compilemessages.コマンドがうまく実行され、それぞれのロケール フォルダーに.moファイルが生成されました。

サーバーを実行していますが、フォームが機能しません。別の StackOverflow の投稿から、私が#, fuzzy lines行った を削除するようにほのめかされました。私は何を間違っていますか?

ありがとう!

4

1 に答える 1

1

MIDDLEWARE_CLASSESのLocaleMiddleware後にを配置する必要があります。SessionMiddleware

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
....
)

ミドルウェア クラスの順序は重要です。はLocaleMiddlewareセッション データを使用してユーザー言語を検出するため、 の後に来る必要がありますSessionMiddleware。こちらのドキュメントにも記載されています https://docs.djangoproject.com/en/1.3/topics/i18n/deployment/#how-django-discovers-language-preference

これがうまくいくことを願っています!

于 2013-08-12T22:27:51.700 に答える