Django设置语言

Django设置语言,django,internationalization,Django,Internationalization,在我看来,我是这样设置语言的 if request.LANGUAGE_CODE == 'en': translation.activate('en') else: translation.activate('pt') 当转到url/pt/foo/faa时/ 它起作用了 但语言并没有固定下来。一旦我点击了一个链接,比如about链接,url就会变为/en/about/。/而不是/pt/about.。/正如我所认为的那样 这是我的网址: from d

在我看来,我是这样设置语言的

    if request.LANGUAGE_CODE == 'en':
        translation.activate('en')
    else:
        translation.activate('pt')
当转到url/pt/foo/faa时/

它起作用了

但语言并没有固定下来。一旦我点击了一个链接,比如about链接,url就会变为/en/about/。/而不是/pt/about.。/正如我所认为的那样

这是我的网址:

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 = ()
我是不是理解错了?

如中所述

您应该在
TEMPLATE\u CONTEXT\u PROCESSORS
设置中设置该属性

现在尝试向上移动
区域设置
中间件,如下所示:

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的算法。仔细阅读下面的链接。一定是我们错过了什么


希望有帮助

您的设置和URL中都存在一些配置问题

首先,更新您的
设置。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
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'))
接下来,在
url.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
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\u模式
中没有包含helper视图

使用此表单创建模板,该模板将设置会话的语言:

<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>

{%csrf_令牌%}
{%get_language_info_list for LANGUAGES as LANGUAGES%}
{%用于语言中的语言%}
{{language.name_local}}({{language.code}})
{%endfor%}

或者,如果您想在视图中“手动”设置它,请确保返回的是
RequestContext
,否则您的语言将无法使用。使用以确保您的视图返回正确的上下文。

能否显示您的
设置。py
,特别是中间件和模板上下文处理器?模板上下文处理器没有设置为任何值,它是空的。添加该值后,它告诉我:在模板上下文处理器设置中放置'django.contrib.auth.context\u processors.auth',以便使用管理应用程序。。然后我补充说,就像上面说的,我所有的媒体都坏了。而且,这也没什么区别,语言没有设置。哈哈,我不知道这和
媒体有什么关系,让我们进一步阅读文档。另外,您是否检查了youhaveuse_I18N=True?是的,它也设置为True。似乎这将是一件让人大吃一惊的事情在我的回答中对中间件做了一点小小的调整:(我已经添加了文档中我认为可以解决问题的部分,或者至少解释了如何正确操作。我希望它能比我的回答更有用:)祝你好运!我不能让它工作。Iv遵循您的代码,但使用手动设置if语言,如以下定义索引(request):if request.language_code='en':translation.activate('en')否则:translation.activate('pt')尝试:flatpage=flatpage.objects.get(url='/'),除了:flatpage=[]t=loader.get_template('base.html')c=RequestContext(request,{“flatpage”:flatpage})返回HttpResponse(t.render(c))它不工作,因为您正在使用
HttpResponse
,请使用
render