GUAC-1230: Do not rely on loader for fallback. Force fallback within angular-translate by returning an empty translation.

This commit is contained in:
Michael Jumper
2015-07-14 12:54:18 -07:00
parent 30b62f2cfb
commit d60370b2d3
2 changed files with 7 additions and 16 deletions

View File

@@ -30,19 +30,16 @@ angular.module('index').config(['$injector', function($injector) {
var preferenceServiceProvider = $injector.get('preferenceServiceProvider'); var preferenceServiceProvider = $injector.get('preferenceServiceProvider');
// Fallback to US English // Fallback to US English
var fallbackLanguages = ['en']; $translateProvider.fallbackLanguage('en');
// Prefer chosen language, use fallback languages if necessary // Prefer chosen language
$translateProvider.fallbackLanguage(fallbackLanguages);
$translateProvider.preferredLanguage(preferenceServiceProvider.preferences.language); $translateProvider.preferredLanguage(preferenceServiceProvider.preferences.language);
// Escape any HTML in translation strings // Escape any HTML in translation strings
$translateProvider.useSanitizeValueStrategy('escape'); $translateProvider.useSanitizeValueStrategy('escape');
// Load translations via translationLoader service // Load translations via translationLoader service
$translateProvider.useLoader('translationLoader', { $translateProvider.useLoader('translationLoader');
fallbackLanguages : fallbackLanguages
});
// Provide pluralization, etc. via messageformat.js // Provide pluralization, etc. via messageformat.js
$translateProvider.useMessageFormatInterpolation(); $translateProvider.useMessageFormatInterpolation();

View File

@@ -56,9 +56,9 @@ angular.module('locale').factory('translationLoader', ['$injector', function tra
// Get current language key // Get current language key
var currentKey = remainingKeys.shift(); 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) { if (!currentKey) {
deferred.reject(requestedKey); deferred.resolve('{}');
return; return;
} }
@@ -122,14 +122,8 @@ angular.module('locale').factory('translationLoader', ['$injector', function tra
var translation = $q.defer(); var translation = $q.defer();
// Get requested language from options // Satisfy the translation request using possible variations of the given key
var requestedKey = options.key; satisfyTranslation(translation, options.key, getKeyVariations(options.key));
// Append fallback languages to requested language
var keys = getKeyVariations(requestedKey).concat(options.fallbackLanguages);
// Satisfy the translation request
satisfyTranslation(translation, requestedKey, keys);
// Return promise which is resolved only after the translation file is loaded // Return promise which is resolved only after the translation file is loaded
return translation.promise; return translation.promise;