Wallet/src/js/services/uxLanguage.js
2016-12-12 15:58:22 -03:00

120 lines
3.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'use strict';
angular.module('copayApp.services')
.factory('uxLanguage', function languageService($log, lodash, gettextCatalog, amMoment, configService) {
var root = {};
root.currentLanguage = null;
root.availableLanguages = [{
name: 'English',
isoCode: 'en',
}, {
name: 'Český',
isoCode: 'cs',
}, {
name: 'Français',
isoCode: 'fr',
}, {
name: 'Italiano',
isoCode: 'it',
}, {
name: 'Deutsch',
isoCode: 'de',
}, {
name: 'Español',
isoCode: 'es',
}, {
name: '日本語',
isoCode: 'ja',
useIdeograms: true,
}, {
name: '中文(简体)',
isoCode: 'zh',
useIdeograms: true,
}, {
name: 'Polski',
isoCode: 'pl',
}, {
name: 'Pусский',
isoCode: 'ru',
}];
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';
// Set only available languages
userLang = root.isAvailableLanguage(userLang);
return cb(userLang);
});
} else {
// 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);
}
};
root.isAvailableLanguage = function(userLang) {
return lodash.find(root.availableLanguages, {
'isoCode': userLang
}) ? userLang : 'en';
};
root._set = function(lang) {
$log.debug('Setting default language: ' + lang);
gettextCatalog.setCurrentLanguage(lang);
root.currentLanguage = lang;
if (lang == 'zh') lang = lang + '-CN'; // Fix for Chinese Simplified
amMoment.changeLocale(lang);
};
root.getCurrentLanguage = function() {
return root.currentLanguage;
};
root.getCurrentLanguageName = function() {
return root.getName(root.currentLanguage);
};
root.getCurrentLanguageInfo = function() {
return lodash.find(root.availableLanguages, {
'isoCode': root.currentLanguage
});
};
root.getLanguages = function() {
return root.availableLanguages;
};
root.init = function(cb) {
configService.whenAvailable(function(config) {
var userLang = config.wallet.settings.defaultLanguage;
if (userLang && userLang != root.currentLanguage) {
root._set(userLang);
} else {
root._detect(function(lang) {
root._set(lang);
});
}
if (cb) return cb();
});
};
root.getName = function(lang) {
return lodash.result(lodash.find(root.availableLanguages, {
'isoCode': lang
}), 'name');
};
return root;
});