diff --git a/public/views/preferences.html b/public/views/preferences.html index 005df5bd5..b07c2dc35 100644 --- a/public/views/preferences.html +++ b/public/views/preferences.html @@ -75,7 +75,7 @@ Language - {{index.defaultLanguageName|translate}} + {{preferences.currentLanguageName|translate}}
  • diff --git a/public/views/preferencesLanguage.html b/public/views/preferencesLanguage.html index ba6ef1ddd..c06b4b683 100644 --- a/public/views/preferencesLanguage.html +++ b/public/views/preferencesLanguage.html @@ -9,7 +9,7 @@
    Applying changes
    {{lang.name}} diff --git a/src/js/controllers/index.js b/src/js/controllers/index.js index 3b9af9078..6fb934e33 100644 --- a/src/js/controllers/index.js +++ b/src/js/controllers/index.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('indexController', function($rootScope, $scope, $log, $filter, $timeout, lodash, go, profileService, configService, isCordova, rateService, storageService, addressService, gettextCatalog, gettext, amMoment, nodeWebkit, addonManager, feeService, isChromeApp, bwsError, txFormatService, glideraService, $state) { +angular.module('copayApp.controllers').controller('indexController', function($rootScope, $scope, $log, $filter, $timeout, lodash, go, profileService, configService, isCordova, rateService, storageService, addressService, gettext, amMoment, nodeWebkit, addonManager, feeService, isChromeApp, bwsError, txFormatService, uxLanguage, $state, glideraService) { var self = this; self.isCordova = isCordova; self.onGoingProcess = {}; @@ -39,35 +39,6 @@ angular.module('copayApp.controllers').controller('indexController', function($r self.tab = 'walletHome'; - self.availableLanguages = [{ - name: 'English', - isoCode: 'en', - }, { - name: 'Français', - isoCode: 'fr', - }, { - name: 'Italiano', - isoCode: 'it', - }, { - name: 'Deutsch', - isoCode: 'de', - }, { - name: 'Español', - isoCode: 'es', - }, { - name: 'Português', - isoCode: 'pt', - }, { - name: 'Ελληνικά', - isoCode: 'el', - }, { - name: '日本語', - isoCode: 'ja', - }, { - name: 'Pусский', - isoCode: 'ru', - }]; - self.feeOpts = feeService.feeOpts; self.setOngoingProcess = function(processName, isOn) { @@ -827,29 +798,9 @@ angular.module('copayApp.controllers').controller('indexController', function($r }; self.setUxLanguage = function() { - var 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); - } - + var userLang = uxLanguage.update(); self.defaultLanguageIsoCode = userLang; - self.defaultLanguageName = lodash.result(lodash.find(self.availableLanguages, { - 'isoCode': self.defaultLanguageIsoCode - }), 'name'); + self.defaultLanguageName = uxLanguage.getName(userLang); }; self.initGlidera = function(accessToken) { diff --git a/src/js/controllers/preferences.js b/src/js/controllers/preferences.js index 34130559d..585c47079 100644 --- a/src/js/controllers/preferences.js +++ b/src/js/controllers/preferences.js @@ -1,10 +1,11 @@ 'use strict'; angular.module('copayApp.controllers').controller('preferencesController', - function($scope, $rootScope, $filter, $timeout, $modal, $log, lodash, configService, profileService) { + function($scope, $rootScope, $filter, $timeout, $modal, $log, lodash, configService, profileService, uxLanguage) { var config = configService.getSync(); this.unitName = config.wallet.settings.unitName; this.bwsurl = config.bws.url; + this.currentLanguageName = uxLanguage.getCurrentLanguageName(); this.selectedAlternative = { name: config.wallet.settings.alternativeName, isoCode: config.wallet.settings.alternativeIsoCode diff --git a/src/js/controllers/preferencesLanguage.js b/src/js/controllers/preferencesLanguage.js index f966abcc5..c00a8e277 100644 --- a/src/js/controllers/preferencesLanguage.js +++ b/src/js/controllers/preferencesLanguage.js @@ -1,8 +1,11 @@ 'use strict'; angular.module('copayApp.controllers').controller('preferencesLanguageController', - function($scope, $log, $timeout, configService, go) { + function($scope, $log, $timeout, configService, go, uxLanguage) { + this.availableLanguages = uxLanguage.getLanguages(); + +console.log('[preferencesLanguage.js.7]', this.availableLanguages); //TODO this.save = function(newLang) { var opts = { diff --git a/src/js/routes.js b/src/js/routes.js index 2487cd4fe..e12f4ea71 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -463,22 +463,10 @@ angular needProfile: false }); }) - .run(function($rootScope, $state, $log, gettextCatalog, uriHandler, isCordova, amMoment, profileService, $timeout, nodeWebkit) { + .run(function($rootScope, $state, $log, uriHandler, isCordova, profileService, $timeout, nodeWebkit, uxLanguage) { FastClick.attach(document.body); - // 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'; - gettextCatalog.setCurrentLanguage(userLang); - amMoment.changeLocale(userLang); + uxLanguage.init(); // Register URI handler, not for mobileApp if (!isCordova) { diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js index 05e5fbd34..9044b8107 100644 --- a/src/js/services/profileService.js +++ b/src/js/services/profileService.js @@ -1,6 +1,6 @@ 'use strict'; angular.module('copayApp.services') - .factory('profileService', function profileServiceFactory($rootScope, $location, $timeout, $filter, $log, lodash, storageService, bwcService, configService, notificationService, isChromeApp, isCordova, gettext, nodeWebkit, bwsError, ledger) { + .factory('profileService', function profileServiceFactory($rootScope, $location, $timeout, $filter, $log, lodash, storageService, bwcService, configService, notificationService, isChromeApp, isCordova, gettext, nodeWebkit, bwsError, ledger, uxLanguage) { var root = {}; @@ -165,11 +165,20 @@ angular.module('copayApp.services') }); }; - root._seedWallet = function(walletClient) { - var config = configService.getSync().wallet.settings; -console.log('[profileService.js.169:config:]',config); //TODO -asdd; - walletClient.seedFromRandomWithMnemonic('livenet',null, mnemonicLang); + root._seedWallet = function(walletClient, network) { + var lang = uxLanguage.getCurrentLanguage(); + + try { + walletClient.seedFromRandomWithMnemonic(network, null, lang); + } catch (e) { + $log.info('Error creating seed: ' + e.message); + if (e.message.indexOf('language') > 0) { + $log.info('Using default language for mnemonic'); + walletClient.seedFromRandomWithMnemonic(network); + } else { + throw (e); + } + } }; root._createNewProfile = function(opts, cb) { @@ -179,7 +188,7 @@ asdd; } var walletClient = bwcService.getClient(); - this._seedWallet(walletClient); + root._seedWallet(walletClient, 'livenet'); walletClient.createWallet('Personal Wallet', 'me', 1, 1, { network: 'livenet' @@ -209,10 +218,7 @@ asdd; return cb(gettext('Could not create using the specified extended public key')); } } - // TODO LANG... - // TODO... - $log.warn("TODO LANG!") - walletClient.seedFromRandomWithMnemonic(opts.networkName); + root._seedWallet(walletClient, opts.networkName); walletClient.createWallet(opts.name, opts.myName || 'me', opts.m, opts.n, { network: opts.networkName diff --git a/src/js/services/uxLanguage.js b/src/js/services/uxLanguage.js new file mode 100644 index 000000000..e0cb59ac0 --- /dev/null +++ b/src/js/services/uxLanguage.js @@ -0,0 +1,95 @@ +'use strict'; +angular.module('copayApp.services') + .factory('uxLanguage', function languageService($log, lodash, gettextCatalog, amMoment, configService) { + var root = {}; + + root.availableLanguages = [{ + name: 'English', + isoCode: 'en', + }, { + name: 'Français', + isoCode: 'fr', + }, { + name: 'Italiano', + isoCode: 'it', + }, { + name: 'Deutsch', + isoCode: 'de', + }, { + name: 'Español', + isoCode: 'es', + }, { + name: 'Português', + isoCode: 'pt', + }, { + name: 'Ελληνικά', + isoCode: 'el', + }, { + name: '日本語', + isoCode: 'ja', + }, { + name: 'Pусский', + isoCode: 'ru', + }]; + + root.currentLanguage = null; + + root._detect = function() { + // 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'; + + return userLang; + }; + + root._set = function(lang) { + $log.debug('Setting default language: ' + lang); + gettextCatalog.setCurrentLanguage(lang); + amMoment.changeLocale(lang); + root.currentLanguage = lang; + }; + + root.getCurrentLanguage = function() { + return root.currentLanguage; + }; + + root.getCurrentLanguageName = function() { + return root.getName(root.currentLanguage); + }; + + root.getLanguages = function() { + return root.availableLanguages; + }; + + root.init = function() { + root._set(root._detect()); + }; + + root.update = function() { + var userLang = configService.getSync().wallet.settings.defaultLanguage; + + if (!userLang) { + userLang = root._detect(); + } + + if (userLang != gettextCatalog.getCurrentLanguage()) { + root._set(userLang); + } + return userLang; + }; + + root.getName = function(lang) { + return lodash.result(lodash.find(root.availableLanguages, { + 'isoCode': lang + }), 'name'); + }; + + return root; + });