Skip to content

Commit baec82f

Browse files
committed
ensure the nested objects are working
1 parent 8018432 commit baec82f

File tree

1 file changed

+51
-9
lines changed

1 file changed

+51
-9
lines changed

index.js

Lines changed: 51 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,47 @@
33
var mongoose = require('mongoose');
44

55
var locales=['en','ru'];
6+
var locale='en';
67

78
(function(){
89
var ma = mongoose.Schema.prototype.add;
9-
var addI18n=function(obj){
10+
var addI18n=function(schema,obj){
11+
//console.log('====');
12+
13+
//console.log(obj);
14+
//console.trace();
1015
var keys = Object.keys(obj);
16+
17+
if (keys.length==1 && keys=='_id') return obj;
18+
1119
var ret={};
1220

1321
for (var i = 0; i < keys.length; ++i) {
1422
var key = keys[i];
1523
var val = obj[key];
1624

25+
if (key==='type'){
26+
ret[key]=val;
27+
continue;
28+
}
29+
1730
if (typeof val != "object") {
1831
ret[key]=val;
1932
continue;
2033
};
2134

35+
if (val instanceof Array) {
36+
ret[key]=val;
37+
continue;
38+
};
39+
2240
var kkeys=Object.keys(val);
2341
var localize=false;
2442
for (var ii=0; ii<kkeys.length;++ii){
2543
var kkey=kkeys[ii];
2644
var vval=val[kkey];
27-
if (typeof vval=="object"){
28-
val[kkey]=addI18n(vval)
45+
if (typeof vval==="object"){
46+
val[kkey]=addI18n(schema,vval)
2947
}else{
3048
if (vval && kkey=="localize"){
3149
localize=true;
@@ -36,25 +54,49 @@ var locales=['en','ru'];
3654
delete(val.localize);
3755
var nval={};
3856
for (var j=0;j<locales.length;j++){
39-
nval[locales[j]]=val;// TODO: let's try to live without copy JSON.parse(JSON.stringify(va));
57+
nval[locales[j]]=val;// Note: must live without copy JSON.parse(JSON.stringify(va)) because of [Function];
58+
//nval[locales[j]]=JSON.parse(JSON.stringify(val));
4059
}
60+
//ret['_localized_'+key]=nval;
4161
ret[key]=nval;
62+
schema.virtual('localized.'+key)
63+
.get(function(value,virtual){
64+
var n=virtual.path.substring(10);
65+
return this[n][locale];
66+
})/*
67+
.set(function(value,virtual){
68+
var n=virtual.path.substring(10);
69+
this[n]=value;
70+
});*/
4271
}else{
4372
ret[key]=val;
4473
}
4574
};
4675
return ret;
4776
}
4877
mongoose.Schema.prototype.add = function add (obj, prefix) {
49-
ma.call(this,addI18n(obj),prefix);
78+
//console.log({in:obj})
79+
//console.trace();
80+
var oobj=addI18n(this,obj);
81+
//console.log({out:oobj})
82+
ma.call(this,oobj,prefix);
5083
};
5184
})();
5285

5386
var localize=module.exports = function(opt){
54-
return {
55-
56-
}
87+
if (opt.locales) locales=opt.locales;
88+
if (opt.locale) locale=opt.locale;
89+
return {}
90+
}
91+
localize.locale=function(){
92+
return locale;
93+
}
94+
localize.setLocale=function(sLocale){
95+
locale=sLocale;
5796
}
5897
localize.locales=function(){
5998
return locales;
60-
}
99+
}
100+
localize.setLocales=function(sLocales){
101+
locales=sLocales;
102+
}

0 commit comments

Comments
 (0)