2

私の見解では、このように言語を設定しています。

    if request.LANGUAGE_CODE == 'en':
        translation.activate('en')
    else:
        translation.activate('pt')

URL /pt/foo/faa/ に移動する場合

できます。

しかし、言語は設定されていません。about リンクなどのリンクをクリックすると、URL が /pt/about../ ではなく /en/about/../ に変更されます。

これは私のURLです:

from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns

urlpatterns = i18n_patterns('',
    (r'^i18n/', include('django.conf.urls.i18n')),
    (r'^news/', include('news.urls')),
    ....

設定.py

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

私はこれを間違った方法で理解していますか?

4

2 に答える 2

2

ドキュメントで読んだように

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.i18n,
    )

あなたのTEMPLATE_CONTEXT_PROCESSORS設定でそれを持っている必要があります。

Locale次のようにミドルウェアを上に移動してみてください。

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

ミドルウェア カウントとロケールの順序は、セッションの後に来る必要があります。

プロセスには多くの詳細があるため、問題が何であるかを推測するのは非常に困難ですが、ここでは非常によく説明されています。これは、django が i18n を検出するために使用するアルゴリズムです。リンクに従って注意深く読んでください。それは私たちが見逃しているものに違いありません。

それが役に立てば幸い!

于 2013-06-06T20:57:15.677 に答える
1

設定と URL の両方に構成上の問題があります。

まず、次を更新しますsettings.py

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    "django.core.context_processors.tz",
    "django.contrib.messages.context_processors.messages"
)
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
 )
 USE_I18N = True

次に、あなたのurls.py

from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns

urlpatterns = i18n_patterns('',
    (r'^foo/fla/$', 'foo.flah.view'))

urlpatterns += patterns('/i18n/', include('django.conf.urls.i18n'))

にヘルパー ビューを含めないことに注意してくださいi18n_patterns

このフォームを使用してテンプレートを作成します。これにより、セッションの言語が設定されます。

<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}" />
<select name="language">
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
    {{ language.name_local }} ({{ language.code }})
</option>
{% endfor %}
</select>
<input type="submit" value="Go" />
</form>

または、ビューで「手動で」設定したい場合は、 を返すようにしてRequestContextください。そうしないと、言語が固執しません。render()ショートカットを使用して、ビューが正しいコンテキストを返すことを確認してください。

于 2013-06-06T21:15:54.073 に答える