-
Notifications
You must be signed in to change notification settings - Fork 153
Expand file tree
/
Copy pathcatalog.js
More file actions
94 lines (79 loc) · 2.9 KB
/
catalog.js
File metadata and controls
94 lines (79 loc) · 2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
angular.module('gettext').factory('gettextCatalog', function (gettextPlurals, $http, $cacheFactory, $interpolate, $rootScope) {
var catalog;
var prefixDebug = function (string) {
if (catalog.debug && catalog.currentLanguage !== catalog.baseLanguage) {
return catalog.debugPrefix + string;
} else {
return string;
}
};
var addTranslatedMarkers = function (string) {
if (catalog.showTranslatedMarkers) {
return catalog.translatedMarkerPrefix + string + catalog.translatedMarkerSuffix;
} else {
return string;
}
};
function broadcastUpdated() {
$rootScope.$broadcast('gettextLanguageChanged');
}
catalog = {
debug: false,
debugPrefix: '[MISSING]: ',
showTranslatedMarkers: false,
translatedMarkerPrefix: '[',
translatedMarkerSuffix: ']',
strings: {},
baseLanguage: 'en',
currentLanguage: 'en',
cache: $cacheFactory('strings'),
setCurrentLanguage: function (lang) {
this.currentLanguage = lang;
broadcastUpdated();
},
setStrings: function (language, strings) {
if (!this.strings[language]) {
this.strings[language] = {};
}
for (var key in strings) {
var val = strings[key];
if (typeof val === 'string') {
this.strings[language][key] = [val];
} else {
this.strings[language][key] = val;
}
}
broadcastUpdated();
},
getStringForm: function (string, n) {
var stringTable = this.strings[this.currentLanguage] || {};
var plurals = stringTable[string] || [];
return plurals[n];
},
getString: function (string, context) {
string = this.getStringForm(string, 0) || prefixDebug(string);
string = context ? $interpolate(string)(context) : string;
return addTranslatedMarkers(string);
},
getPlural: function (n, string, stringPlural, context) {
var form = gettextPlurals(this.currentLanguage, n);
string = this.getStringForm(string, form) || prefixDebug(n === 1 ? string : stringPlural);
// Replace {} pattern with number
string = string.replace(/\{\}/g, n);
string = context ? $interpolate(string)(context) : string;
return addTranslatedMarkers(string);
},
loadRemote: function (url) {
return $http({
method: 'GET',
url: url,
cache: catalog.cache
}).success(function (data) {
for (var lang in data) {
catalog.setStrings(lang, data[lang]);
}
});
}
};
return catalog;
});