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

时间:2010-08-12 23:07:31

标签: jquery django caching internationalization

为了我的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 :(得分:0)

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

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

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