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:
parent
a538aa6f37
commit
083a1818df
1 changed files with 50 additions and 47 deletions
|
@ -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) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue