-
-
Notifications
You must be signed in to change notification settings - Fork 419
/
i18n.test.js
151 lines (123 loc) · 5.57 KB
/
i18n.test.js
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*jslint nomen: true, undef: true, sloppy: true, white: true, stupid: true, passfail: false, node: true, plusplus: true, indent: 2 */
var i18n = require('../i18n'),
should = require("should");
i18n.configure({
locales: ['en', 'de'],
register: global
});
describe('module setup', function () {
it('the version should be set', function () {
should.equal(i18n.version, '0.3.8');
});
});
describe('module api', function () {
var req = {
"request": "GET /test",
__: i18n.__
};
describe('setLocal and getLocale', function () {
it('getLocale should return default setting', function () {
i18n.getLocale().should.equal('en');
});
it('setLocale should return the new setting', function () {
i18n.setLocale('de').should.equal('de');
});
it('and getLocale should return the new setting', function () {
i18n.getLocale().should.equal('de');
});
it('should return the current local setting, when used with 2 args', function () {
i18n.setLocale(req, 'en').should.equal('en');
});
it('while getLocale should still return the previous global setting', function () {
i18n.getLocale().should.equal('de');
});
it('now getLocale should return local locale when used with local object as 1st arg', function () {
i18n.getLocale(req).should.equal('en');
});
});
describe('translating singulars', function () {
it('should return en translations as expected', function () {
i18n.setLocale('en');
should.equal(__('Hello'), 'Hello');
should.equal(__('Hello %s, how are you today?', 'Marcus'), 'Hello Marcus, how are you today?');
should.equal(__('Hello %s, how are you today? How was your %s.', 'Marcus', __('weekend')), 'Hello Marcus, how are you today? How was your weekend.');
});
it('and should return de translations as expected', function () {
i18n.setLocale('de');
should.equal(__('Hello'), 'Hallo');
should.equal(__('Hello %s, how are you today?', 'Marcus'), 'Hallo Marcus, wie geht es dir heute?');
should.equal(__('Hello %s, how are you today? How was your %s.', 'Marcus', __('weekend')), 'Hallo Marcus, wie geht es dir heute? Wie war dein Wochenende.');
});
});
describe('translating in scopes (ie.: request)', function(){
it('has to use local translation in en', function(){
i18n.setLocale(req, 'en').should.equal('en');
req.__('Hello').should.equal('Hello');
});
it('while the global translation remains untouched', function(){
should.equal(__('Hello'), 'Hallo');
});
it('and has to use local translation in de', function(){
i18n.setLocale(req, 'de').should.equal('de');
req.__('Hello').should.equal('Hallo');
});
it('still the global translation remains untouched', function(){
should.equal(__('Hello'), 'Hallo');
});
});
describe('translating basic plurals', function(){
it('should work as expected (to lazy to change from expresso)', function(){
i18n.setLocale('en');
var singular = __n('%s cat', '%s cats', 1),
plural = __n('%s cat', '%s cats', 3);
should.equal(singular, '1 cat');
should.equal(plural, '3 cats');
i18n.setLocale('de');
singular = __n('%s cat', '%s cats', 1);
plural = __n('%s cat', '%s cats', 3);
should.equal(singular, '1 Katze');
should.equal(plural, '3 Katzen');
});
});
describe('translating nested plurals', function(){
it('should work as expected (to lazy to change from expresso)', function(){
i18n.setLocale('en');
var singular = __n('There is one monkey in the %%s', 'There are %d monkeys in the %%s', 1, __('tree')),
plural = __n('There is one monkey in the %%s', 'There are %d monkeys in the %%s', 3, __('tree'));
should.equal(singular, 'There is one monkey in the tree');
should.equal(plural, 'There are 3 monkeys in the tree');
i18n.setLocale('de');
singular = __n('There is one monkey in the %%s', 'There are %d monkeys in the %%s', 1, __('tree'));
plural = __n('There is one monkey in the %%s', 'There are %d monkeys in the %%s', 3, __('tree'));
should.equal(singular, 'Im Baum sitzt ein Affe');
should.equal(plural, 'Im Baum sitzen 3 Affen');
});
it('output of extra strings will break when not masked by an extra % (%% issue #49)', function(){
i18n.setLocale('en');
var singular = __n('There is one monkey in the %s', 'There are %d monkeys in the %s', 1, __('tree')),
plural = __n('There is one monkey in the %s', 'There are %d monkeys in the %s', 3, __('tree'));
should.equal(singular, 'There is one monkey in the 1');
should.equal(plural, 'There are 3 monkeys in the undefined');
i18n.setLocale('de');
singular = __n('There is one monkey in the %s', 'There are %d monkeys in the %s', 1, __('tree'));
plural = __n('There is one monkey in the %s', 'There are %d monkeys in the %s', 3, __('tree'));
should.equal(singular, 'There is one monkey in the 1');
should.equal(plural, 'There are 3 monkeys in the undefined');
});
});
describe('translating variables values', function(){
it('should work as expected (to lazy to change from expresso)', function(){
var i = 0,
greetings = ['Hi', 'Hello', 'Howdy'],
greetingsDE = ['Hi', 'Hallo', 'Hallöchen'];
i18n.setLocale('en');
for (i = 0; i < greetings.length; i++) {
should.equal(greetings[i], __(greetings[i]));
}
i18n.setLocale('de');
for (i = 0; i < greetings.length; i++) {
should.equal(greetingsDE[i], __(greetings[i]));
}
});
});
});