为了我的django项目的国际化,我正在使用django的i18n,我喜欢它。
要在模板中设置语言,而不是使用此示例中的表单:
<form action="{{site_url}}i18n/setlang/" method="post">
<input name="next" type="hidden" value="" />
<select name="language">
{% for language in languages %}
<option value="{{language.0}}">{{language.1}}</option>
{% endfor %}
</select>
<input type="submit" value="Ok" />
</form>
我想使用简单的纯文本链接;像这样的东西:
{% for language in languages %}
{% ifnotequal language.0 lang %}
<a href="{{site_url}}i18n/setlang/" >{{language.1}}</a>{% else %}{{language.1}}
{% endifnotequal %}
...
{% endfor %}
为了让以前的模板片段完成他的工作,我创建了以下jQuery函数:
var languageLink = $('#language-choser > a');
languageLink.click(function(e){
var languageURL = languageLink.attr('href');
var languageNow = languageLink.text();
var lang = (languageNow=='English') ? 'en' : 'es';
$.post(languageURL, {next: "", language:lang});
});
此功能适用于Firefox,但不适用于Chrome:它只会重新加载页面,而不会更改语言。
有人可以告诉我出了什么问题?我已经玩了很长时间了,没有找到出路。
修改 看起来它可能是缓存问题。在我的点击功能中,我应该清理缓存的页面。但是怎么样?或者我应该禁用整个网站的浏览器缓存?我不这么认为......
答案 0 :(得分:0)
尝试在处理函数的开头添加一个调试语句(console.log()
,甚至是一个简单的alert()
),以确保它完全被调用。您是否在document.ready()
处理程序中添加了点击处理程序?
此外,我认为$.post
函数将执行AJAX POST,但不会刷新页面,因此您可能根本看不到任何事情。尝试使用Firebug / Chrome开发人员工具检查传出请求以确保。
您可能希望click()
处理程序显式返回值(true表示继续处理单击,false表示停止)。也许这就是问题的根源:在Firefox中,处理程序有时会返回true
,因此会跟踪链接,而在Chrome上它会返回false
并执行POST,但不会跟踪链接。< / p>