Django + Mezzanine中的翻译问题

时间:2015-12-04 16:20:50

标签: python django mezzanine

我遵循了here所描述的方法。

在索引页面上,我有一个允许我在网站语言之间切换的表单。我添加了" next" post属性启用重定向到页面的正确语言版本。

<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="language" type="hidden" value="{{ language.code }}" />
<input name="next" type="hidden" value="/{{ language.code }}/{{ request.path|slice:"4:" }}" />
<input type="submit" value="{{ language.code }}"
class="btn-link{% if language.code == LANGUAGE_CODE %} current{% endif %}" /></form>

我有自己的set_language视图,如第一个链接中所述。以下是在会话中存储LANGUAGE_SESSION_KEY的视图的最后一部分。

if language and check_for_language(language):
    if hasattr(request, 'session'):
        request.session[LANGUAGE_SESSION_KEY] = language
    else:
        response.set_cookie(settings.LANGUAGE_COOKIE_NAME, language)
return response

我的urls.py看起来像:

urlpatterns = i18n_patterns("",
    ("^admin/", include(admin.site.urls)),

    ("^", include("mezzanine.urls")),

    url("^$", "mezzanine.pages.views.page", {"slug": "/"}, name="home"),
)

总的来说,方法很好。当用户在索引页面上时,他可以更改语言并重定向到正确的页面。

第一个问题是Mezzanine Links。如果用户单击该链接,则会将其重定向到settings.py中LANGUAGE_CODE定义的语言。同时,如果用户点击Mezzanine Page的菜单项,那么一切正常。

第二个问题是当用户点击Mezzanine主页链接时。在这种情况下,用户也会被重定向到LANGUAGE_CODE定义的站点版本。

问题是为什么在我在会话中设置LANGUAGE_SESSION_KEY后,它对未来使用正确语言的页面呈现没有任何影响?

1 个答案:

答案 0 :(得分:1)

我已经按照以下方式解决了我的问题。首先,改变了形式:

<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="language" type="hidden" value="{{ language.code }}" />
{% if request.path|slice:"4:"|length > 0 %}
    <input name="next" type="hidden" value="/{{ language.code }}/{{ request.path|slice:"4:" }}" />
{% else %}
    <input name="next" type="hidden" value="/" />
{% endif %}
<input type="submit" value="{{ language.code }}"
class="btn-link{% if language.code == LANGUAGE_CODE %} current{% endif %}" />
</form>

如果用户从主页面中选择语言,那么下一个值将是&#34; /&#34;,如果用户更改其他页面上的语言,则会更改语言前缀。

此外,我不再使用Mezzanine中的Links,因为根据当前语言,它们无法正确解析。我没有创建普通的Mezzanine页面而是链接。