diff --git a/src/service/translate.js b/src/service/translate.js index e44a27ef8..331e89d77 100644 --- a/src/service/translate.js +++ b/src/service/translate.js @@ -1814,6 +1814,11 @@ function $translate($STORAGE_KEY, $windowProvider, $translateSanitizationProvide // Try to get the aliased language key var aliasedKey = negotiateLocale(key); + // Ensure only registered language keys will be loaded + if ($availableLanguageKeys.length > 0 && !aliasedKey) { + return $q.reject(key); + } + if (aliasedKey) { key = aliasedKey; } diff --git a/test/unit/service/translate.spec.js b/test/unit/service/translate.spec.js index d60cd28fd..c22716ef0 100644 --- a/test/unit/service/translate.spec.js +++ b/test/unit/service/translate.spec.js @@ -92,7 +92,7 @@ describe('pascalprecht.translate', function () { beforeEach(module('pascalprecht.translate', function ($translateProvider) { $translateProvider - .registerAvailableLanguageKeys(['en', 'en_EN', 'de'], { + .registerAvailableLanguageKeys(['en', 'en_EN', 'de', 'de_DE'], { 'en_US': 'en_EN' }) .translations('en', translationMock) @@ -155,6 +155,28 @@ describe('pascalprecht.translate', function () { expect($translate.isForceAsyncReloadEnabled).toBeDefined(); }); + it('should not try to load a language which has not been registered yet', function () { + // ensure initial language is en (preferred one) + expect($translate.use()).toBe('en'); + + var result = { + successHandler: false, + failureHandler: false + }; + $translate.use('it').then(function (lang) { + result.successHandler = true; + }, function (lang) { + result.failureHandler = true; + }); + + $rootScope.$digest(); + // ensure initial language is still en (preferred one) + expect($translate.use()).toBe('en'); + // ensure result handlers has been called correctly + expect(result.successHandler).toBe(false); + expect(result.failureHandler).toBe(true); + }); + describe('$translate#isForceAsyncReloadEnabled()', function () { it('should be a function', function () {