Skip to content
This repository has been archived by the owner on Jan 29, 2024. It is now read-only.

Commit

Permalink
feat(translateProvider): add fallbackLanguage() method
Browse files Browse the repository at this point in the history
- adds translateProvider.fallbackLanguage(key) to configure fallback language,
if translation id in current language doesn't exist.

Closes #67
  • Loading branch information
0x-r4bbit committed May 30, 2013
1 parent c389882 commit 018991e
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 37 deletions.
27 changes: 14 additions & 13 deletions src/translate.js
Original file line number Diff line number Diff line change
Expand Up @@ -185,8 +185,8 @@ angular.module('pascalprecht.translate').provider('$translate', ['$STORAGE_KEY',
return $fallbackLanguage;
}
};


/**
* @ngdoc function
* @name translate.$translateProvider#uses
Expand Down Expand Up @@ -422,17 +422,18 @@ angular.module('pascalprecht.translate').provider('$translate', ['$STORAGE_KEY',

var $translate = function (translationId, interpolateParams) {
var table = $uses ? $translationTable[$uses] : $translationTable;

if (table && table.hasOwnProperty(translationId)) {
return $interpolate(table[translationId])(interpolateParams);
}

if ($missingTranslationHandlerFactory) {
$injector.get($missingTranslationHandlerFactory)(translationId);
}
if(!translation && $uses && $fallbackLanguage && $uses!==$fallbackLanguage){
translation=$translationTable[$fallbackLanguage][translationId];
if(translation){

if ($uses && $fallbackLanguage && $uses !== $fallbackLanguage){
var translation = $translationTable[$fallbackLanguage][translationId];
if (translation) {
return $interpolate(translation)(interpolateParams);
}
}
Expand All @@ -450,8 +451,8 @@ angular.module('pascalprecht.translate').provider('$translate', ['$STORAGE_KEY',
*
* @return {string} preferred language key
*/
$translate.preferredLanguage = function() {
return $preferredLanguage;
$translate.preferredLanguage = function () {
return $preferredLanguage;
};
/**
* @ngdoc function
Expand All @@ -463,11 +464,11 @@ angular.module('pascalprecht.translate').provider('$translate', ['$STORAGE_KEY',
*
* @return {string} fallback language key
*/
$translate.fallbackLanguage = function() {
return $fallbackLanguage;
$translate.fallbackLanguage = function () {
return $fallbackLanguage;
};


/**
* @ngdoc function
* @name translate.$translate#storage
Expand Down
54 changes: 30 additions & 24 deletions test/unit/translateServiceSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ describe('pascalprecht.translate', function () {

});


describe('fallbackLanguage()', function() {

it('should be a function', function() {
Expand All @@ -91,8 +91,8 @@ describe('pascalprecht.translate', function () {
});
});

});
});

describe('storageKey()', function () {

it('should be a function', function () {
Expand Down Expand Up @@ -201,7 +201,7 @@ describe('pascalprecht.translate', function () {
});
$translateProvider.uses('de_DE');
$translateProvider.fallbackLanguage('en_EN');

$translateProvider.preferredLanguage('en_EN');
$translateProvider.preferredLanguage('de_DE');
$translateProvider.storageKey('lang');
Expand Down Expand Up @@ -338,37 +338,43 @@ describe('pascalprecht.translate', function () {
});

});
describe('$translateService#fallbackLanguage()', function () {

it ('should return a string if language is specified', function() {
inject(function($translate){
expect(typeof $translate.fallbackLanguage()).toBe('string');
});
});
describe('$translateService#fallbackLanguage()', function () {

it ('should return a correct language code', function() {
inject(function($translate){
expect($translate.fallbackLanguage()).toEqual('en_EN');
});
beforeEach(module('pascalprecht.translate', function ($translateProvider) {
$translateProvider.translations('foo', {
'TRANSLATION_ID': 'foo',
'TRANSLATION__ID': 'booyaka'
});

it('should allow to change fallback language during config', function() {
inject(function($translate){
expect($translate.fallbackLanguage()).toEqual('en_EN');
});
$translateProvider.translations('bar', {
'TRANSLATION__ID': 'bazinga'
});

it('shouldn\'t allow to change fallback language during runtime', function() {
inject(function($translate){
var prevLang = $translate.fallbackLanguage();
$translate.fallbackLanguage(prevLang === 'de_DE' ? 'en_EN' : 'de_DE');
expect($translate.fallbackLanguage()).toBe(prevLang);
});
$translateProvider.preferredLanguage('bar');
$translateProvider.fallbackLanguage('foo');
}));

it ('should return a string if language is specified', function() {
inject(function($translate){
expect(typeof $translate.fallbackLanguage()).toBe('string');
});
});

it ('should return a correct language code', function() {
inject(function($translate){
expect($translate.fallbackLanguage()).toEqual('foo');
});
});

it ('should use fallback language if translation id doesn\'t exist', function () {
inject(function ($translate) {
expect($translate('TRANSLATION__ID')).toEqual('bazinga');
expect($translate('TRANSLATION_ID')).toEqual('foo');
});
});
});

describe('where data is a nested object structure (namespace support)', function () {

beforeEach(module('pascalprecht.translate', function ($translateProvider) {
Expand Down

0 comments on commit 018991e

Please sign in to comment.