在django中更改语言及其URL

时间:2014-08-28 12:31:44

标签: django internationalization

我在Django中有一个双语站点,还有一个Select表单来更改站点的语言。它工作正常,直到我开始在网址中使用i18n_patterns。现在,我网站的每个网址都以:foo.com/en/foo.com/es/开头。

问题在于,当我使用表单更改语言时,url设置会覆盖表单的选择,因此语言不会改变。实现这一目标的唯一方法是从网址手动完成。

但是,我不想将所有语言更改链接到初始页面。网址可能类似于foo.com/en/post/foo-post/,我希望能够将其更改为foo.com/es/post/foo-post/。我做错了什么?

我的表格是:

<form action="{% url 'set_language' %}" method="post">
    {% csrf_token %}
    <input name="next" type="hidden" value="{{ redirect_to }}" />
    <select name="language"  onchange="this.form.submit()">
        <option value="es" {% if LANGUAGE_CODE == "es" %} selected="selected"{% endif %}>Español</option>
        <option value="eu"  {% if LANGUAGE_CODE == "en" %} selected="selected"{% endif %}>English</option>
    </select>
</form>

非常感谢

1 个答案:

答案 0 :(得分:1)

我有一个多语言选择的网页,这是我的base.html模板中的一个示例。我希望你觉得它很有用。

{% load i18n %}
{% get_current_language as CURRENT_LANGUAGE %}
{% get_static_prefix as STATIC_PREFIX %}
<head>
...
<script>    
jQuery(window).load(function() {
    $('#language').change(function() {
        window.location.replace("/" + $('#language').val() + "/index");
    });
});
</script>
...
</head>

<body>
....
<select id="language" name="language">
    {% if CURRENT_LANGUAGE == 'es' %}
        <option value="es" selected="yes">{% trans "Espaniol" %}</option>
    {% else %}
        <option value="es">{% trans "Espaniol" %}</option>
    {% endif %}
    {% if CURRENT_LANGUAGE == 'en' %}
        <option value="en" selected="yes">{% trans "Ingles" %}</option>
    {% else %}
        <option value="en">{% trans "Ingles" %}</option>
    {% endif %}
</select>
...
</body>