Skip to content

Commit

Permalink
Fixed #39.
Browse files Browse the repository at this point in the history
  • Loading branch information
rmariuzzo committed Nov 15, 2016
1 parent 4761d54 commit 0512672
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 30 deletions.
2 changes: 1 addition & 1 deletion bower.json
@@ -1,6 +1,6 @@
{
"name": "lang.js",
"version": "1.1.4",
"version": "1.1.5",
"description": "Laravel's Lang in JavaScript!",
"keywords": [
"laravel",
Expand Down
4 changes: 2 additions & 2 deletions dist/lang.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "lang.js",
"version": "1.1.4",
"version": "1.1.5",
"description": "Laravel's Lang in JavaScript!",
"main": "src/lang.js",
"scripts": {
Expand Down
24 changes: 16 additions & 8 deletions src/lang.js
@@ -1,7 +1,7 @@
/*!
* Lang.js for Laravel localization in JavaScript.
*
* @version 1.1.4
* @version 1.1.5
* @license MIT https://github.com/rmariuzzo/Lang.js/blob/master/LICENSE
* @site https://github.com/rmariuzzo/Lang.js
* @author Rubens Mariuzzo <rubens@mariuzzo.com>
Expand Down Expand Up @@ -252,10 +252,11 @@
}

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

return {
source: locale + '.' + segments[0].replace(/\//g, '.'),
sourceFallback: this.getFallback() + '.' + segments[0].replace(/\//g, '.'),
source: locale + '.' + source,
sourceFallback: this.getFallback() + '.' + source,
entries: segments.slice(1)
};
};
Expand All @@ -277,13 +278,20 @@
return null;
}

// Get message text.

var message = this.messages[key.source] || this.messages[key.sourceFallback];

while (key.entries.length && (message = message[key.entries.shift()]))
// Get message from default locale.
var message = this.messages[key.source];
var entries = key.entries.slice();
while (entries.length && (message = message[entries.shift()]))
;

// Get message from fallback locale.
if (typeof message !== 'string' && this.messages[key.sourceFallback]) {
message = this.messages[key.sourceFallback];
entries = key.entries.slice();
while (entries.length && (message = message[entries.shift()]))
;
}

if (typeof message !== 'string') {
return null;
}
Expand Down
39 changes: 21 additions & 18 deletions test/spec/lang_fallback_spec.js
Expand Up @@ -2,41 +2,44 @@ var util = require('util');
var Lang = require('../../src/lang.js');
var messages = require('../fixture/messages');

describe('The lang.fallback() method', function () {
describe('The lang\'s fallback locale feature', function() {
'use strict';

var lang;

beforeEach(function () {
lang = new Lang({
messages: messages
});
beforeEach(function() {
lang = new Lang({messages: messages});
});

it('should exists', function () {
it('should have setFallback and getFallback methods', function() {
expect(lang.setFallback).toBeDefined();
expect(lang.getFallback).toBeDefined();

});

it('should be a function', function () {
expect(typeof lang.setFallback).toBe('function');
expect(typeof lang.getFallback).toBe('function');

});

it('should set default fallback', function () {
it('should set default fallback', function() {
lang.setFallback('es');
expect(lang.getFallback()).toBe('es');
});

it('should get the message in the setted fallback locale if the message does not exists in the defined locale', function () {
lang.setLocale('en');
it('should get the message using the fallback locale when the message does not exist in the defined locale', function() {
var messages = {
'en.greetings': {
'hi': 'Hi',
'hello': 'Hello'
},
'it.greetings': {
'hi': 'Salve'
}
};
lang = new Lang({
messages: messages
});
lang.setLocale('it');
expect(lang.get('greetings.hello')).toBe('greetings.hello');
lang.setFallback('en');
var enMessage = lang.get('fallback.test');
lang.setLocale('es');
expect(lang.get('fallback.test')).toBe(enMessage);
expect(lang.get('greetings.hello')).toBe(messages['en.greetings'].hello);
});


});

0 comments on commit 0512672

Please sign in to comment.