使用i18next的异步语言选择器

khi*_*ter 5 javascript jquery i18next

我使用http://jamuhl.github.com/i18next本地化静态网站.

我的初始化脚本是:

jQuery(function($) {
    var setLng = $.url().param('setLng');
    if (setLng)
    {
      language_complete = setLng.split("-");
    }
    else
    {
      language_complete = navigator.language.split("-");
    }
    language = (language_complete[0]);
    console.log("I speak (root): %s", language);

    i18n.init({ lng: language, debug: true }, function() {
        // save to use translation function as resources are fetched
        $(".tzm-i18n").i18n();
        $(".page-i18n").i18n();
        $(".menu-i18n").i18n();
        $(".user-i18n").i18n();
        $(".search-i18n").i18n();
        $(".footer-i18n").i18n();
    });
    // language selector
    var lngSld = false;
    $('.lng_trigger').click(function() {
Run Code Online (Sandbox Code Playgroud)

这是HTML:

  <div id="page" class="page-i18n">
    <!--${languages} Bread crumbs -->
      <p data-i18n="welcome.p1"></p>
      <p data-i18n="welcome.p2"></p>
  </div>
  <li id="set-lang"><!-- Language selector -->
    <select id="source">
        <option selected="selected" value="br">Brasil</option>
        <option value="fr">France</option>
        <option value="de">Germany</option>
        <option value="in">India</option>
        <option value="jp">Japan</option>
        <option value="rs">Serbia</option>
        <option value="uk">United Kingdom</option>
        <option value="us">United States</option>
    </select>
  </li>
Run Code Online (Sandbox Code Playgroud)

<select>单击选项时设置语言的正确方法是什么,只需异步<p data-i18n="welcome.p1"></p>/locals/br/translations.json文件中提取值而无需重新加载整个页面?

如果用户然后导航到其他页面,那将如何保持?我正在使用https://github.com/allmarkedup/jQuery-URL-Parser但是没有看到任何改变uri的函数,所以选择被附加到like http://domain.tld/br/.

man*_*and 6

我将翻译函数放在一个单独的函数(即translatePage())中,并在第一次调用它时init,第二次调用click事件处理程序.

此外,i18next附带cookie存储(初始化useCookie: true); 您可以使用它来存储当前语言$.i18n.setLng并使用$.i18n.lng()函数检索它.然后很容易重定向到每个URI.

我希望这有帮助.


Dan*_*iuc 6

manudurand说的是正确的.此外,您不需要重新加载页面,只需设置语言并再次翻译字符串,如下所示:

i18n.setLng('en-EN', function() { $('[data-i18n]').i18n(); });
Run Code Online (Sandbox Code Playgroud)

但是,在你的情况下,而不是......

$('[data-i18n]').i18n();
Run Code Online (Sandbox Code Playgroud)

... 这将是 ...

    $(".tzm-i18n").i18n();
    $(".page-i18n").i18n();
    $(".menu-i18n").i18n();
    $(".user-i18n").i18n();
    $(".search-i18n").i18n();
    $(".footer-i18n").i18n();
Run Code Online (Sandbox Code Playgroud)