【问题标题】:i18next jquery help migrating to i18next jquery v3.0.0i18next jquery 帮助迁移到 i18next jquery v3.0.0
【发布时间】:2016-07-15 00:24:14
【问题描述】:

大家好,

从 i18next jquery 1.11.1 迁移到 3.0.0 版我需要一点帮助 目前这是我的设置

<!-- Core JS files -->
<script type="text/javascript" src="../js/jquery-2.2.4.min.js"></script>
<script type="text/javascript" src="../js/i18next.min.js"></script> (v1.11.1)

$(function(){
    // i18next Configuration
    // -------------------------
    var namespaces = ["nav" ,"common" ];
    var options = {
            ns: {
                namespaces: namespaces,
                defaultNs: namespaces[0]
            },
            resGetPath: '../assets/locales/__ns__/__lng__.json',
            debug: false,
            load: 'unspecific',
            detectLngQS: 'lang',
            fallbackLng : 'en',
            cookieName: 'applang',
            //cookieExpirationTime : ,
            useLocalStorage: false,
            cookieDomain: '*.mydomain.com',
            useCookie: true,
            lngWhitelist: ['en','es', 'de', 'fr']
        };
    i18n.init(options ,function (err,t) {
        $('body').i18n(); // Init 18n

    });
})

当我想加载额外的命名空间时,我会这样做

var namespaces = ["newFile"];
i18n.loadNamespaces(namespaces, function (err, t) {
        // init i18n
        $('body').i18n();
   .............. other stuff in here
})

但是当我尝试使用最新的 i18next v3 和 jquery-i18next (https://github.com/i18next/jquery-i18next) 保持相同的逻辑时,我在 loadNamespaces 函数上遇到错误(未捕获的 TypeError:namespaces.forEach 不是函数),下面是新设置

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.js" ></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next/3.0.0/i18next.min.js" ></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-i18next/0.0.2/i18next-jquery.min.js" ></script>

i18next
  .use(i18nextXHRBackend)
  .init({
      lng: 'de',
      backend: {
          loadPath: '../assets/locales/{{lng}}/{{ns}}.json'
      }
    }, function(err, t) {
      jqueryI18next.init(i18next, $);
      $('.body').localize();

  });

  var namespaces = ["newFile"];
  i18n.loadNamespaces(namespaces, function (err, t) {
        // init i18n
        $('body').localize();
   .............. other stuff in here
})

【问题讨论】:

    标签: javascript jquery i18next


    【解决方案1】:

    对这里感兴趣的人是我的解决方案

    <script type="text/javascript" src="../assets/js/core/libraries/jquery-2.2.4.min.js"></script>
    <script type="text/javascript" src="../assets/js/plugins/internationalization/i18next.min-v3.3.1.js"></script>
    <script type="text/javascript" src="../assets/js/plugins/internationalization/jquery-i18next.js"></script>
    <script type="text/javascript" src="../assets/js/plugins/internationalization/i18nextXHRBackend.min.js"></script>
    <script type="text/javascript" src="../assets/js/plugins/internationalization/i18nextBrowserLanguageDetector.min.js"></script>
    <script type="text/javascript" src="../assets/js/plugins/internationalization/i18nextLocalStorageCache.min.js"></script>
    <script type="text/javascript" src="../assets/js/plugins/internationalization/i18nextIntervalPluralPostProcessor.min.js"></script>
    
    $(function(){
        // i18next Configuration
        // -------------------------
    var namespaces = ["nameSpace1" ,"NameSpace2" ],
        cacheOptions = {
            // turn on or off
            enabled: true, // prefix for stored languages
            prefix: 'i18next_res_',
            expirationTime: 1*24*60*60*1000 // expiration
        },
        lngDetectionOption = {
            //order and from where user language should be detected
            order: ['querystring', 'cookie', 'localStorage', 'navigator', 'htmlTag'],
            //keys or params to lookup language from
            lookupQuerystring: 'lng',
            lookupCookie: 'i18next',
            lookupLocalStorage: 'i18nextLocalStorage',
            //cache user language on
            caches: ['localStorage','cookie'],
            // optional expire and domain for set cookie
            cookieMinutes: 365*24*60, // 1 year
            cookieDomain: 'myDomain',
            // optional htmlTag with lang attribute, the default is:
            htmlTag: document.documentElement
        },
        i18nextoptions = {
            compatibilityJSON: 'v2',
            debug: true,
            whitelist : ['en','es', 'de', 'fr'],
            ns: namespaces,
            load: 'unspecific',
            fallbackLng : 'en',
            detection: lngDetectionOption,
            backend: {loadPath: '../assets/locales/{{ns}}/{{lng}}.json'},
            //cache : cacheOptions
        };
    
    i18next
        .use(i18nextBrowserLanguageDetector)
        .use(i18nextXHRBackend)
        .use(Cache)
        .use(i18nextIntervalPluralPostProcessor)
        .init(i18nextoptions, function (err, t) {
            var options = $().jqueryI18nextOptions;
            //init jquery-i18next
            jqueryI18next.init(i18next, $,options);
    
            $('body').i18n(); // Init 18n
    
        })
    })
    

    【讨论】:

    猜你喜欢
    • 2014-02-19
    • 2015-12-27
    • 2015-03-16
    • 2021-12-15
    • 2019-03-21
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多