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

Commit

Permalink
feat(translateProvider): make translationTable extendable
Browse files Browse the repository at this point in the history
- use angular.extend() to extend an existing translation table rather then overwriting it anytime

This is for use cases where's one translate service used in many modules which have it as their own dependency. Translations for a specific module get loaded when the module is loaded.

Closes #33
  • Loading branch information
0x-r4bbit committed May 9, 2013
1 parent 548a274 commit 8e3a455
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 9 deletions.
23 changes: 14 additions & 9 deletions ngTranslate/translate.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@ angular.module('ngTranslate', ['ng', 'ngCookies'])

if ($translate.rememberLanguage()) {
if (!$cookieStore.get($COOKIE_KEY)) {

if (angular.isString($translate.preferredLanguage())) {
// $translate.uses method will both set up and remember the language in case it's loaded successfully
$translate.uses($translate.preferredLanguage());
} else {
$cookieStore.put($COOKIE_KEY, $translate.uses());
}

} else {
$translate.uses($cookieStore.get($COOKIE_KEY));
}
} else if (angular.isString($translate.preferredLanguage())) {
$translate.uses($translate.preferredLanguage());
}

}]);

angular.module('ngTranslate').constant('$COOKIE_KEY', 'NG_TRANSLATE_LANG_KEY');
Expand Down Expand Up @@ -78,7 +78,7 @@ angular.module('ngTranslate').provider('$translate', function () {
}
};

this.translations = function (langKey, translationTable) {
var translations = function (langKey, translationTable) {

if (!langKey && !translationTable) {
return $translationTable;
Expand All @@ -88,21 +88,26 @@ angular.module('ngTranslate').provider('$translate', function () {
if (angular.isString(langKey)) {
return $translationTable[langKey];
} else {
$translationTable = langKey;
angular.extend($translationTable, langKey);
}
} else {
$translationTable[langKey] = translationTable;
if (!angular.isObject($translationTable[langKey])) {
$translationTable[langKey] = {};
}
angular.extend($translationTable[langKey], translationTable);
}
};

this.translations = translations;

this.preferredLanguage = function(langKey) {
if (langKey) {
$preferredLanguage = langKey;
} else {
return $preferredLanguage;
}
};

this.uses = function (langKey) {
if (langKey) {
if (!$translationTable[langKey] && (!$asyncLoaders.length)) {
Expand Down Expand Up @@ -191,7 +196,7 @@ angular.module('ngTranslate').provider('$translate', function () {
loaderFn = $injector.invoke(loaderFnBuilder);
if (angular.isFunction(loaderFn)) {
loaderFn(key).then(function (data) {
$translationTable[key] = flatObject(data);
translations(key, flatObject(data));
deferred.resolve(data);
}, function (key) {
deferred.reject(key);
Expand Down Expand Up @@ -236,7 +241,7 @@ angular.module('ngTranslate').provider('$translate', function () {
$translate.preferredLanguage = function() {
return $preferredLanguage;
};

$translate.uses = function (key) {

if (!key) {
Expand Down
26 changes: 26 additions & 0 deletions test/unit/translateServiceSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,11 @@ describe('ngTranslate', function () {
'TRANSLATION_ID_2': 'Lorem Ipsum {{value}} + {{value}}',
'TRANSLATION_ID_3': 'Lorem Ipsum {{value + value}}'
});

$translateProvider.translations({
'FOO': 'bar',
'BAR': 'foo'
});
}));

var $translate;
Expand Down Expand Up @@ -103,6 +108,13 @@ describe('ngTranslate', function () {
expect($translate('TRANSLATION_ID_3', { value: 3})).toEqual('Lorem Ipsum 6');
});
});

it('should extend translation table rather then overwriting it', function () {
inject(function ($translate) {
expect($translate('FOO')).toEqual('bar');
expect($translate('BAR')).toEqual('foo');
});
});
});

describe('$translateService (multi-lang)', function () {
Expand All @@ -116,9 +128,15 @@ describe('ngTranslate', function () {
'TRANSLATION_ID_3': 'Lorem Ipsum {{value + value}}',
'YET_ANOTHER': 'Hallo da!'
});
$translateProvider.translations('de_DE', {
'FOO': 'bar'
});
$translateProvider.translations('en_EN', {
'YET_ANOTHER': 'Hello there!'
});
$translateProvider.translations('en_EN', {
'FOO': 'bar'
});
$translateProvider.uses('de_DE');
$translateProvider.rememberLanguage(true);
$translateProvider.preferredLanguage('en_EN');
Expand Down Expand Up @@ -162,6 +180,14 @@ describe('ngTranslate', function () {
});
});

it('should extend translation table rather then overwriting it', function () {
inject(function ($translate) {
expect($translate('FOO')).toEqual('bar');
$translate.uses('en_EN');
expect($translate('FOO')).toEqual('bar');
});
});

describe('$translateService#uses()', function () {

it('should return a string', function () {
Expand Down

0 comments on commit 8e3a455

Please sign in to comment.