Skip to content

Commit b620b9f

Browse files
Refactoring localized messages service based on PR review
1 parent 6f2c8f5 commit b620b9f

File tree

2 files changed

+27
-81
lines changed

2 files changed

+27
-81
lines changed
+11-25
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,17 @@
1-
angular.module('services.localizedMessages', []).factory('localizedMessages', ['$locale', '$interpolate', 'I18N.MESSAGES', 'I18N.DEFAULT_LOCALE', function ($locale, $interpolate, i18nmessages, i18ndefaultLocale) {
1+
angular.module('services.localizedMessages', []).factory('localizedMessages', ['$interpolate', 'I18N.MESSAGES', function ($interpolate, i18nmessages) {
22

3-
var defaultLocale = i18ndefaultLocale;
4-
var getForLocale = function(locale, msgKey, handleNotFound) {
5-
return (i18nmessages[locale] || {})[msgKey];
3+
var handleNotFound = function (msg, msgKey) {
4+
return msg || '?' + msgKey + '?';
65
};
76

8-
var handleNotFound = function(msg, msgKey) {
9-
return msg || '?'+msgKey+'?';
10-
};
11-
12-
var msgService = {};
13-
msgService.get = function(msgKey, interpolateParams) {
14-
return msgService.getForLocale(msgKey, $locale.id, interpolateParams)
15-
};
16-
17-
msgService.getForLocale = function(msgKey, locale, interpolateParams) {
18-
var msgForLocale = getForLocale(locale || $locale.id, msgKey);
19-
if (!msgForLocale && locale !== defaultLocale) {
20-
msgForLocale = getForLocale(defaultLocale, msgKey, true);
21-
}
22-
23-
if (msgForLocale) {
24-
return $interpolate(msgForLocale)(interpolateParams);
7+
return {
8+
get : function (msgKey, interpolateParams) {
9+
var msg = i18nmessages[msgKey];
10+
if (msg) {
11+
return $interpolate(msg)(interpolateParams);
2512
} else {
26-
return handleNotFound(msgForLocale, msgKey);
13+
return handleNotFound(msg, msgKey);
2714
}
28-
};
29-
30-
return msgService;
15+
}
16+
};
3117
}]);
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,31 @@
11
describe('localized messages', function () {
22

3-
var $locale, localizedMessages, messages;
3+
var localizedMessages, messages;
44
beforeEach(function () {
5-
angular.module('test',['services.localizedMessages'])
6-
.value('I18N.MESSAGES', messages = {})
7-
.constant('I18N.DEFAULT_LOCALE', 'en-us');
5+
angular.module('test', ['services.localizedMessages']).value('I18N.MESSAGES', messages = {});
86
module('test');
97
});
10-
beforeEach(inject(function (_$locale_, _localizedMessages_) {
11-
$locale = _$locale_;
8+
beforeEach(inject(function (_localizedMessages_) {
129
localizedMessages = _localizedMessages_;
1310
}));
1411

15-
describe('messages for the current locale', function () {
16-
17-
it('should return a localized message if defined', function () {
18-
messages['en-us'] = {existing:'Existing message!'};
19-
expect(localizedMessages.get('existing')).toEqual('Existing message!');
20-
});
21-
22-
it('should return a message key surrounded by a question mark for non-existing messages', function () {
23-
expect(localizedMessages.get('non.existing')).toEqual('?non.existing?');
24-
});
12+
it('should return a localized message if defined', function () {
13+
messages.existing = 'Existing message!';
14+
expect(localizedMessages.get('existing')).toEqual('Existing message!');
2515
});
2616

27-
describe('messages for a specified locale', function () {
28-
29-
it('should return a message for a specified locale if exists', function () {
30-
messages['fr-fr'] = {sth:'quelque chose'};
31-
expect(localizedMessages.getForLocale('sth', 'fr-fr')).toEqual('quelque chose');
32-
});
33-
34-
it('should return a message from the default locale if doesnt exist in a specified one', function () {
35-
messages['en-us'] = {sth:'something'};
36-
expect(localizedMessages.getForLocale('sth', 'fr-fr')).toEqual('something');
37-
});
38-
39-
it('should allow using forLocale even for the current locale', function () {
40-
messages['en-us'] = {sth:'something'};
41-
expect(localizedMessages.getForLocale('sth', 'en-us')).toEqual('something');
42-
});
43-
44-
it('should return a message key surrounded by a question mark for non-existing messages when locale was specified', function () {
45-
expect(localizedMessages.getForLocale('sth', 'fr-fr')).toEqual('?sth?');
46-
});
17+
it('should return a message key surrounded by a question mark for non-existing messages', function () {
18+
expect(localizedMessages.get('non.existing')).toEqual('?non.existing?');
4719
});
4820

49-
describe('interpolation of message parameters', function () {
50-
51-
it('should interpolate parameters for the current locale', function () {
52-
messages['en-us'] = {sth:'en {{param}} us'};
53-
expect(localizedMessages.get('sth', {param:'value'})).toEqual('en value us');
54-
});
55-
56-
it('should interpolate parameters for a specified locale', function () {
57-
messages['en-us'] = {sth:'en {{param}} us'};
58-
expect(localizedMessages.getForLocale('sth', 'en-us', {param:'value'})).toEqual('en value us');
59-
});
60-
61-
it('should not break for missing params', function () {
62-
messages['en-us'] = {sth:'en {{param}} us'};
63-
expect(localizedMessages.getForLocale('sth', 'en-us')).toEqual('en us');
64-
expect(localizedMessages.getForLocale('sth', 'en-us', {other:'value'})).toEqual('en us');
65-
66-
expect(localizedMessages.get('sth')).toEqual('en us');
67-
expect(localizedMessages.get('sth', {other:'value'})).toEqual('en us');
68-
});
21+
it('should interpolate parameters', function () {
22+
messages.sth = 'en {{param}} us';
23+
expect(localizedMessages.get('sth', {param:'value'})).toEqual('en value us');
24+
});
6925

26+
it('should not break for missing params', function () {
27+
messages.sth = 'en {{param}} us';
28+
expect(localizedMessages.get('sth')).toEqual('en us');
29+
expect(localizedMessages.get('sth', {other:'value'})).toEqual('en us');
7030
});
7131
});

0 commit comments

Comments
 (0)