@@ -10,8 +10,7 @@ angular.module('gettext').constant('gettext', function (str) {
10
10
return str ;
11
11
} ) ;
12
12
13
- angular . module ( 'gettext' ) . factory ( 'gettextCatalog' , [ "gettextPlurals" , "$http" , "$cacheFactory" , "$interpolate" , "$rootScope" , function ( gettextPlurals , $http , $cacheFactory , $interpolate , $rootScope ) {
14
- var catalog ;
13
+ angular . module ( 'gettext' ) . provider ( 'gettextCatalog' , [ "gettextPlurals" , function ( gettextPlurals ) {
15
14
var noContext = '$$noContext' ;
16
15
17
16
// IE8 returns UPPER CASE tags, even though the source is lower case.
@@ -20,27 +19,7 @@ angular.module('gettext').factory('gettextCatalog', ["gettextPlurals", "$http",
20
19
var test = '<span>test</span>' ;
21
20
var isUpperCaseTags = ( angular . element ( '<span>' + test + '</span>' ) . html ( ) !== test ) ;
22
21
23
- var prefixDebug = function ( string ) {
24
- if ( catalog . debug && catalog . currentLanguage !== catalog . baseLanguage ) {
25
- return catalog . debugPrefix + string ;
26
- } else {
27
- return string ;
28
- }
29
- } ;
30
-
31
- var addTranslatedMarkers = function ( string ) {
32
- if ( catalog . showTranslatedMarkers ) {
33
- return catalog . translatedMarkerPrefix + string + catalog . translatedMarkerSuffix ;
34
- } else {
35
- return string ;
36
- }
37
- } ;
38
-
39
- function broadcastUpdated ( ) {
40
- $rootScope . $broadcast ( 'gettextLanguageChanged' ) ;
41
- }
42
-
43
- catalog = {
22
+ var provider = {
44
23
debug : false ,
45
24
debugPrefix : '[MISSING]: ' ,
46
25
showTranslatedMarkers : false ,
@@ -49,11 +28,9 @@ angular.module('gettext').factory('gettextCatalog', ["gettextPlurals", "$http",
49
28
strings : { } ,
50
29
baseLanguage : 'en' ,
51
30
currentLanguage : 'en' ,
52
- cache : $cacheFactory ( 'strings' ) ,
53
31
54
32
setCurrentLanguage : function ( lang ) {
55
33
this . currentLanguage = lang ;
56
- broadcastUpdated ( ) ;
57
34
} ,
58
35
59
36
setStrings : function ( language , strings ) {
@@ -83,47 +60,86 @@ angular.module('gettext').factory('gettextCatalog', ["gettextPlurals", "$http",
83
60
}
84
61
this . strings [ language ] [ key ] = val ;
85
62
}
86
-
87
- broadcastUpdated ( ) ;
88
63
} ,
89
64
90
65
getStringForm : function ( string , n , context ) {
91
66
var stringTable = this . strings [ this . currentLanguage ] || { } ;
92
67
var contexts = stringTable [ string ] || { } ;
93
68
var plurals = contexts [ context || noContext ] || [ ] ;
94
69
return plurals [ n ] ;
95
- } ,
70
+ }
71
+ } ;
96
72
97
- getString : function ( string , scope , context ) {
98
- string = this . getStringForm ( string , 0 , context ) || prefixDebug ( string ) ;
99
- string = scope ? $interpolate ( string ) ( scope ) : string ;
100
- return addTranslatedMarkers ( string ) ;
101
- } ,
73
+ angular . extend ( this , provider ) ;
74
+
75
+ var self = this ;
76
+ this . $get = /* @ngInject */ [ "$http" , "$interpolate" , "$cacheFactory" , "$rootScope" , function ( $http , $interpolate , $cacheFactory , $rootScope ) {
77
+ function Catalog ( options ) {
78
+ angular . extend ( this , options ) ;
79
+ var self = this ;
80
+
81
+ var prefixDebug = function ( string ) {
82
+ if ( self . debug && self . currentLanguage !== self . baseLanguage ) {
83
+ return self . debugPrefix + string ;
84
+ } else {
85
+ return string ;
86
+ }
87
+ } ;
102
88
103
- getPlural : function ( n , string , stringPlural , scope , context ) {
104
- var form = gettextPlurals ( this . currentLanguage , n ) ;
105
- string = this . getStringForm ( string , form , context ) || prefixDebug ( n === 1 ? string : stringPlural ) ;
106
- if ( scope ) {
107
- scope . $count = n ;
108
- string = $interpolate ( string ) ( scope ) ;
89
+ var addTranslatedMarkers = function ( string ) {
90
+ if ( self . showTranslatedMarkers ) {
91
+ return self . translatedMarkerPrefix + string + self . translatedMarkerSuffix ;
92
+ } else {
93
+ return string ;
94
+ }
95
+ } ;
96
+
97
+ function broadcastUpdated ( ) {
98
+ $rootScope . $broadcast ( 'gettextLanguageChanged' ) ;
109
99
}
110
- return addTranslatedMarkers ( string ) ;
111
- } ,
112
100
113
- loadRemote : function ( url ) {
114
- return $http ( {
115
- method : 'GET' ,
116
- url : url ,
117
- cache : catalog . cache
118
- } ) . success ( function ( data ) {
119
- for ( var lang in data ) {
120
- catalog . setStrings ( lang , data [ lang ] ) ;
101
+ this . setCurrentLanguage = function ( ) {
102
+ options . setCurrentLanguage . apply ( this , arguments ) ;
103
+ broadcastUpdated ( ) ;
104
+ } ;
105
+
106
+ this . setStrings = function ( ) {
107
+ options . setStrings . apply ( this , arguments ) ;
108
+ broadcastUpdated ( ) ;
109
+ } ;
110
+
111
+ this . getString = function ( string , scope , context ) {
112
+ string = this . getStringForm ( string , 0 , context ) || prefixDebug ( string ) ;
113
+ string = scope ? $interpolate ( string ) ( scope ) : string ;
114
+ return addTranslatedMarkers ( string ) ;
115
+ } ;
116
+
117
+ this . getPlural = function ( n , string , stringPlural , scope , context ) {
118
+ var form = gettextPlurals ( this . currentLanguage , n ) ;
119
+ string = this . getStringForm ( string , form , context ) || prefixDebug ( n === 1 ? string : stringPlural ) ;
120
+ if ( scope ) {
121
+ scope . $count = n ;
122
+ string = $interpolate ( string ) ( scope ) ;
121
123
}
122
- } ) ;
124
+ return addTranslatedMarkers ( string ) ;
125
+ } ;
126
+
127
+ this . loadRemote = function ( url ) {
128
+ return $http ( {
129
+ method : 'GET' ,
130
+ url : url ,
131
+ cache : self . cache
132
+ } ) . success ( function ( data ) {
133
+ for ( var lang in data ) {
134
+ self . setStrings ( lang , data [ lang ] ) ;
135
+ }
136
+ } ) ;
137
+ } ;
123
138
}
124
- } ;
125
139
126
- return catalog ;
140
+ self . cache = self . cache || $cacheFactory ( 'strings' ) ;
141
+ return new Catalog ( self ) ;
142
+ } ] ;
127
143
} ] ) ;
128
144
129
145
angular . module ( 'gettext' ) . directive ( 'translate' , [ "gettextCatalog" , "$parse" , "$animate" , "$compile" , "$window" , function ( gettextCatalog , $parse , $animate , $compile , $window ) {
@@ -215,116 +231,117 @@ angular.module('gettext').filter('translate', ["gettextCatalog", function (gette
215
231
} ] ) ;
216
232
217
233
// Do not edit this file, it is autogenerated using genplurals.py!
218
- angular . module ( "gettext" ) . factory ( "gettextPlurals" , function ( ) {
219
- return function ( langCode , n ) {
220
- switch ( langCode ) {
221
- case "ay" : // Aymará
222
- case "bo" : // Tibetan
223
- case "cgg" : // Chiga
224
- case "dz" : // Dzongkha
225
- case "fa" : // Persian
226
- case "id" : // Indonesian
227
- case "ja" : // Japanese
228
- case "jbo" : // Lojban
229
- case "ka" : // Georgian
230
- case "kk" : // Kazakh
231
- case "km" : // Khmer
232
- case "ko" : // Korean
233
- case "ky" : // Kyrgyz
234
- case "lo" : // Lao
235
- case "ms" : // Malay
236
- case "my" : // Burmese
237
- case "sah" : // Yakut
238
- case "su" : // Sundanese
239
- case "th" : // Thai
240
- case "tt" : // Tatar
241
- case "ug" : // Uyghur
242
- case "vi" : // Vietnamese
243
- case "wo" : // Wolof
244
- case "zh" : // Chinese
245
- // 1 form
246
- return 0 ;
247
- case "is" : // Icelandic
248
- // 2 forms
249
- return ( n % 10 != 1 || n % 100 == 11 ) ? 1 : 0 ;
250
- case "jv" : // Javanese
251
- // 2 forms
252
- return n != 0 ? 1 : 0 ;
253
- case "mk" : // Macedonian
254
- // 2 forms
255
- return n == 1 || n % 10 == 1 ? 0 : 1 ;
256
- case "ach" : // Acholi
257
- case "ak" : // Akan
258
- case "am" : // Amharic
259
- case "arn" : // Mapudungun
260
- case "br" : // Breton
261
- case "fil" : // Filipino
262
- case "fr" : // French
263
- case "gun" : // Gun
264
- case "ln" : // Lingala
265
- case "mfe" : // Mauritian Creole
266
- case "mg" : // Malagasy
267
- case "mi" : // Maori
268
- case "oc" : // Occitan
269
- case "pt_BR" : // Brazilian Portuguese
270
- case "tg" : // Tajik
271
- case "ti" : // Tigrinya
272
- case "tr" : // Turkish
273
- case "uz" : // Uzbek
274
- case "wa" : // Walloon
275
- case "zh" : // Chinese
276
- // 2 forms
277
- return n > 1 ? 1 : 0 ;
278
- case "lv" : // Latvian
279
- // 3 forms
280
- return ( n % 10 == 1 && n % 100 != 11 ? 0 : n != 0 ? 1 : 2 ) ;
281
- case "lt" : // Lithuanian
282
- // 3 forms
283
- return ( n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && ( n % 100 < 10 || n % 100 >= 20 ) ? 1 : 2 ) ;
284
- case "be" : // Belarusian
285
- case "bs" : // Bosnian
286
- case "hr" : // Croatian
287
- case "ru" : // Russian
288
- case "sr" : // Serbian
289
- case "uk" : // Ukrainian
290
- // 3 forms
291
- return ( n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && ( n % 100 < 10 || n % 100 >= 20 ) ? 1 : 2 ) ;
292
- case "mnk" : // Mandinka
293
- // 3 forms
294
- return ( n == 0 ? 0 : n == 1 ? 1 : 2 ) ;
295
- case "ro" : // Romanian
296
- // 3 forms
297
- return ( n == 1 ? 0 : ( n == 0 || ( n % 100 > 0 && n % 100 < 20 ) ) ? 1 : 2 ) ;
298
- case "pl" : // Polish
299
- // 3 forms
300
- return ( n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && ( n % 100 < 10 || n % 100 >= 20 ) ? 1 : 2 ) ;
301
- case "cs" : // Czech
302
- case "sk" : // Slovak
303
- // 3 forms
304
- return ( n == 1 ) ? 0 : ( n >= 2 && n <= 4 ) ? 1 : 2 ;
305
- case "sl" : // Slovenian
306
- // 4 forms
307
- return ( n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0 ) ;
308
- case "mt" : // Maltese
309
- // 4 forms
310
- return ( n == 1 ? 0 : n == 0 || ( n % 100 > 1 && n % 100 < 11 ) ? 1 : ( n % 100 > 10 && n % 100 < 20 ) ? 2 : 3 ) ;
311
- case "gd" : // Scottish Gaelic
312
- // 4 forms
313
- return ( n == 1 || n == 11 ) ? 0 : ( n == 2 || n == 12 ) ? 1 : ( n > 2 && n < 20 ) ? 2 : 3 ;
314
- case "cy" : // Welsh
315
- // 4 forms
316
- return ( n == 1 ) ? 0 : ( n == 2 ) ? 1 : ( n != 8 && n != 11 ) ? 2 : 3 ;
317
- case "kw" : // Cornish
318
- // 4 forms
319
- return ( n == 1 ) ? 0 : ( n == 2 ) ? 1 : ( n == 3 ) ? 2 : 3 ;
320
- case "ga" : // Irish
321
- // 5 forms
322
- return n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4 ;
323
- case "ar" : // Arabic
324
- // 6 forms
325
- return ( n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5 ) ;
326
- default : // Everything else
327
- return n != 1 ? 1 : 0 ;
328
- }
234
+ angular . module ( "gettext" ) . constant ( "gettextPlurals" , function ( langCode , n ) {
235
+ switch ( langCode ) {
236
+ case "ay" : // Aymará
237
+ case "bo" : // Tibetan
238
+ case "cgg" : // Chiga
239
+ case "dz" : // Dzongkha
240
+ case "fa" : // Persian
241
+ case "id" : // Indonesian
242
+ case "ja" : // Japanese
243
+ case "jbo" : // Lojban
244
+ case "ka" : // Georgian
245
+ case "kk" : // Kazakh
246
+ case "km" : // Khmer
247
+ case "ko" : // Korean
248
+ case "ky" : // Kyrgyz
249
+ case "lo" : // Lao
250
+ case "ms" : // Malay
251
+ case "my" : // Burmese
252
+ case "sah" : // Yakut
253
+ case "su" : // Sundanese
254
+ case "th" : // Thai
255
+ case "tt" : // Tatar
256
+ case "ug" : // Uyghur
257
+ case "vi" : // Vietnamese
258
+ case "wo" : // Wolof
259
+ case "zh" : // Chinese
260
+ // 1 form
261
+ return 0 ;
262
+ case "is" : // Icelandic
263
+ // 2 forms
264
+ return ( n % 10 != 1 || n % 100 == 11 ) ? 1 : 0 ;
265
+ case "jv" : // Javanese
266
+ // 2 forms
267
+ return n != 0 ? 1 : 0 ;
268
+ case "mk" : // Macedonian
269
+ // 2 forms
270
+ return n == 1 || n % 10 == 1 ? 0 : 1 ;
271
+ case "ach" : // Acholi
272
+ case "ak" : // Akan
273
+ case "am" : // Amharic
274
+ case "arn" : // Mapudungun
275
+ case "br" : // Breton
276
+ case "fil" : // Filipino
277
+ case "fr" : // French
278
+ case "gun" : // Gun
279
+ case "ln" : // Lingala
280
+ case "mfe" : // Mauritian Creole
281
+ case "mg" : // Malagasy
282
+ case "mi" : // Maori
283
+ case "oc" : // Occitan
284
+ case "pt_BR" : // Brazilian Portuguese
285
+ case "tg" : // Tajik
286
+ case "ti" : // Tigrinya
287
+ case "tr" : // Turkish
288
+ case "uz" : // Uzbek
289
+ case "wa" : // Walloon
290
+ case "zh" : // Chinese
291
+ // 2 forms
292
+ return n > 1 ? 1 : 0 ;
293
+ case "lv" : // Latvian
294
+ // 3 forms
295
+ return ( n % 10 == 1 && n % 100 != 11 ? 0 : n != 0 ? 1 : 2 ) ;
296
+ case "lt" : // Lithuanian
297
+ // 3 forms
298
+ return ( n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && ( n % 100 < 10 || n % 100 >= 20 ) ? 1 : 2 ) ;
299
+ case "be" : // Belarusian
300
+ case "bs" : // Bosnian
301
+ case "hr" : // Croatian
302
+ case "ru" : // Russian
303
+ case "sr" : // Serbian
304
+ case "uk" : // Ukrainian
305
+ // 3 forms
306
+ return ( n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && ( n % 100 < 10 || n % 100 >= 20 ) ? 1 : 2 ) ;
307
+ case "mnk" : // Mandinka
308
+ // 3 forms
309
+ return ( n == 0 ? 0 : n == 1 ? 1 : 2 ) ;
310
+ case "ro" : // Romanian
311
+ // 3 forms
312
+ return ( n == 1 ? 0 : ( n == 0 || ( n % 100 > 0 && n % 100 < 20 ) ) ? 1 : 2 ) ;
313
+ case "pl" : // Polish
314
+ // 3 forms
315
+ return ( n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && ( n % 100 < 10 || n % 100 >= 20 ) ? 1 : 2 ) ;
316
+ case "cs" : // Czech
317
+ case "sk" : // Slovak
318
+ // 3 forms
319
+ return ( n == 1 ) ? 0 : ( n >= 2 && n <= 4 ) ? 1 : 2 ;
320
+ case "csb" : // Kashubian
321
+ // 3 forms
322
+ return ( n == 1 ) ? 0 : n % 10 >= 2 && n % 10 <= 4 && ( n % 100 < 10 || n % 100 >= 20 ) ? 1 : 2 ;
323
+ case "sl" : // Slovenian
324
+ // 4 forms
325
+ return ( n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0 ) ;
326
+ case "mt" : // Maltese
327
+ // 4 forms
328
+ return ( n == 1 ? 0 : n == 0 || ( n % 100 > 1 && n % 100 < 11 ) ? 1 : ( n % 100 > 10 && n % 100 < 20 ) ? 2 : 3 ) ;
329
+ case "gd" : // Scottish Gaelic
330
+ // 4 forms
331
+ return ( n == 1 || n == 11 ) ? 0 : ( n == 2 || n == 12 ) ? 1 : ( n > 2 && n < 20 ) ? 2 : 3 ;
332
+ case "cy" : // Welsh
333
+ // 4 forms
334
+ return ( n == 1 ) ? 0 : ( n == 2 ) ? 1 : ( n != 8 && n != 11 ) ? 2 : 3 ;
335
+ case "kw" : // Cornish
336
+ // 4 forms
337
+ return ( n == 1 ) ? 0 : ( n == 2 ) ? 1 : ( n == 3 ) ? 2 : 3 ;
338
+ case "ga" : // Irish
339
+ // 5 forms
340
+ return ( n == 1 ) ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4 ;
341
+ case "ar" : // Arabic
342
+ // 6 forms
343
+ return ( n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5 ) ;
344
+ default : // Everything else
345
+ return n != 1 ? 1 : 0 ;
329
346
}
330
347
} ) ;
0 commit comments