【问题标题】:i18next not working with RequireJSi18next 不适用于 RequireJS
【发布时间】:2013-08-02 04:32:12
【问题描述】:

我正在使用 RequireJS、Backbone 和 i18next 开发一个国际化的移动应用程序。这是我的源代码的一部分:

require.config({
    paths: { 
        jquery:     'libs/jquery-1.8.2.min',
        jqm:     'libs/jquery.mobile-1.3.0.min',
        underscore: 'libs/underscore-min',
        backbone:   'libs/backbone-min',
        text:       'libs/require-text',
        fastclick:       'libs/fastclick',
        iscroll:       'libs/iscroll',
        modules:    '../modules',
        model:       '../model'
    },
    shim: {
        'libs/i18next.min': ['jquery']
    }
});

define(['app', 'jqm-config'], function(app) { 
    $(document).ready(function() { 
      console.log("DOM is ready");
    });

    app.initialize();

    require(["libs/i18next.min"], function(i18n) {
        console.log(i18n); // i18n is defined, object displayed in the console
        i18n.init({
            resGetPath: 'locales/en.json',
            getAsync: false
        }, function() {
            $("[data-i18n]").i18n();
        });
    });
});

document.addEventListener("deviceready", function(e) {
    console.log("[DEBUG] device is ready !");
}, false);

document.addEventListener("touchmove", function(e) {
    e.preventDefault();
}, false);

i18next 加载成功,对象 i18n 不是未定义的。问题是,当我运行应用程序时,控制台上有一条消息说 $(...).i18n 不是函数。例如,以下代码正在运行:

<!DOCTYPE html> 
<html> 
    <head> 
        <title>Test</title>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1"/> 

        <script src="js/libs/jquery.js"></script>
        <script src="js/libs/i18next.js"></script>
    </head> 
<body>
    <h1 data-i18n="app.name"></h1>
    <p data-i18n="app.description"></p>

    <script type="text/javascript">
        $(document).ready(function() {
            $("[data-i18n]").i18n();
        });
    </script>
</body>
</html>

有谁知道问题出在哪里?谢谢:)

编辑:这是我的控制台日志

DOM is ready // main.js (line 20)
Object { pluralExtensions={...}, sync={...}, functions={...}, more...} // main.js (line 26)
TypeError: $(...).i18n is not a function
    $("[data-i18n]").i18n(); // main.js (line 31)

【问题讨论】:

    标签: jquery requirejs i18next


    【解决方案1】:

    我认为您使用的是“默认”i18next 文件。你试过用jQuery-AMD-i18next的版本吗?

    如果您已经包含了 jQuery 和 AMD 版本,并且可以正常工作,请访问:http://i18next.com/pages/doc_jquery.html

    【讨论】:

    • 完美!非常感谢 !我在想“默认”版本是 jQuery 兼容的,并且 i18next.withJquery 包含 jQuery 库...再次感谢您 :)
    • 不,默认版本不支持 AMD 和 jQuery ;) 这是因为没有它的 js 文件更小,有些人不需要它(例如,因为我在 AngularJS 中不使用 jQuery项目)。
    • 我错了。默认版本包含 jQuery。但是因为 RequireJS,你不得不使用 AMD 版本。抱歉信息有误:)
    猜你喜欢
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    相关资源
    最近更新 更多