在"set_language不工作"类别的问题的另一个变体中,我有这个头颅.
在我的页面中,我有一个由三部分组成的语言选择器:
隐藏的形式
<form action="{% url 'set_language' %}" method="post" id="language-form" name="language-form">
{% csrf_token %}
<input type="hidden" name="language" id="language" value="" />
</form>
Run Code Online (Sandbox Code Playgroud)Javascript表单提交功能
function set_language(code) {
$('#language').val(code);
$('#language-form').submit();
}
Run Code Online (Sandbox Code Playgroud)和html列表(这里显示为在浏览器中呈现,而不是模板语言):
<li class="active"><a href="javascript:set_language('en-gb')"><img src="/static/img/locale/en-gb.png"> Great Britain (English) (en-gb)</a></li>
<li><a href="javascript:set_language('nl-be')"><img src="/static/img/locale/nl-be.png"> Belgium (Dutch) (nl-be)</a></li>
<li><a href="javascript:set_language('fr-be')"><img src="/static/img/locale/fr-be.png"> Belgium (French) (fr-be)</a></li>
<li><a href="javascript:set_language('nl-nl')"><img src="/static/img/locale/nl-nl.png"> Netherlands (Dutch) (nl-nl)</a></li>
<li><a href="javascript:set_language('fy-nl')"><img src="/static/img/locale/fy-nl.png"> Netherlands (Frisian) (fy-nl)</a></li>
Run Code Online (Sandbox Code Playgroud)我可以确认上述功能符合预期,并提交一个POST请求,内容如下:
csrfmiddlewaretoken=5Vcs9XdvHs7uJwPg4BHtnVPhPW3mMT0w&language=nl-nl
Run Code Online (Sandbox Code Playgroud)
并且开发服务器看到帖子,如下所示:
[08/Jul/2015 23:58:33]"POST /i18n/setlang/ HTTP/1.1" 302 0
[08/Jul/2015 23:58:33]"GET /en-gb/ HTTP/1.1" 200 6738
Run Code Online (Sandbox Code Playgroud)
我也可以确认手动输入时各种网站网址都有效,所以我可以转到localhost/en-gb/foo
并且localhost/fr-be/foo …