Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 32 additions & 26 deletions locales/en/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,75 +69,81 @@
"analyticsOptOut": {
"message": "Opt out of the anonymised collection of statistics data"
},
"userLanguageSelect": {
"message": "Language (need to restart the application for the changes to take effect)"
"language_changed": {
"message": "Language change saved"
},
"language_choice_message": {
"message": "Change language:",
"description": "Try and be brief"
},
"language_default": {
"message": "Default"
"message": "System Default"
},
"language_default_pretty": {
"message": "System Default ($t(detectedLanguage))"
},
"language_ca": {
"message": "Catal\u00e0 (ca)",
"message": "Catal\u00e0",
"description": "Don't translate!!!"
},
"language_de": {
"message": "Deutsch (de)",
"message": "Deutsch",
"description": "Don't translate!!!"
},
"language_en": {
"message": "English (en)",
"message": "English",
"description": "Don't translate!!!"
},
"language_es": {
"message": "Espa\u00f1ol (es)",
"message": "Espa\u00f1ol",
"description": "Don't translate!!!"
},
"language_fr": {
"message": "Fran\u00e7ais (fr)",
"message": "Fran\u00e7ais",
"description": "Don't translate!!!"
},
"language_gl": {
"message": "Galego (gl)",
"message": "Galego",
"description": "Don't translate!!!"
},
"language_hr": {
"message": "Hrvatski (hr)",
"message": "Hrvatski",
"description": "Don't translate!!!"
},

"language_id": {
"message": "Bahasa Indonesia (id)",
"message": "Bahasa Indonesia",
"description": "Don't translate!!!"
},
"language_it": {
"message": "Italiano (it)",
"message": "Italiano",
"description": "Don't translate!!!"
},
"language_ja": {
"message": "\u65E5\u672C\u8A9E (ja)",
"message": "\u65E5\u672C\u8A9E",
"description": "Don't translate!!!"
},
"language_ko": {
"message": "\ud55c\uad6d\uc5b4 (ko)",
"message": "\ud55c\uad6d\uc5b4",
"description": "Don't translate!!!"
},
"language_lv": {
"message": "Latvie\u0161u (lv)",
"message": "Latvie\u0161u",
"description": "Don't translate!!!"
},
"language_pt": {
"message": "Portugu\u00EAs (pt)",
"message": "Portugu\u00EAs",
"description": "Don't translate!!!"
},
"language_ru": {
"message": "\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A (ru)",
"message": "\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A",
"description": "Don't translate!!!"
},
"language_sv": {
"message": "Svenska (sv)",
"message": "Svenska",
"description": "Don't translate!!!"
},
"language_zh_CN": {
"message": "\u7b80\u4f53\u4e2d\u6587 (zh_CN)",
"message": "\u7b80\u4f53\u4e2d\u6587",
"description": "Don't translate!!!"
},

Expand Down Expand Up @@ -231,6 +237,12 @@
"tabLanding": {
"message": "Welcome"
},
"tabChangelog": {
"message": "Changelog"
},
"tabPrivacyPolicy": {
"message": "Privacy Policy"
},
"tabHelp": {
"message": "Documentation & Support"
},
Expand Down Expand Up @@ -573,15 +585,9 @@
"defaultFacebookText": {
"message": "We also have a <a href=\"https://www.facebook.com/groups/betaflightgroup/\" target=\"_blank\">Facebook Group</a>.<br />Join us to get a place to talk about Betaflight, ask configuration questions, or just hang out with fellow pilots."
},
"defaultChangelogAction": {
"message": "Changelog"
},
"defaultChangelogHead": {
"message": "Configurator - Changelog"
},
"defaultPrivacyPolicyAction": {
"message": "Privacy Policy"
},
"defaultButtonFirmwareFlasher": {
"message": "Firmware Flasher"
},
Expand Down
7 changes: 5 additions & 2 deletions src/css/main.css
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ body {
a {
text-decoration: none;
color: var(--defaultText);
font-family: 'open_sanssemibold', Arial;
font-weight: bold;
}

a:hover {
Expand Down Expand Up @@ -513,7 +513,7 @@ input[type="number"]::-webkit-inner-spin-button {
}

#log a {
font-weight: regular;
font-weight: normal;
color: #ffbb00;
}

Expand Down Expand Up @@ -590,6 +590,7 @@ input[type="number"]::-webkit-inner-spin-button {

#tabs li a {
font-family: 'open_sansregular', Arial;
font-weight: normal;
padding-left: 33px;
padding-top: 5px;
padding-bottom: 3px;
Expand Down Expand Up @@ -1654,6 +1655,7 @@ dialog {
color: #fff;
font-size: 12px;
font-family: 'open_sansregular', Arial;
font-weight: normal;
text-shadow: 0px 1px rgba(0, 0, 0, 0.25);
margin-top: -1px;
}
Expand All @@ -1666,6 +1668,7 @@ dialog {
color: #fff;
font-size: 12px;
font-family: 'open_sansregular', Arial;
font-weight: normal;
text-shadow: 0px 1px rgba(0, 0, 0, 0.25);
margin-top: -1px;
}
Expand Down
19 changes: 19 additions & 0 deletions src/css/tabs/landing.css
Original file line number Diff line number Diff line change
Expand Up @@ -180,3 +180,22 @@
display: block;
float: left;
}

.tab-landing .languageSwitcher .selected_language {
font-weight: bold;
}
.tab-landing .languageSwitcher {
margin-left: auto;
margin-right: auto;
text-align: center;
color: silver;
}
.tab-landing .languageSwitcher a {
color: silver;
font-weight: normal;
white-space: nowrap;
}
.tab-landing .languageSwitcher a:not(:last-child):after {
content: ", ";
font-weight: normal;
}
85 changes: 58 additions & 27 deletions src/js/localization.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);

element.html(translate(element.attr('i18n')));
element.addClass('i18n-replaced');
});

$('[i18n_title]:not(.i18n_title-replaced)').each(function() {
var element = $(this);

element.attr('title', translate(element.attr('i18n_title')));
element.addClass('i18n_title-replaced');
});

$('[i18n_value]:not(.i18n_value-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.val(translate(element.attr('i18n_value')));
element.addClass('i18n_value-replaced');
});
$('[i18n]:not(.i18n-replaced)').each(function() {
var element = $(this);
element.html(translate(element.attr('i18n')));
element.addClass('i18n-replaced');
});

$('[i18n_placeholder]:not(.i18n_placeholder-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('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;
}

Expand All @@ -129,7 +159,8 @@ function getStoredUserLocale(cb) {
var userLanguage = 'DEFAULT';
if (result.userLanguageSelect) {
userLanguage = result.userLanguageSelect
}
}
i18n.selectedLanguage = userLanguage;

userLanguage = getValidLocale(userLanguage);

Expand Down
35 changes: 6 additions & 29 deletions src/js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -134,12 +134,6 @@ function startProcess() {
checkForConfiguratorUpdates();
}

ConfigStorage.get('logopen', function (result) {
if (result.logopen) {
$("#showlog").trigger('click');
}
});

// log webgl capability
// it would seem the webgl "enabling" through advanced settings will be ignored in the future
// and webgl will be supported if gpu supports it by default (canary 40.0.2175.0), keep an eye on this one
Expand Down Expand Up @@ -398,29 +392,6 @@ function startProcess() {
DarkTheme.setConfig(checked);
}).change();

ConfigStorage.get('userLanguageSelect', function (result) {

var userLanguage_e = $('div.userLanguage select');
var languagesAvailables = i18n.getLanguagesAvailables();
userLanguage_e.append('<option value="DEFAULT">' + i18n.getMessage('language_default') + '</option>');
userLanguage_e.append('<option disabled>------</option>');
languagesAvailables.forEach(function(element) {
var languageName = i18n.getMessage('language_' + element);
userLanguage_e.append('<option value="' + element + '">' + languageName + '</option>');
});

if (result.userLanguageSelect) {
userLanguage_e.val(result.userLanguageSelect);
}

userLanguage_e.change(function () {
var languageSelected = $(this).val();

// Select the new language, a restart is required
ConfigStorage.set({'userLanguageSelect': languageSelected});
});
});

function close_and_cleanup(e) {
if (e.type == 'click' && !$.contains($('div#options-window')[0], e.target) || e.type == 'keyup' && e.keyCode == 27) {
$(document).unbind('click keyup', close_and_cleanup);
Expand Down Expand Up @@ -542,6 +513,12 @@ function startProcess() {
$(this).data('state', state);
});

ConfigStorage.get('logopen', function (result) {
if (result.logopen) {
$("#showlog").trigger('click');
}
});

ConfigStorage.get('permanentExpertMode', function (result) {
if (result.permanentExpertMode) {
$('input[name="expertModeCheckbox"]').prop('checked', true);
Expand Down
4 changes: 3 additions & 1 deletion src/js/port_handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,9 @@ PortHandler.update_port_select = function (ports) {
$('div#port-picker #port').append($("<option/>", {value: ports[i], text: ports[i], data: {isManual: false}}));
}

$('div#port-picker #port').append($("<option/>", {value: 'manual', text: i18n.getMessage('portsSelectManual'), data: {isManual: true}}));
$('div#port-picker #port').append($("<option/>", {value: 'manual', i18n: 'portsSelectManual', data: {isManual: true}}));
i18n.localizePage();

};

PortHandler.port_detected = function(name, code, timeout, ignore_timeout) {
Expand Down
Loading