5

静的なWebサイトをローカライズするために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() {

そしてここに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>

オプションがクリックされたときに言語を設定し、ページ全体をリロードせずにファイルから非同期<select>で値をプルする正しい方法は何ですか?<p data-i18n="welcome.p1"></p>/locals/br/translations.json

ユーザーが他のページに移動した場合、これはどのように維持されますか?https://github.com/allmarkedup/jQuery-URL-Parserを使用していますが、選択がlikeに追加されるようにURIを変更する関数が表示されませんhttp://domain.tld/br/

4

2 に答える 2

6

変換関数を別の関数(つまりtranslatePage())に配置し、イベントハンドラーが起動さinitれたときに1回目と2回目に呼び出します。click

また、i18nextにはCookieストレージ(で初期化useCookie: true)が付属しています。これを使用して、現在の言語$.i18n.setLngを関数で保存および取得でき$.i18n.lng()ます。そうすれば、各URIに簡単にリダイレクトできます。

これがお役に立てば幸いです。

于 2013-01-15T11:34:30.107 に答える
6

マヌデュランドが言ったことは正しい。また、ページをリロードする必要はありません。言語を設定し、次のように文字列を再度翻訳するだけです。

i18n.setLng('en-EN', function() { $('[data-i18n]').i18n(); });

しかし、あなたの場合ではなく...

$('[data-i18n]').i18n();

... それはそのようになります ...

    $(".tzm-i18n").i18n();
    $(".page-i18n").i18n();
    $(".menu-i18n").i18n();
    $(".user-i18n").i18n();
    $(".search-i18n").i18n();
    $(".footer-i18n").i18n();
于 2013-11-25T01:52:12.067 に答える