3
3
var mongoose = require ( 'mongoose' ) ;
4
4
5
5
var locales = [ 'en' , 'ru' ] ;
6
+ var locale = 'en' ;
6
7
7
8
( function ( ) {
8
9
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();
10
15
var keys = Object . keys ( obj ) ;
16
+
17
+ if ( keys . length == 1 && keys == '_id' ) return obj ;
18
+
11
19
var ret = { } ;
12
20
13
21
for ( var i = 0 ; i < keys . length ; ++ i ) {
14
22
var key = keys [ i ] ;
15
23
var val = obj [ key ] ;
16
24
25
+ if ( key === 'type' ) {
26
+ ret [ key ] = val ;
27
+ continue ;
28
+ }
29
+
17
30
if ( typeof val != "object" ) {
18
31
ret [ key ] = val ;
19
32
continue ;
20
33
} ;
21
34
35
+ if ( val instanceof Array ) {
36
+ ret [ key ] = val ;
37
+ continue ;
38
+ } ;
39
+
22
40
var kkeys = Object . keys ( val ) ;
23
41
var localize = false ;
24
42
for ( var ii = 0 ; ii < kkeys . length ; ++ ii ) {
25
43
var kkey = kkeys [ ii ] ;
26
44
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 )
29
47
} else {
30
48
if ( vval && kkey == "localize" ) {
31
49
localize = true ;
@@ -36,25 +54,49 @@ var locales=['en','ru'];
36
54
delete ( val . localize ) ;
37
55
var nval = { } ;
38
56
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));
40
59
}
60
+ //ret['_localized_'+key]=nval;
41
61
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
+ });*/
42
71
} else {
43
72
ret [ key ] = val ;
44
73
}
45
74
} ;
46
75
return ret ;
47
76
}
48
77
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 ) ;
50
83
} ;
51
84
} ) ( ) ;
52
85
53
86
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 ;
57
96
}
58
97
localize . locales = function ( ) {
59
98
return locales ;
60
- }
99
+ }
100
+ localize . setLocales = function ( sLocales ) {
101
+ locales = sLocales ;
102
+ }
0 commit comments