Skip to content

Commit b32ca30

Browse files
committed
gettextCatalogProvider
Closes #117, #138.
1 parent 464e243 commit b32ca30

File tree

4 files changed

+290
-214
lines changed

4 files changed

+290
-214
lines changed

dist/angular-gettext.js

Lines changed: 178 additions & 162 deletions
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,8 @@ angular.module('gettext').constant('gettext', function (str) {
1010
return str;
1111
});
1212

13-
angular.module('gettext').factory('gettextCatalog', ["gettextPlurals", "$http", "$cacheFactory", "$interpolate", "$rootScope", function (gettextPlurals, $http, $cacheFactory, $interpolate, $rootScope) {
14-
var catalog;
15-
16-
var prefixDebug = function (string) {
17-
if (catalog.debug && catalog.currentLanguage !== catalog.baseLanguage) {
18-
return catalog.debugPrefix + string;
19-
} else {
20-
return string;
21-
}
22-
};
23-
24-
var addTranslatedMarkers = function (string) {
25-
if (catalog.showTranslatedMarkers) {
26-
return catalog.translatedMarkerPrefix + string + catalog.translatedMarkerSuffix;
27-
} else {
28-
return string;
29-
}
30-
};
31-
32-
function broadcastUpdated() {
33-
$rootScope.$broadcast('gettextLanguageChanged');
34-
}
35-
36-
catalog = {
13+
angular.module('gettext').provider('gettextCatalog', ["gettextPlurals", function (gettextPlurals) {
14+
var provider = {
3715
debug: false,
3816
debugPrefix: '[MISSING]: ',
3917
showTranslatedMarkers: false,
@@ -42,11 +20,9 @@ angular.module('gettext').factory('gettextCatalog', ["gettextPlurals", "$http",
4220
strings: {},
4321
baseLanguage: 'en',
4422
currentLanguage: 'en',
45-
cache: $cacheFactory('strings'),
4623

4724
setCurrentLanguage: function (lang) {
4825
this.currentLanguage = lang;
49-
broadcastUpdated();
5026
},
5127

5228
setStrings: function (language, strings) {
@@ -62,43 +38,82 @@ angular.module('gettext').factory('gettextCatalog', ["gettextPlurals", "$http",
6238
this.strings[language][key] = val;
6339
}
6440
}
65-
66-
broadcastUpdated();
6741
},
6842

6943
getStringForm: function (string, n) {
7044
var stringTable = this.strings[this.currentLanguage] || {};
7145
var plurals = stringTable[string] || [];
7246
return plurals[n];
73-
},
47+
}
48+
};
7449

75-
getString: function (string, context) {
76-
string = this.getStringForm(string, 0) || prefixDebug(string);
77-
string = context ? $interpolate(string)(context) : string;
78-
return addTranslatedMarkers(string);
79-
},
50+
angular.extend(this, provider);
8051

81-
getPlural: function (n, string, stringPlural, context) {
82-
var form = gettextPlurals(this.currentLanguage, n);
83-
string = this.getStringForm(string, form) || prefixDebug(n === 1 ? string : stringPlural);
84-
string = context ? $interpolate(string)(context) : string;
85-
return addTranslatedMarkers(string);
86-
},
52+
var self = this;
53+
this.$get = /* @ngInject */ ["$http", "$interpolate", "$cacheFactory", "$rootScope", function ($http, $interpolate, $cacheFactory, $rootScope) {
54+
function Catalog(options) {
55+
angular.extend(this, options);
56+
var self = this;
57+
58+
var prefixDebug = function (string) {
59+
if (self.debug && self.currentLanguage !== self.baseLanguage) {
60+
return self.debugPrefix + string;
61+
} else {
62+
return string;
63+
}
64+
};
8765

88-
loadRemote: function (url) {
89-
return $http({
90-
method: 'GET',
91-
url: url,
92-
cache: catalog.cache
93-
}).success(function (data) {
94-
for (var lang in data) {
95-
catalog.setStrings(lang, data[lang]);
66+
var addTranslatedMarkers = function (string) {
67+
if (self.showTranslatedMarkers) {
68+
return self.translatedMarkerPrefix + string + self.translatedMarkerSuffix;
69+
} else {
70+
return string;
9671
}
97-
});
72+
};
73+
74+
function broadcastUpdated() {
75+
$rootScope.$broadcast('gettextLanguageChanged');
76+
}
77+
78+
this.setCurrentLanguage = function () {
79+
options.setCurrentLanguage.apply(this, arguments);
80+
broadcastUpdated();
81+
};
82+
83+
this.setStrings = function () {
84+
options.setStrings.apply(this, arguments);
85+
broadcastUpdated();
86+
};
87+
88+
this.getString = function (string, context) {
89+
string = this.getStringForm(string, 0) || prefixDebug(string);
90+
string = context ? $interpolate(string)(context) : string;
91+
return addTranslatedMarkers(string);
92+
};
93+
94+
this.getPlural = function (n, string, stringPlural, context) {
95+
var form = gettextPlurals(this.currentLanguage, n);
96+
string = this.getStringForm(string, form) || prefixDebug(n === 1 ? string : stringPlural);
97+
string = context ? $interpolate(string)(context) : string;
98+
return addTranslatedMarkers(string);
99+
};
100+
101+
this.loadRemote = function (url) {
102+
return $http({
103+
method: 'GET',
104+
url: url,
105+
cache: self.cache
106+
}).success(function (data) {
107+
for (var lang in data) {
108+
self.setStrings(lang, data[lang]);
109+
}
110+
});
111+
};
98112
}
99-
};
100113

101-
return catalog;
114+
self.cache = self.cache || $cacheFactory('strings');
115+
return new Catalog(self);
116+
}];
102117
}]);
103118

104119
angular.module('gettext').directive('translate', ["gettextCatalog", "$parse", "$animate", "$compile", function (gettextCatalog, $parse, $animate, $compile) {
@@ -179,116 +194,117 @@ angular.module('gettext').filter('translate', ["gettextCatalog", function (gette
179194
}]);
180195

181196
// Do not edit this file, it is autogenerated using genplurals.py!
182-
angular.module("gettext").factory("gettextPlurals", function () {
183-
return function (langCode, n) {
184-
switch (langCode) {
185-
case "ay": // Aymará
186-
case "bo": // Tibetan
187-
case "cgg": // Chiga
188-
case "dz": // Dzongkha
189-
case "fa": // Persian
190-
case "id": // Indonesian
191-
case "ja": // Japanese
192-
case "jbo": // Lojban
193-
case "ka": // Georgian
194-
case "kk": // Kazakh
195-
case "km": // Khmer
196-
case "ko": // Korean
197-
case "ky": // Kyrgyz
198-
case "lo": // Lao
199-
case "ms": // Malay
200-
case "my": // Burmese
201-
case "sah": // Yakut
202-
case "su": // Sundanese
203-
case "th": // Thai
204-
case "tt": // Tatar
205-
case "ug": // Uyghur
206-
case "vi": // Vietnamese
207-
case "wo": // Wolof
208-
case "zh": // Chinese
209-
// 1 form
210-
return 0;
211-
case "is": // Icelandic
212-
// 2 forms
213-
return (n%10!=1 || n%100==11) ? 1 : 0;
214-
case "jv": // Javanese
215-
// 2 forms
216-
return n!=0 ? 1 : 0;
217-
case "mk": // Macedonian
218-
// 2 forms
219-
return n==1 || n%10==1 ? 0 : 1;
220-
case "ach": // Acholi
221-
case "ak": // Akan
222-
case "am": // Amharic
223-
case "arn": // Mapudungun
224-
case "br": // Breton
225-
case "fil": // Filipino
226-
case "fr": // French
227-
case "gun": // Gun
228-
case "ln": // Lingala
229-
case "mfe": // Mauritian Creole
230-
case "mg": // Malagasy
231-
case "mi": // Maori
232-
case "oc": // Occitan
233-
case "pt_BR": // Brazilian Portuguese
234-
case "tg": // Tajik
235-
case "ti": // Tigrinya
236-
case "tr": // Turkish
237-
case "uz": // Uzbek
238-
case "wa": // Walloon
239-
case "zh": // Chinese
240-
// 2 forms
241-
return n>1 ? 1 : 0;
242-
case "lv": // Latvian
243-
// 3 forms
244-
return (n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);
245-
case "lt": // Lithuanian
246-
// 3 forms
247-
return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);
248-
case "be": // Belarusian
249-
case "bs": // Bosnian
250-
case "hr": // Croatian
251-
case "ru": // Russian
252-
case "sr": // Serbian
253-
case "uk": // Ukrainian
254-
// 3 forms
255-
return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
256-
case "mnk": // Mandinka
257-
// 3 forms
258-
return (n==0 ? 0 : n==1 ? 1 : 2);
259-
case "ro": // Romanian
260-
// 3 forms
261-
return (n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);
262-
case "pl": // Polish
263-
// 3 forms
264-
return (n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
265-
case "cs": // Czech
266-
case "sk": // Slovak
267-
// 3 forms
268-
return (n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;
269-
case "sl": // Slovenian
270-
// 4 forms
271-
return (n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);
272-
case "mt": // Maltese
273-
// 4 forms
274-
return (n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3);
275-
case "gd": // Scottish Gaelic
276-
// 4 forms
277-
return (n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;
278-
case "cy": // Welsh
279-
// 4 forms
280-
return (n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;
281-
case "kw": // Cornish
282-
// 4 forms
283-
return (n==1) ? 0 : (n==2) ? 1 : (n == 3) ? 2 : 3;
284-
case "ga": // Irish
285-
// 5 forms
286-
return n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4;
287-
case "ar": // Arabic
288-
// 6 forms
289-
return (n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5);
290-
default: // Everything else
291-
return n != 1 ? 1 : 0;
292-
}
197+
angular.module("gettext").constant("gettextPlurals", function (langCode, n) {
198+
switch (langCode) {
199+
case "ay": // Aymará
200+
case "bo": // Tibetan
201+
case "cgg": // Chiga
202+
case "dz": // Dzongkha
203+
case "fa": // Persian
204+
case "id": // Indonesian
205+
case "ja": // Japanese
206+
case "jbo": // Lojban
207+
case "ka": // Georgian
208+
case "kk": // Kazakh
209+
case "km": // Khmer
210+
case "ko": // Korean
211+
case "ky": // Kyrgyz
212+
case "lo": // Lao
213+
case "ms": // Malay
214+
case "my": // Burmese
215+
case "sah": // Yakut
216+
case "su": // Sundanese
217+
case "th": // Thai
218+
case "tt": // Tatar
219+
case "ug": // Uyghur
220+
case "vi": // Vietnamese
221+
case "wo": // Wolof
222+
case "zh": // Chinese
223+
// 1 form
224+
return 0;
225+
case "is": // Icelandic
226+
// 2 forms
227+
return (n%10!=1 || n%100==11) ? 1 : 0;
228+
case "jv": // Javanese
229+
// 2 forms
230+
return n!=0 ? 1 : 0;
231+
case "mk": // Macedonian
232+
// 2 forms
233+
return n==1 || n%10==1 ? 0 : 1;
234+
case "ach": // Acholi
235+
case "ak": // Akan
236+
case "am": // Amharic
237+
case "arn": // Mapudungun
238+
case "br": // Breton
239+
case "fil": // Filipino
240+
case "fr": // French
241+
case "gun": // Gun
242+
case "ln": // Lingala
243+
case "mfe": // Mauritian Creole
244+
case "mg": // Malagasy
245+
case "mi": // Maori
246+
case "oc": // Occitan
247+
case "pt_BR": // Brazilian Portuguese
248+
case "tg": // Tajik
249+
case "ti": // Tigrinya
250+
case "tr": // Turkish
251+
case "uz": // Uzbek
252+
case "wa": // Walloon
253+
case "zh": // Chinese
254+
// 2 forms
255+
return n>1 ? 1 : 0;
256+
case "lv": // Latvian
257+
// 3 forms
258+
return (n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);
259+
case "lt": // Lithuanian
260+
// 3 forms
261+
return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);
262+
case "be": // Belarusian
263+
case "bs": // Bosnian
264+
case "hr": // Croatian
265+
case "ru": // Russian
266+
case "sr": // Serbian
267+
case "uk": // Ukrainian
268+
// 3 forms
269+
return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
270+
case "mnk": // Mandinka
271+
// 3 forms
272+
return (n==0 ? 0 : n==1 ? 1 : 2);
273+
case "ro": // Romanian
274+
// 3 forms
275+
return (n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);
276+
case "pl": // Polish
277+
// 3 forms
278+
return (n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
279+
case "cs": // Czech
280+
case "sk": // Slovak
281+
// 3 forms
282+
return (n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;
283+
case "csb": // Kashubian
284+
// 3 forms
285+
return (n==1) ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;
286+
case "sl": // Slovenian
287+
// 4 forms
288+
return (n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);
289+
case "mt": // Maltese
290+
// 4 forms
291+
return (n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3);
292+
case "gd": // Scottish Gaelic
293+
// 4 forms
294+
return (n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;
295+
case "cy": // Welsh
296+
// 4 forms
297+
return (n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;
298+
case "kw": // Cornish
299+
// 4 forms
300+
return (n==1) ? 0 : (n==2) ? 1 : (n == 3) ? 2 : 3;
301+
case "ga": // Irish
302+
// 5 forms
303+
return (n==1) ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4;
304+
case "ar": // Arabic
305+
// 6 forms
306+
return (n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5);
307+
default: // Everything else
308+
return n != 1 ? 1 : 0;
293309
}
294310
});

0 commit comments

Comments
 (0)