Django国际化与i18n:在模板中使用jQuery选择语言

3

为了国际化我的 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中却不能切换语言,并且只会简单地重新加载页面。有人能告诉我问题出在哪里吗?我已经尝试了很长时间,但没有找到解决办法。
编辑:看起来可能是缓存问题。在我的点击函数中,我应该清除缓存的页面。但如何操作呢?还是应该禁用整个站点的浏览器缓存吗?我觉得不是这样…
1个回答

0

尝试在处理程序函数的开头添加一个调试语句(console.log(),甚至是简单的alert())以确保它被调用。您是否在document.ready()处理程序中添加了点击处理程序?

此外,我认为$.post函数将执行AJAX POST,但不会刷新页面,因此您可能根本看不到任何事情发生。尝试使用Firebug / Chrome开发人员工具检查传出请求以确保。

您可能还想显式返回click()处理程序的值(true表示继续处理单击,false表示停止)。也许这就是问题的根源:在Firefox中,处理程序有时会返回true,因此链接会被跟踪,而在Chrome中,它返回false并执行POST,但链接没有被跟踪。


是的,点击处理程序在document.ready()处理程序中。我正在使用Firebug和DevTools,并尝试添加一些日志:看起来函数被调用并运行直到结束,具有正确的变量值。单击后,页面会在Firefox中选择的语言中刷新,但在Chrome中仍然是之前的语言。 - dolma33

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接