Javascript i18n的jquery扩展
我有一个单页应用程序。我使用RequireJS、BackboneJS等,在main.js中有以下代码Javascript i18n的jquery扩展,javascript,jquery,internationalization,Javascript,Jquery,Internationalization,我有一个单页应用程序。我使用RequireJS、BackboneJS等,在main.js中有以下代码 var myapp = { "i18n": { "myTranslationFile": "my-translations" } }; 在main.js中也是这样 require([ 'app', // i18n utility 'util/i18n' ], function(app, i18n){
var myapp = {
"i18n": {
"myTranslationFile": "my-translations"
}
};
在main.js中也是这样
require([
'app',
// i18n utility
'util/i18n'
], function(app, i18n){
myapp.i18n = $.extend(true, {}, i18n, myapp.i18n);
});
只是补充一下,i18n.js如下所示
define({
"lang": function( key, valArr ){
var str = this._translated_strings[key] || key;
return str;
},
"setLang": function( obj ){
this._translated_strings = $.extend(true, {}, obj);
},
"load": function(){
var self = this,
rootDeferred = new $.Deferred(),
i18nDeferred = new $.Deferred();
require([
// Root translations
// Active translations
],
function(root, active){
//rootDeferred.resolve();
});
rootDeferred.done(function(root, activeLang){
var lang = $("html").attr("lang"),
finalTranslations = {};
if (
typeof lang !== "undefined" &&
typeof activeLang[lang] !== "undefined" &&
activeLang[lang] === true
) {
require(['resources/i18n/' + lang + '/' + self.myTranslationFile],
function(translations){
self.setLang(finalTranslations);
});
} else {
self.setLang(finalTranslations);
}
});
return i18nDeferred;
}
});
现在在我看来,我使用以下代码用翻译文件中定义的字符串替换键
myapp.i18n.lang("myKeyForString")
我无法理解这是如何工作的?
我的意思是我可以清楚地看到我的app.i18n
但是myapp.i18n.lang来自哪里?
这与jquery扩展有关吗?在您的代码中,它是这样的:
extend
将两个或多个对象的内容合并到第一个对象中。您的详细参数如下:
myapp.i18n=$.extend(true,{},i18n,myapp.i18n)代码>
- true-合并变为递归(也称为深度复制)
- {}-目标,要扩展的对象。它将接收新属性
- i18n-包含要合并的其他属性的对象(函数参数)
- myapp.i18n-包含要合并的属性的其他对象(原始对象)
结果:myapp.i18n现在包含旧的静态键/值以及来自i18n的方法
这就是如何在视图中使用mapp.i18n.lang作为函数的方法。您正在使用此代码扩展
myapp.i18n
myapp.i18n=$.extend(true,{},i18n,myapp.i18n)代码>。来自规范:“扩展-将两个或多个对象的内容合并到第一个对象中。”-i18n.js中的define方法包含一个对象,该对象随后扩展myapp.i18n对象。因此,您可以使用myapp.i18n.lang、myapp.i18n.setlang等。