我正在使用 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)
最佳答案
我认为您正在使用“默认”i18next 文件。您是否尝试过使用 jQuery-AMD-i18next版本?
如果您已包含 jQuery 和 AMD 版本,并且它有效,请访问:http://i18next.com/pages/doc_jquery.html
关于jquery - i18next 不与 RequireJS 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17990887/