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:
parent
3a0e183a21
commit
ea1aaf7e8a
11 changed files with 189 additions and 119 deletions
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue