diff --git a/public/views/includes/topbar.html b/public/views/includes/topbar.html index 6e8c408fb..4a06ca1c2 100644 --- a/public/views/includes/topbar.html +++ b/public/views/includes/topbar.html @@ -5,7 +5,7 @@ - Back + {{'Back'|translate}} diff --git a/public/views/preferences.html b/public/views/preferences.html index 27bc643d6..5c746f40c 100644 --- a/public/views/preferences.html +++ b/public/views/preferences.html @@ -31,7 +31,7 @@ Language - {{preferences.getDefaultLanguageName(index.availableLanguages)}} + {{index.defaultLanguageName}} diff --git a/public/views/preferencesLanguage.html b/public/views/preferencesLanguage.html index 8e6f5dc74..4bea5c75c 100644 --- a/public/views/preferencesLanguage.html +++ b/public/views/preferencesLanguage.html @@ -4,7 +4,7 @@ ng-repeat="lang in index.availableLanguages" ng-click="prefLang.save(lang.isoCode)" class="line-b p20 size-14"> {{lang.name}} - +
diff --git a/src/js/controllers/index.js b/src/js/controllers/index.js index e034a3988..78fc79ad4 100644 --- a/src/js/controllers/index.js +++ b/src/js/controllers/index.js @@ -1,10 +1,10 @@ 'use strict'; -angular.module('copayApp.controllers').controller('indexController', function($rootScope, $scope, $log, $filter, $timeout, lodash, go, profileService, configService, isCordova, rateService, storageService) { +angular.module('copayApp.controllers').controller('indexController', function($rootScope, $scope, $log, $filter, $timeout, lodash, go, profileService, configService, isCordova, rateService, storageService, gettextCatalog, amMoment) { var self = this; self.isCordova = isCordova; self.onGoingProcess = {}; - self.limitHistory = 5; + self.limitHistory = 5; function strip(number) { return (parseFloat(number.toPrecision(12))); @@ -433,6 +433,44 @@ angular.module('copayApp.controllers').controller('indexController', function($r }); }; + self.setDefaultLanguage = function(setLang) { + var userLang + if (!setLang) { + userLang = configService.getSync().wallet.settings.defaultLanguage; + if (!userLang) { + // Auto-detect browser language + var androidLang; + + if (navigator && navigator.userAgent && (androidLang = navigator.userAgent.match(/android.*\W(\w\w)-(\w\w)\W/i))) { + userLang = androidLang[1]; + } else { + // works for iOS and Android 4.x + userLang = navigator.userLanguage || navigator.language; + } + userLang = userLang ? (userLang.split('-', 1)[0] || 'en') : 'en'; + } + if (userLang != gettextCatalog.getCurrentLanguage()) { + $log.debug('Setting default language: ' + userLang); + gettextCatalog.setCurrentLanguage(userLang); + amMoment.changeLocale(userLang); + } + } + else { + configService.set({ + wallet: { + settings: { + defaultLanguage: setLang + } + } + }, function() { + gettextCatalog.setCurrentLanguage(setLang); + amMoment.changeLocale(setLang); + }); + } + self.defaultLanguageIsoCode = setLang || userLang; + self.defaultLanguageName = lodash.result(lodash.find(self.availableLanguages, { 'isoCode': self.defaultLanguageIsoCode }), 'name'); + }; + // UX event handlers $rootScope.$on('Local/ColorUpdated', function(event) { self.updateColor(); @@ -499,6 +537,10 @@ angular.module('copayApp.controllers').controller('indexController', function($r }); }); + $rootScope.$on('Local/DefaultLanguage', function(event, setLang) { + self.setDefaultLanguage(setLang); + }); + $rootScope.$on('Animation/Disable', function(event) { $timeout(function() { self.swipeLeft = false; diff --git a/src/js/controllers/preferences.js b/src/js/controllers/preferences.js index 95c3462be..4c05f0147 100644 --- a/src/js/controllers/preferences.js +++ b/src/js/controllers/preferences.js @@ -48,11 +48,6 @@ angular.module('copayApp.controllers').controller('preferencesController', } }); - this.getDefaultLanguageName = function(availableLanguages) { - var defaultLanguage = config.wallet.settings.defaultLanguage || 'en'; - return lodash.result(lodash.find(availableLanguages, { 'isoCode': defaultLanguage }), 'name'); - }; - $scope.$on('$destroy', function() { unwatch(); }); diff --git a/src/js/controllers/preferencesLanguage.js b/src/js/controllers/preferencesLanguage.js index 4eaf736d3..6eedd917f 100644 --- a/src/js/controllers/preferencesLanguage.js +++ b/src/js/controllers/preferencesLanguage.js @@ -1,24 +1,12 @@ 'use strict'; angular.module('copayApp.controllers').controller('preferencesLanguageController', - function($scope, $timeout, configService, applicationService) { - this.defaultLanguage = configService.getSync().wallet.settings.defaultLanguage || 'en'; + function($scope, $timeout, go) { this.save = function(newLang) { - var opts = { - wallet: { - settings: { - defaultLanguage: newLang - } - } - }; - - this.loading = true; + $scope.$emit('Local/DefaultLanguage', newLang); $timeout(function() { - configService.set(opts, function(err) { - if (err) console.log(err); - applicationService.restart(); - }); + go.preferences(); }, 100); }; }); diff --git a/src/js/routes.js b/src/js/routes.js index 53dfaeeec..831c301a7 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -432,32 +432,21 @@ angular needProfile: false }); }) - .run(function($rootScope, $state, $log, gettextCatalog, uriHandler, isCordova, amMoment, profileService, configService) { + .run(function($rootScope, $state, $log, gettextCatalog, uriHandler, isCordova, amMoment, profileService) { - var userLang = configService.getSync().wallet.settings.defaultLanguage; - if (!userLang) { - // Auto-detect browser language - var androidLang; + // Auto-detect browser language + var userLang, androidLang; - if (navigator && navigator.userAgent && (androidLang = navigator.userAgent.match(/android.*\W(\w\w)-(\w\w)\W/i))) { - userLang = androidLang[1]; - } else { - // works for iOS and Android 4.x - userLang = navigator.userLanguage || navigator.language; - } - userLang = userLang ? (userLang.split('-', 1)[0] || 'en') : 'en'; + if (navigator && navigator.userAgent && (androidLang = navigator.userAgent.match(/android.*\W(\w\w)-(\w\w)\W/i))) { + userLang = androidLang[1]; + } else { + // works for iOS and Android 4.x + userLang = navigator.userLanguage || navigator.language; } - configService.set({ - wallet: { - settings: { - defaultLanguage: userLang - } - } - }, function() { - gettextCatalog.setCurrentLanguage(userLang); - amMoment.changeLocale(userLang); - }); + userLang = userLang ? (userLang.split('-', 1)[0] || 'en') : 'en'; + gettextCatalog.setCurrentLanguage(userLang); + amMoment.changeLocale(userLang); // Register URI handler, not for mobileApp if (!isCordova) { diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js index 385779b3e..d3504db00 100644 --- a/src/js/services/profileService.js +++ b/src/js/services/profileService.js @@ -115,6 +115,7 @@ angular.module('copayApp.services') configService.get(function(err) { if (err) return cb(err); + $rootScope.$emit('Local/DefaultLanguage'); root.setWalletClients(); storageService.getFocusedWalletId(function(err, focusedWalletId) { if (err) return cb(err);