为了我的 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:它只会重新加载页面,而不会更改语言。
谁能告诉我怎么了?我已经玩了很长时间了,没有找到出路。
编辑 看来这可能是一个缓存问题。在我的点击函数中,我应该清理缓存的页面。但如何呢?或者我应该禁用整个网站的浏览器缓存?我不这么认为...
最佳答案
尝试在处理函数的开头添加一条调试语句(console.log()
,甚至一个简单的 alert()
即可),以确保它正在被调用。您是否在 document.ready()
处理程序中添加点击处理程序?
此外,我认为 $.post
函数将执行 AJAX POST,但不会刷新页面,因此您可能根本看不到任何事情发生。尝试使用 Firebug/Chrome 开发者工具检查传出请求以确保。
您可能希望让 click()
处理程序也显式返回一个值(true 表示继续处理点击,false 表示停止)。也许这就是问题的根源:在 Firefox 中,处理程序有时会返回 true
,因此链接会被跟踪,而在 Chrome 上,它会返回 false
并执行 POST,但链接未被点击。
关于jquery - Django 国际化与 i18n : choosing language in template using jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3472714/