Skip to content

Commit 10a9e89

Browse files
committed
MOBILE-925 lang: Refresh langs one at a time in registerLanguageFolder
1 parent 2c3f827 commit 10a9e89

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

www/core/lib/addonmanager.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -237,10 +237,16 @@ angular.module('mm.core')
237237
return $mmFS.getDir(dirPath).then(function(dir) {
238238
absoluteDirPath = $mmFS.getInternalURL(dir);
239239

240-
// Register language folder so the language strings of the addon are loaded.
241-
$mmLang.registerLanguageFolder($mmFS.concatenatePaths(absoluteDirPath, 'lang'));
242-
// Load the addon.
243-
return $ocLazyLoad.load($mmFS.concatenatePaths(absoluteDirPath, remoteAddonFilename)).then(function() {
240+
// Check if the language folder exists.
241+
return $mmFS.getDir($mmFS.concatenatePaths(dirPath, 'lang')).then(function() {
242+
// Folder exists. Register language folder so the language strings of the addon are loaded.
243+
return $mmLang.registerLanguageFolder($mmFS.concatenatePaths(absoluteDirPath, 'lang'));
244+
}).catch(function() {
245+
// Lang folder doesn't exist, don't register it.
246+
}).then(function() {
247+
// Load the addon.
248+
return $ocLazyLoad.load($mmFS.concatenatePaths(absoluteDirPath, remoteAddonFilename));
249+
}).then(function() {
244250
loadedAddons.push(addon);
245251
// Check if the addon has a CSS file.
246252
return $mmFS.getFile($mmFS.concatenatePaths(dirPath, remoteAddonCssFilename)).then(function(file) {

www/core/lib/lang.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ angular.module('mm.core')
2424
.factory('$mmLang', function($translate, $translatePartialLoader, $mmConfig, $cordovaGlobalization, $q, mmCoreConfigConstants) {
2525

2626
var self = {},
27+
fallbackLanguage = 'en',
2728
currentLanguage; // Save current language in a variable to speed up the get function.
2829

2930
/**
@@ -33,11 +34,19 @@ angular.module('mm.core')
3334
* @ngdoc method
3435
* @name $mmLang#registerLanguageFolder
3536
* @param {String} path Path of the folder to use.
36-
* @return {Promise} Promise resolved when file is loaded.
37+
* @return {Promise} Promise resolved when all the language files to be used are loaded.
3738
*/
3839
self.registerLanguageFolder = function(path) {
3940
$translatePartialLoader.addPart(path);
40-
return $translate.refresh();
41+
// We refresh the languages one by one because if we refresh all of them at once and 1 file isn't found
42+
// then no language will be loaded. This way if 1 language file is missing only that language won't be refreshed.
43+
var promises = [];
44+
promises.push($translate.refresh(currentLanguage));
45+
if (currentLanguage !== fallbackLanguage) {
46+
// Refresh fallback language.
47+
promises.push($translate.refresh(fallbackLanguage));
48+
}
49+
return $q.all(promises);
4150
};
4251

4352
/**
@@ -73,11 +82,11 @@ angular.module('mm.core')
7382
return language;
7483
}, function() {
7584
// Error getting locale. Use default language.
76-
return mmCoreConfigConstants.default_lang || 'en';
85+
return mmCoreConfigConstants.default_lang || fallbackLanguage;
7786
});
7887
} catch(err) {
7988
// Error getting locale. Use default language.
80-
return mmCoreConfigConstants.default_lang || 'en';
89+
return mmCoreConfigConstants.default_lang || fallbackLanguage;
8190
}
8291
}).then(function(language) {
8392
currentLanguage = language; // Save it for later.

0 commit comments

Comments
 (0)