我在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>
非常感谢
答案 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>