使用“i18n_pattern”在URL中显示语言前缀后无法设置语言

时间:2014-12-14 23:42:53

标签: django internationalization django-templates translation django-urls

根据建议,我想在网址中显示语言前缀,并允许我网站的访问者使用模板中的表单更改语言。到目前为止,我一直在使用Django文档URL prefix中的set_language redirect view"Translation" page部分作为指南。我的代码很大程度上是从这个来源复制的。


问题

在我的URLconf中不使用“i18n_pattern”(在“pattern”中同时使用“url”调用),我设法在index.html页面上选择语言,并让Django使用我所拥有的新语言将我重定向到同一页面选择。但是,当然,未显示语言URL前缀。

当我使用“i18n_pattern”时,语言前缀出现在URL中,但似乎打破了从index.html表单更改语言的能力。例如,如果我设置为英语并且我在表单中从“英语(en)”更改为“Türkçe(tr)”,则页面基本上刷新而不更改为土耳其语(仍显示英语)。但是,我可以通过将URL语言前缀从“/ en /”更改为“/ tr /".

来更改语言

信息页/模板/页/ index.html的

{% load i18n %}
<html>
  <head>
  ...
  </head>
  <body>
    <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>

    ...

    </body>    
</html>


[PROJECT_NAME] /urls.py:

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

urlpatterns = patterns('',
    url(r'^i18n/', include('django.conf.urls.i18n')),
)

urlpatterns += i18n_patterns('',
    url(r'', include('pages.urls', namespace='pages')),
)

注意:我正在使用的模板位于名为“pages”的应用中。

任何有关让这些工作在一起的帮助将不胜感激!到目前为止,我无法在与此问题相关的stackoverflow上找到任何内容。如果需要更多信息,请询问!

1 个答案:

答案 0 :(得分:1)

StackOverflow question包含更多详细信息以及问题的一些可能答案。没有一个解决方案真的很吸引人;也不应该真的需要。不幸的是,这似乎是Django的一个问题,它既有所需的特性,也有#34;不能一起工作&#34;开箱即用&#34;具有预期的效果。就我而言,由于我的网站是单页网站,我可以通过&#34; redirect_to&#34;设置上下文变量。 =&#39; /&#39; (在视图中)否定问题。