1
0
Fork 0
mirror of https://github.com/betaflight/betaflight-configurator.git synced 2025-07-21 15:25:22 +03:00

Fix sonar issues in localization.js

This commit is contained in:
Miguel Angel Mulero Martinez 2019-12-28 14:57:21 +01:00
parent a538aa6f37
commit 083a1818df

View file

@ -4,7 +4,7 @@
* Wrapper around the i18n system * Wrapper around the i18n system
*/ */
var i18n = {} window.i18n = {};
const languagesAvailables = ['ca', 'de', 'en', 'es', 'eu', 'fr', 'gl', 'hr', 'id', 'it', 'ja', 'ko', 'lv', 'pt', 'pt_BR', 'ru', 'sv', 'zh_CN']; const languagesAvailables = ['ca', 'de', 'en', 'es', 'eu', 'fr', 'gl', 'hr', 'id', 'it', 'ja', 'ko', 'lv', 'pt', 'pt_BR', 'ru', 'sv', 'zh_CN'];
@ -29,15 +29,15 @@ i18n.init = function(cb) {
ns: ['messages'], ns: ['messages'],
defaultNS:['messages'], defaultNS:['messages'],
fallbackLng: languageFallback, fallbackLng: languageFallback,
backend: { loadPath: '/_locales/{{lng}}/{{ns}}.json' } backend: { loadPath: '/_locales/{{lng}}/{{ns}}.json' },
}, function(err, t) { }, function(err) {
if (err !== undefined) { if (err !== undefined) {
console.error('Error loading i18n ' + err); console.error(`Error loading i18n: ${err}`);
} else { } else {
console.log('i18n system loaded'); console.log('i18n system loaded');
var detectedLanguage = i18n.getMessage('language_' + getValidLocale("DEFAULT")); const detectedLanguage = i18n.getMessage(`language_${getValidLocale("DEFAULT")}`);
i18n.addResources({"detectedLanguage": detectedLanguage }); i18n.addResources({"detectedLanguage": detectedLanguage });
i18next.on('languageChanged', function (newLang) { i18next.on('languageChanged', function () {
i18n.localizePage(true); i18n.localizePage(true);
updateStatusBarVersion(); updateStatusBarVersion();
}); });
@ -48,50 +48,52 @@ i18n.init = function(cb) {
}); });
}); });
} };
i18n.changeLanguage = function(languageSelected) { i18n.changeLanguage = function(languageSelected) {
ConfigStorage.set({'userLanguageSelect': languageSelected}); ConfigStorage.set({'userLanguageSelect': languageSelected});
i18next.changeLanguage(getValidLocale(languageSelected)); i18next.changeLanguage(getValidLocale(languageSelected));
i18n.selectedLanguage = languageSelected; i18n.selectedLanguage = languageSelected;
GUI.log(i18n.getMessage('language_changed')); GUI.log(i18n.getMessage('language_changed'));
} };
i18n.getMessage = function(messageID, parameters) { i18n.getMessage = function(messageID, parameters) {
var translatedString; let translatedString;
// Option 1, no parameters or Object as parameters (i18Next type parameters) // Option 1, no parameters or Object as parameters (i18Next type parameters)
if ((parameters === undefined) || ((parameters.constructor !== Array) && (parameters instanceof Object))) { if ((parameters === undefined) || ((parameters.constructor !== Array) && (parameters instanceof Object))) {
translatedString = i18next.t(messageID + '.message', parameters); translatedString = i18next.t(`${messageID}.message`, parameters);
// Option 2: parameters as $1, $2, etc. // Option 2: parameters as $1, $2, etc.
// (deprecated, from the old Chrome i18n // (deprecated, from the old Chrome i18n
} else { } else {
translatedString = i18next.t(messageID + '.message'); translatedString = i18next.t(`${messageID}.message`);
if (parameters.constructor !== Array) { let parametersArray = parameters;
parameters = [parameters]; if (parametersArray.constructor !== Array) {
parametersArray = [parameters];
} }
parameters.forEach(function(element, index) { parametersArray.forEach(function(element, index) {
translatedString = translatedString.replace('$' + (index + 1), element); translatedString = translatedString.replace(`$${(index + 1)}`, element);
}); });
} }
return translatedString; return translatedString;
} };
i18n.getLanguagesAvailables = function() { i18n.getLanguagesAvailables = function() {
return languagesAvailables; return languagesAvailables;
} };
i18n.getCurrentLocale = function() { i18n.getCurrentLocale = function() {
return i18next.language; return i18next.language;
} };
i18n.existsMessage = function(key) { i18n.existsMessage = function(key) {
return i18next.exists(key); return i18next.exists(key);
} };
/** /**
* Helper functions, don't depend of the i18n framework * Helper functions, don't depend of the i18n framework
@ -99,58 +101,58 @@ i18n.existsMessage = function(key) {
i18n.localizePage = function(forceReTranslate) { i18n.localizePage = function(forceReTranslate) {
var localized = 0; let localized = 0;
var translate = function(messageID) { const translate = function(messageID) {
localized++; localized++;
return i18n.getMessage(messageID); return i18n.getMessage(messageID);
}; };
if (forceReTranslate) { if (forceReTranslate) {
$('[i18n]').each(function() { $('[i18n]').each(function() {
var element = $(this); const element = $(this);
element.html(translate(element.attr('i18n'))); element.html(translate(element.attr('i18n')));
}); });
$('[i18n_title]').each(function() { $('[i18n_title]').each(function() {
var element = $(this); const element = $(this);
element.attr('title', translate(element.attr('i18n_title'))); element.attr('title', translate(element.attr('i18n_title')));
}); });
$('[i18n_value]').each(function() { $('[i18n_value]').each(function() {
var element = $(this); const element = $(this);
element.val(translate(element.attr('i18n_value'))); element.val(translate(element.attr('i18n_value')));
}); });
$('[i18n_placeholder]').each(function() { $('[i18n_placeholder]').each(function() {
var element = $(this); const element = $(this);
element.attr('placeholder', translate(element.attr('i18n_placeholder'))); element.attr('placeholder', translate(element.attr('i18n_placeholder')));
}); });
} else { } else {
$('[i18n]:not(.i18n-replaced)').each(function() { $('[i18n]:not(.i18n-replaced)').each(function() {
var element = $(this); const element = $(this);
element.html(translate(element.attr('i18n'))); element.html(translate(element.attr('i18n')));
element.addClass('i18n-replaced'); element.addClass('i18n-replaced');
}); });
$('[i18n_title]:not(.i18n_title-replaced)').each(function() { $('[i18n_title]:not(.i18n_title-replaced)').each(function() {
var element = $(this); const element = $(this);
element.attr('title', translate(element.attr('i18n_title'))); element.attr('title', translate(element.attr('i18n_title')));
element.addClass('i18n_title-replaced'); element.addClass('i18n_title-replaced');
}); });
$('[i18n_value]:not(.i18n_value-replaced)').each(function() { $('[i18n_value]:not(.i18n_value-replaced)').each(function() {
var element = $(this); const element = $(this);
element.val(translate(element.attr('i18n_value'))); element.val(translate(element.attr('i18n_value')));
element.addClass('i18n_value-replaced'); element.addClass('i18n_value-replaced');
}); });
$('[i18n_placeholder]:not(.i18n_placeholder-replaced)').each(function() { $('[i18n_placeholder]:not(.i18n_placeholder-replaced)').each(function() {
var element = $(this); const element = $(this);
element.attr('placeholder', translate(element.attr('i18n_placeholder'))); element.attr('placeholder', translate(element.attr('i18n_placeholder')));
element.addClass('i18n_placeholder-replaced'); element.addClass('i18n_placeholder-replaced');
}); });
} }
return localized; return localized;
} };
/* /*
* Reads the chrome config, if DEFAULT or there is no config stored, * Reads the chrome config, if DEFAULT or there is no config stored,
@ -158,45 +160,46 @@ i18n.localizePage = function(forceReTranslate) {
*/ */
function getStoredUserLocale(cb) { function getStoredUserLocale(cb) {
ConfigStorage.get('userLanguageSelect', function (result) { ConfigStorage.get('userLanguageSelect', function (result) {
var userLanguage = 'DEFAULT'; let userLanguage = 'DEFAULT';
if (result.userLanguageSelect) { if (result.userLanguageSelect) {
userLanguage = result.userLanguageSelect userLanguage = result.userLanguageSelect;
} }
i18n.selectedLanguage = userLanguage; i18n.selectedLanguage = userLanguage;
userLanguage = getValidLocale(userLanguage); userLanguage = getValidLocale(userLanguage);
cb(userLanguage); cb(userLanguage);
}) });
} }
function getValidLocale(userLocale) { function getValidLocale(userLocale) {
if (userLocale == 'DEFAULT') { let validUserLocale = userLocale;
userLocale = window.navigator.userLanguage || window.navigator.language; if (validUserLocale === 'DEFAULT') {
console.log('Detected locale ' + userLocale); validUserLocale = window.navigator.userLanguage || window.navigator.language;
console.log(`Detected locale ${validUserLocale}`);
// The i18next can fallback automatically to the dialect, but needs to be used with hyphen and // The i18next can fallback automatically to the dialect, but needs to be used with hyphen and
// we use underscore because the eventPage.js uses Chrome localization that needs underscore. // we use underscore because the eventPage.js uses Chrome localization that needs underscore.
// If at some moment we get rid of the Chrome localization we can remove all of this // If at some moment we get rid of the Chrome localization we can remove all of this
userLocale = userLocale.replace('-','_'); validUserLocale = validUserLocale.replace('-','_');
// Locale not found // Locale not found
if (languagesAvailables.indexOf(userLocale) == -1) { if (languagesAvailables.indexOf(validUserLocale) === -1) {
// Is a composite locale? // Is a composite locale?
var underscorePosition = userLocale.indexOf('_'); const underscorePosition = validUserLocale.indexOf('_');
if (underscorePosition != -1) { if (underscorePosition !== -1) {
userLocale = userLocale.substring(0, underscorePosition); validUserLocale = validUserLocale.substring(0, underscorePosition);
// Locale dialect fallback not found // Locale dialect fallback not found
if (languagesAvailables.indexOf(userLocale) == -1) { if (languagesAvailables.indexOf(validUserLocale) === -1) {
userLocale = 'en'; // Fallback language validUserLocale = 'en'; // Fallback language
} }
} else { } else {
userLocale = 'en'; validUserLocale = 'en';
} }
} }
} }
return userLocale; return validUserLocale;
} }
i18n.addResources = function(bundle) { i18n.addResources = function(bundle) {