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

switch languages without an app restart

This commit is contained in:
Kyle K 2019-08-03 07:21:11 +00:00
parent 3a0e183a21
commit ea1aaf7e8a
11 changed files with 189 additions and 119 deletions

View file

@ -30,14 +30,30 @@ i18n.init = function(cb) {
console.error('Error loading i18n ' + err);
} else {
console.log('i18n system loaded');
var detectedLanguage = i18n.getMessage('language_' + getValidLocale("DEFAULT"));
i18n.addResources({"detectedLanguage": detectedLanguage });
}
if (cb !== undefined) {
cb();
}
});
});
// This function should do the same things that the i18n.localizePage function below does.
i18next.on('languageChanged', function (newLang) {
var translate = function(messageID) {
return i18n.getMessage(messageID);
};
i18n.localizePage(true);
updateStatusBarVersion();
});
}
i18n.changeLanguage = function(languageSelected) {
ConfigStorage.set({'userLanguageSelect': languageSelected});
i18next.changeLanguage(getValidLocale(languageSelected));
i18n.selectedLanguage = languageSelected;
GUI.log(i18n.getMessage('language_changed'));
}
i18n.getMessage = function(messageID, parameters) {
var translatedString;
@ -79,44 +95,58 @@ i18n.existsMessage = function(key) {
* Helper functions, don't depend of the i18n framework
*/
i18n.localizePage = function() {
i18n.localizePage = function(forceReTranslate) {
var localized = 0;
var translate = function(messageID) {
localized++;
return i18n.getMessage(messageID);
};
$('[i18n]:not(.i18n-replaced)').each(function() {
var element = $(this);
if (forceReTranslate) {
$('[i18n]').each(function() {
var element = $(this);
element.html(translate(element.attr('i18n')));
});
$('[i18n_title]').each(function() {
var element = $(this);
element.attr('title', translate(element.attr('i18n_title')));
});
$('[i18n_value]').each(function() {
var element = $(this);
element.val(translate(element.attr('i18n_value')));
});
$('[i18n_placeholder]').each(function() {
var element = $(this);
element.attr('placeholder', translate(element.attr('i18n_placeholder')));
});
} else {
element.html(translate(element.attr('i18n')));
element.addClass('i18n-replaced');
});
$('[i18n]:not(.i18n-replaced)').each(function() {
var element = $(this);
element.html(translate(element.attr('i18n')));
element.addClass('i18n-replaced');
});
$('[i18n_title]:not(.i18n_title-replaced)').each(function() {
var element = $(this);
$('[i18n_title]:not(.i18n_title-replaced)').each(function() {
var element = $(this);
element.attr('title', translate(element.attr('i18n_title')));
element.addClass('i18n_title-replaced');
});
element.attr('title', translate(element.attr('i18n_title')));
element.addClass('i18n_title-replaced');
});
$('[i18n_value]:not(.i18n_value-replaced)').each(function() {
var element = $(this);
element.val(translate(element.attr('i18n_value')));
element.addClass('i18n_value-replaced');
});
$('[i18n_placeholder]:not(.i18n_placeholder-replaced)').each(function() {
var element = $(this);
element.attr('placeholder', translate(element.attr('i18n_placeholder')));
element.addClass('i18n_placeholder-replaced');
});
$('[i18n_value]:not(.i18n_value-replaced)').each(function() {
var element = $(this);
element.val(translate(element.attr('i18n_value')));
element.addClass('i18n_value-replaced');
});
$('[i18n_placeholder]:not(.i18n_placeholder-replaced)').each(function() {
var element = $(this);
element.attr('placeholder', translate(element.attr('i18n_placeholder')));
element.addClass('i18n_placeholder-replaced');
});
}
return localized;
}
@ -129,7 +159,8 @@ function getStoredUserLocale(cb) {
var userLanguage = 'DEFAULT';
if (result.userLanguageSelect) {
userLanguage = result.userLanguageSelect
}
}
i18n.selectedLanguage = userLanguage;
userLanguage = getValidLocale(userLanguage);