From d60370b2d3edbec20c2ffe283e3c76b04029b906 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 14 Jul 2015 12:54:18 -0700 Subject: [PATCH] GUAC-1230: Do not rely on loader for fallback. Force fallback within angular-translate by returning an empty translation. --- .../app/index/config/indexTranslationConfig.js | 9 +++------ .../app/locale/services/translationLoader.js | 14 ++++---------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/guacamole/src/main/webapp/app/index/config/indexTranslationConfig.js b/guacamole/src/main/webapp/app/index/config/indexTranslationConfig.js index dbea322d2..b59d37f41 100644 --- a/guacamole/src/main/webapp/app/index/config/indexTranslationConfig.js +++ b/guacamole/src/main/webapp/app/index/config/indexTranslationConfig.js @@ -30,19 +30,16 @@ angular.module('index').config(['$injector', function($injector) { var preferenceServiceProvider = $injector.get('preferenceServiceProvider'); // Fallback to US English - var fallbackLanguages = ['en']; + $translateProvider.fallbackLanguage('en'); - // Prefer chosen language, use fallback languages if necessary - $translateProvider.fallbackLanguage(fallbackLanguages); + // Prefer chosen language $translateProvider.preferredLanguage(preferenceServiceProvider.preferences.language); // Escape any HTML in translation strings $translateProvider.useSanitizeValueStrategy('escape'); // Load translations via translationLoader service - $translateProvider.useLoader('translationLoader', { - fallbackLanguages : fallbackLanguages - }); + $translateProvider.useLoader('translationLoader'); // Provide pluralization, etc. via messageformat.js $translateProvider.useMessageFormatInterpolation(); diff --git a/guacamole/src/main/webapp/app/locale/services/translationLoader.js b/guacamole/src/main/webapp/app/locale/services/translationLoader.js index 7e2ca49bf..ec05ef540 100644 --- a/guacamole/src/main/webapp/app/locale/services/translationLoader.js +++ b/guacamole/src/main/webapp/app/locale/services/translationLoader.js @@ -56,9 +56,9 @@ angular.module('locale').factory('translationLoader', ['$injector', function tra // Get current language key var currentKey = remainingKeys.shift(); - // If no languages to try, just fail + // If no languages to try, "succeed" with an empty translation (force fallback) if (!currentKey) { - deferred.reject(requestedKey); + deferred.resolve('{}'); return; } @@ -122,14 +122,8 @@ angular.module('locale').factory('translationLoader', ['$injector', function tra var translation = $q.defer(); - // Get requested language from options - var requestedKey = options.key; - - // Append fallback languages to requested language - var keys = getKeyVariations(requestedKey).concat(options.fallbackLanguages); - - // Satisfy the translation request - satisfyTranslation(translation, requestedKey, keys); + // Satisfy the translation request using possible variations of the given key + satisfyTranslation(translation, options.key, getKeyVariations(options.key)); // Return promise which is resolved only after the translation file is loaded return translation.promise;