diff --git a/cordova/build.sh b/cordova/build.sh index 54b3ebffb..f3408fb70 100755 --- a/cordova/build.sh +++ b/cordova/build.sh @@ -94,6 +94,9 @@ if [ ! -d $PROJECT ]; then checkOK fi + cordova plugin add cordova-plugin-globalization + checkOK + cordova plugin add cordova-plugin-splashscreen checkOK diff --git a/src/js/controllers/index.js b/src/js/controllers/index.js index ae534feaa..a23599433 100644 --- a/src/js/controllers/index.js +++ b/src/js/controllers/index.js @@ -1055,9 +1055,11 @@ angular.module('copayApp.controllers').controller('indexController', function($r }; self.setUxLanguage = function() { - var userLang = uxLanguage.update(); - self.defaultLanguageIsoCode = userLang; - self.defaultLanguageName = uxLanguage.getName(userLang); + uxLanguage.update(function(lang) { + var userLang = lang; + self.defaultLanguageIsoCode = userLang; + self.defaultLanguageName = uxLanguage.getName(userLang); + }); }; self.initGlidera = function(accessToken) { @@ -1216,11 +1218,12 @@ angular.module('copayApp.controllers').controller('indexController', function($r }); $rootScope.$on('Local/LanguageSettingUpdated', function() { - self.setUxLanguage(); - self.updateRemotePreferences({ - saveAll: true - }, function() { - $log.debug('Remote preferences saved') + self.setUxLanguage(function() { + self.updateRemotePreferences({ + saveAll: true + }, function() { + $log.debug('Remote preferences saved') + }); }); }); @@ -1391,7 +1394,7 @@ angular.module('copayApp.controllers').controller('indexController', function($r self.noFocusedWallet = true; self.isComplete = null; self.walletName = null; - self.setUxLanguage(); + self.setUxLanguage(function() {}); profileService.isDisclaimerAccepted(function(v) { if (v) { go.path('import'); @@ -1401,7 +1404,7 @@ angular.module('copayApp.controllers').controller('indexController', function($r }); $rootScope.$on('Local/NewFocusedWallet', function() { - self.setUxLanguage(); + self.setUxLanguage(function() {}); self.setFocusedWallet(); self.debounceUpdateHistory(); self.isDisclaimerAccepted(); diff --git a/src/js/services/uxLanguage.js b/src/js/services/uxLanguage.js index 438f4c03e..9aadb24ed 100644 --- a/src/js/services/uxLanguage.js +++ b/src/js/services/uxLanguage.js @@ -26,24 +26,33 @@ angular.module('copayApp.services') root.currentLanguage = null; - root._detect = function() { - // Auto-detect browser language + root._detect = function(cb) { + var userLang, androidLang; + if (navigator && navigator.globalization) { - if (navigator && navigator.userAgent && (androidLang = navigator.userAgent.match(/android.*\W(\w\w)-(\w\w)\W/i))) { - userLang = androidLang[1]; + navigator.globalization.getPreferredLanguage(function(preferedLanguage) { + // works for iOS and Android 4.x + userLang = preferedLanguage.value; + userLang = userLang ? (userLang.split('-', 1)[0] || 'en') : 'en'; + // Set only available languages + userLang = root.isAvailableLanguage(userLang); + return cb(userLang); + }); } else { - // works for iOS and Android 4.x + // Auto-detect browser language userLang = navigator.userLanguage || navigator.language; + userLang = userLang ? (userLang.split('-', 1)[0] || 'en') : 'en'; + // Set only available languages + userLang = root.isAvailableLanguage(userLang); + return cb(userLang); } - userLang = userLang ? (userLang.split('-', 1)[0] || 'en') : 'en'; + }; - // Set only available languages - userLang = lodash.find(root.availableLanguages, { + root.isAvailableLanguage = function(userLang) { + return lodash.find(root.availableLanguages, { 'isoCode': userLang }) ? userLang : 'en'; - - return userLang; }; root._set = function(lang) { @@ -72,20 +81,30 @@ angular.module('copayApp.services') }; root.init = function() { - root._set(root._detect()); + root._detect(function(lang) { + root._set(lang); + }); }; - root.update = function() { + root.update = function(cb) { var userLang = configService.getSync().wallet.settings.defaultLanguage; if (!userLang) { - userLang = root._detect(); - } - if (userLang != gettextCatalog.getCurrentLanguage()) { - root._set(userLang); + root._detect(function(lang) { + userLang = lang; + + if (userLang != root.currentLanguage) { + root._set(lang); + } + return cb(userLang); + }); + } else { + if (userLang != root.currentLanguage) { + root._set(userLang); + } + return cb(userLang); } - return userLang; }; root.getName = function(lang) {