Skip to content

Commit 0512672

Browse files
committed
Fixed #39.
1 parent 4761d54 commit 0512672

File tree

5 files changed

+41
-30
lines changed

5 files changed

+41
-30
lines changed

bower.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "lang.js",
3-
"version": "1.1.4",
3+
"version": "1.1.5",
44
"description": "Laravel's Lang in JavaScript!",
55
"keywords": [
66
"laravel",

dist/lang.min.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "lang.js",
3-
"version": "1.1.4",
3+
"version": "1.1.5",
44
"description": "Laravel's Lang in JavaScript!",
55
"main": "src/lang.js",
66
"scripts": {

src/lang.js

+16-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*!
22
* Lang.js for Laravel localization in JavaScript.
33
*
4-
* @version 1.1.4
4+
* @version 1.1.5
55
* @license MIT https://github.com/rmariuzzo/Lang.js/blob/master/LICENSE
66
* @site https://github.com/rmariuzzo/Lang.js
77
* @author Rubens Mariuzzo <[email protected]>
@@ -252,10 +252,11 @@
252252
}
253253

254254
var segments = key.split('.');
255+
var source = segments[0].replace(/\//g, '.');
255256

256257
return {
257-
source: locale + '.' + segments[0].replace(/\//g, '.'),
258-
sourceFallback: this.getFallback() + '.' + segments[0].replace(/\//g, '.'),
258+
source: locale + '.' + source,
259+
sourceFallback: this.getFallback() + '.' + source,
259260
entries: segments.slice(1)
260261
};
261262
};
@@ -277,13 +278,20 @@
277278
return null;
278279
}
279280

280-
// Get message text.
281-
282-
var message = this.messages[key.source] || this.messages[key.sourceFallback];
283-
284-
while (key.entries.length && (message = message[key.entries.shift()]))
281+
// Get message from default locale.
282+
var message = this.messages[key.source];
283+
var entries = key.entries.slice();
284+
while (entries.length && (message = message[entries.shift()]))
285285
;
286286

287+
// Get message from fallback locale.
288+
if (typeof message !== 'string' && this.messages[key.sourceFallback]) {
289+
message = this.messages[key.sourceFallback];
290+
entries = key.entries.slice();
291+
while (entries.length && (message = message[entries.shift()]))
292+
;
293+
}
294+
287295
if (typeof message !== 'string') {
288296
return null;
289297
}

test/spec/lang_fallback_spec.js

+21-18
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,44 @@ var util = require('util');
22
var Lang = require('../../src/lang.js');
33
var messages = require('../fixture/messages');
44

5-
describe('The lang.fallback() method', function () {
5+
describe('The lang\'s fallback locale feature', function() {
66
'use strict';
77

88
var lang;
99

10-
beforeEach(function () {
11-
lang = new Lang({
12-
messages: messages
13-
});
10+
beforeEach(function() {
11+
lang = new Lang({messages: messages});
1412
});
1513

16-
it('should exists', function () {
14+
it('should have setFallback and getFallback methods', function() {
1715
expect(lang.setFallback).toBeDefined();
1816
expect(lang.getFallback).toBeDefined();
19-
20-
});
21-
22-
it('should be a function', function () {
2317
expect(typeof lang.setFallback).toBe('function');
2418
expect(typeof lang.getFallback).toBe('function');
25-
2619
});
2720

28-
it('should set default fallback', function () {
21+
it('should set default fallback', function() {
2922
lang.setFallback('es');
3023
expect(lang.getFallback()).toBe('es');
3124
});
3225

33-
it('should get the message in the setted fallback locale if the message does not exists in the defined locale', function () {
34-
lang.setLocale('en');
26+
it('should get the message using the fallback locale when the message does not exist in the defined locale', function() {
27+
var messages = {
28+
'en.greetings': {
29+
'hi': 'Hi',
30+
'hello': 'Hello'
31+
},
32+
'it.greetings': {
33+
'hi': 'Salve'
34+
}
35+
};
36+
lang = new Lang({
37+
messages: messages
38+
});
39+
lang.setLocale('it');
40+
expect(lang.get('greetings.hello')).toBe('greetings.hello');
3541
lang.setFallback('en');
36-
var enMessage = lang.get('fallback.test');
37-
lang.setLocale('es');
38-
expect(lang.get('fallback.test')).toBe(enMessage);
42+
expect(lang.get('greetings.hello')).toBe(messages['en.greetings'].hello);
3943
});
4044

41-
4245
});

0 commit comments

Comments
 (0)