2015-08-27 12:07:13 -03:00
|
|
|
|
'use strict';
|
|
|
|
|
|
angular.module('copayApp.services')
|
2016-09-05 11:33:41 -03:00
|
|
|
|
.factory('uxLanguage', function languageService($log, lodash, gettextCatalog, amMoment, configService) {
|
2015-08-27 12:07:13 -03:00
|
|
|
|
var root = {};
|
|
|
|
|
|
|
2016-06-06 18:26:45 -03:00
|
|
|
|
root.currentLanguage = null;
|
|
|
|
|
|
|
2015-08-27 12:07:13 -03:00
|
|
|
|
root.availableLanguages = [{
|
|
|
|
|
|
name: 'English',
|
|
|
|
|
|
isoCode: 'en',
|
2018-04-25 13:56:54 +09:00
|
|
|
|
rateCode: 'USD'
|
2018-05-16 16:40:24 +12:00
|
|
|
|
}, {
|
2018-06-22 16:16:26 +12:00
|
|
|
|
name: 'català',
|
|
|
|
|
|
isoCode: 'ca',
|
|
|
|
|
|
rateCode: 'EUR'
|
|
|
|
|
|
},{
|
2018-05-16 16:40:24 +12:00
|
|
|
|
name: 'Čeština',
|
|
|
|
|
|
isoCode: 'cs',
|
|
|
|
|
|
rateCode: 'EUR'
|
|
|
|
|
|
}, {
|
|
|
|
|
|
name: 'Deutsch',
|
|
|
|
|
|
isoCode: 'de',
|
|
|
|
|
|
rateCode: 'EUR'
|
2017-03-06 09:44:01 -03:00
|
|
|
|
}, {
|
2015-08-27 12:07:13 -03:00
|
|
|
|
name: 'Español',
|
|
|
|
|
|
isoCode: 'es',
|
2018-04-25 13:56:54 +09:00
|
|
|
|
rateCode: 'EUR'
|
2017-03-06 09:44:01 -03:00
|
|
|
|
}, {
|
2016-12-12 15:57:52 -03:00
|
|
|
|
name: 'Français',
|
|
|
|
|
|
isoCode: 'fr',
|
2018-04-25 13:56:54 +09:00
|
|
|
|
rateCode: 'EUR'
|
2017-03-06 09:44:01 -03:00
|
|
|
|
}, {
|
|
|
|
|
|
name: 'Italiano',
|
|
|
|
|
|
isoCode: 'it',
|
2018-04-25 13:56:54 +09:00
|
|
|
|
rateCode: 'EUR'
|
2017-10-02 14:50:44 -03:00
|
|
|
|
}, {
|
2017-10-02 14:52:58 -03:00
|
|
|
|
name: 'Nederlands',
|
2017-10-02 14:50:44 -03:00
|
|
|
|
isoCode: 'nl',
|
2018-04-25 13:56:54 +09:00
|
|
|
|
rateCode: 'EUR'
|
2017-03-06 09:44:01 -03:00
|
|
|
|
}, {
|
|
|
|
|
|
name: 'Polski',
|
|
|
|
|
|
isoCode: 'pl',
|
2018-04-25 13:56:54 +09:00
|
|
|
|
rateCode: 'EUR'
|
2017-03-06 09:44:01 -03:00
|
|
|
|
}, {
|
2017-03-05 12:06:26 +09:00
|
|
|
|
name: '日本語',
|
|
|
|
|
|
isoCode: 'ja',
|
|
|
|
|
|
useIdeograms: true,
|
2018-04-25 13:56:54 +09:00
|
|
|
|
rateCode: 'JPY'
|
2017-03-06 09:44:01 -03:00
|
|
|
|
}, {
|
2017-01-17 14:26:16 -03:00
|
|
|
|
name: '中文(简体)',
|
|
|
|
|
|
isoCode: 'zh',
|
|
|
|
|
|
useIdeograms: true,
|
2018-04-25 13:56:54 +09:00
|
|
|
|
rateCode: 'CNY'
|
2017-03-10 12:08:20 -03:00
|
|
|
|
}, {
|
|
|
|
|
|
name: 'Pусский',
|
|
|
|
|
|
isoCode: 'ru',
|
2018-04-25 13:56:54 +09:00
|
|
|
|
rateCode: 'RUB'
|
2017-04-21 14:09:57 -03:00
|
|
|
|
}, {
|
|
|
|
|
|
name: 'Português',
|
|
|
|
|
|
isoCode: 'pt',
|
2018-04-25 13:56:54 +09:00
|
|
|
|
rateCode: 'EUR'
|
2018-06-22 16:16:26 +12:00
|
|
|
|
}, {
|
|
|
|
|
|
name: 'русский язык',
|
|
|
|
|
|
isoCode: 'ru',
|
|
|
|
|
|
rateCode: 'RUB'
|
2017-12-20 16:33:21 +00:00
|
|
|
|
}, {
|
|
|
|
|
|
name: '한국어',
|
2018-04-25 13:56:54 +09:00
|
|
|
|
isoCode: 'ko',
|
|
|
|
|
|
rateCode: 'KRW'
|
2018-05-16 16:40:24 +12:00
|
|
|
|
}, {
|
|
|
|
|
|
name: 'فارسی',
|
|
|
|
|
|
isoCode: 'fa',
|
|
|
|
|
|
rateCode: 'IRR'
|
2017-03-06 09:44:01 -03:00
|
|
|
|
}];
|
2015-08-27 12:07:13 -03:00
|
|
|
|
|
2015-12-20 19:42:25 -03:00
|
|
|
|
root._detect = function(cb) {
|
|
|
|
|
|
var userLang, androidLang;
|
|
|
|
|
|
if (navigator && navigator.globalization) {
|
|
|
|
|
|
|
|
|
|
|
|
navigator.globalization.getPreferredLanguage(function(preferedLanguage) {
|
|
|
|
|
|
// works for iOS and Android 4.x
|
|
|
|
|
|
userLang = preferedLanguage.value;
|
|
|
|
|
|
userLang = userLang ? (userLang.split('-', 1)[0] || 'en') : 'en';
|
2016-01-13 16:12:12 -03:00
|
|
|
|
// Set only available languages
|
|
|
|
|
|
userLang = root.isAvailableLanguage(userLang);
|
2015-12-20 19:42:25 -03:00
|
|
|
|
return cb(userLang);
|
|
|
|
|
|
});
|
2015-08-27 12:07:13 -03:00
|
|
|
|
} else {
|
2015-12-20 19:42:25 -03:00
|
|
|
|
// Auto-detect browser language
|
2015-08-27 12:07:13 -03:00
|
|
|
|
userLang = navigator.userLanguage || navigator.language;
|
2015-12-20 19:42:25 -03:00
|
|
|
|
userLang = userLang ? (userLang.split('-', 1)[0] || 'en') : 'en';
|
2016-01-13 16:12:12 -03:00
|
|
|
|
// Set only available languages
|
|
|
|
|
|
userLang = root.isAvailableLanguage(userLang);
|
2015-12-20 19:42:25 -03:00
|
|
|
|
return cb(userLang);
|
2015-08-27 12:07:13 -03:00
|
|
|
|
}
|
2016-01-13 16:12:12 -03:00
|
|
|
|
};
|
2015-12-20 19:42:25 -03:00
|
|
|
|
|
2016-01-13 16:12:12 -03:00
|
|
|
|
root.isAvailableLanguage = function(userLang) {
|
|
|
|
|
|
return lodash.find(root.availableLanguages, {
|
2016-01-08 11:03:56 -03:00
|
|
|
|
'isoCode': userLang
|
|
|
|
|
|
}) ? userLang : 'en';
|
2015-08-27 12:07:13 -03:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
root._set = function(lang) {
|
|
|
|
|
|
$log.debug('Setting default language: ' + lang);
|
|
|
|
|
|
gettextCatalog.setCurrentLanguage(lang);
|
2016-09-05 11:25:30 -03:00
|
|
|
|
root.currentLanguage = lang;
|
|
|
|
|
|
|
2016-06-07 17:41:21 -03:00
|
|
|
|
if (lang == 'zh') lang = lang + '-CN'; // Fix for Chinese Simplified
|
2015-08-27 12:07:13 -03:00
|
|
|
|
amMoment.changeLocale(lang);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
root.getCurrentLanguage = function() {
|
|
|
|
|
|
return root.currentLanguage;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
root.getCurrentLanguageName = function() {
|
|
|
|
|
|
return root.getName(root.currentLanguage);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2015-09-18 10:22:10 -03:00
|
|
|
|
root.getCurrentLanguageInfo = function() {
|
|
|
|
|
|
return lodash.find(root.availableLanguages, {
|
|
|
|
|
|
'isoCode': root.currentLanguage
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2015-08-27 12:07:13 -03:00
|
|
|
|
root.getLanguages = function() {
|
|
|
|
|
|
return root.availableLanguages;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2018-04-25 13:56:54 +09:00
|
|
|
|
root.init = function(cb, cbSuccess) {
|
2016-09-05 11:33:41 -03:00
|
|
|
|
configService.whenAvailable(function(config) {
|
|
|
|
|
|
var userLang = config.wallet.settings.defaultLanguage;
|
2016-09-05 11:25:30 -03:00
|
|
|
|
|
|
|
|
|
|
if (userLang && userLang != root.currentLanguage) {
|
|
|
|
|
|
root._set(userLang);
|
2018-04-25 13:56:54 +09:00
|
|
|
|
if (cb) return cb(userLang);
|
2016-09-05 11:54:14 -03:00
|
|
|
|
} else {
|
|
|
|
|
|
root._detect(function(lang) {
|
2015-12-20 19:42:25 -03:00
|
|
|
|
root._set(lang);
|
2018-04-25 13:56:54 +09:00
|
|
|
|
if (cb) return cb(lang);
|
2016-09-05 11:54:14 -03:00
|
|
|
|
});
|
2015-12-21 11:31:40 -03:00
|
|
|
|
}
|
2016-09-05 11:54:14 -03:00
|
|
|
|
});
|
2015-08-27 12:07:13 -03:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
root.getName = function(lang) {
|
|
|
|
|
|
return lodash.result(lodash.find(root.availableLanguages, {
|
|
|
|
|
|
'isoCode': lang
|
|
|
|
|
|
}), 'name');
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2018-04-25 13:56:54 +09:00
|
|
|
|
root.getRateCode = function(lang) {
|
|
|
|
|
|
return lodash.result(lodash.find(root.availableLanguages, {
|
|
|
|
|
|
'isoCode': lang
|
|
|
|
|
|
}), 'rateCode');
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2015-08-27 12:07:13 -03:00
|
|
|
|
return root;
|
|
|
|
|
|
});
|