Интернационализация Django с i18n: выбор языка в шаблоне с использованием jQuery - PullRequest
3 голосов
/ 13 августа 2010

Для интернационализации моего проекта django я использую i18n django, и мне это нравится.


Для установки языка в шаблоне вместо использования форм, как в этом примере:

  <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: она просто перезагрузит страницу без изменения языка.

Кто-то может сказать мне, что не так? Я долго играл с этим, не находя выхода.


EDIT Похоже, это может быть проблема кеширования . В моей функции щелчка я должен очистить кэшированную страницу. Но как? Или я должен отключить кеширование браузера для всего сайта? Я так не думаю ...

1 Ответ

0 голосов
/ 13 августа 2010

Попробуйте добавить оператор отладки (console.log(), или даже простой alert()) в начале функции-обработчика, чтобы убедиться, что он вызывается вообще.Вы добавляете обработчик кликов в обработчик document.ready()?

Также я думаю, что функция $.post будет выполнять AJAX POST, но не обновит страницу, поэтому вы можете вообще ничего не видеть.Попробуйте использовать инструменты разработчика Firebug / Chrome для проверки исходящих запросов, чтобы убедиться.

Возможно, вы захотите, чтобы обработчик click() также явно возвращал значение (true означает, что продолжить обработку щелчка, false означает остановку).Возможно, в этом корень проблемы: в Firefox обработчик иногда возвращает true, поэтому ссылка следует, а в Chrome возвращается false и выполняется POST, но ссылка не выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...