mirror of
https://github.com/Serial-Studio/Serial-Studio.git
synced 2025-01-31 17:42:55 +08:00
Add logarithmic scale to control UI refresh freq. & russian translations
This commit is contained in:
parent
505ab1f0de
commit
782168edab
@ -24,7 +24,8 @@ TRANSLATIONS += \
|
||||
$$PWD/translations/en.ts \
|
||||
$$PWD/translations/es.ts \
|
||||
$$PWD/translations/zh.ts \
|
||||
$$PWD/translations/de.ts
|
||||
$$PWD/translations/de.ts \
|
||||
$$PWD/translations/ru.ts
|
||||
|
||||
RESOURCES += \
|
||||
$$PWD/icons/rcc_icons.qrc \
|
||||
|
@ -24,5 +24,5 @@ MCU-Projekten, lesen Sie bitte das Wiki:
|
||||
|
||||
→ https://github.com/Serial-Studio/Serial-Studio/wiki
|
||||
|
||||
Tipp: Doppelklicken Sie auf eine Gruppe, ein Diagramm oder ein Widget, um es in
|
||||
einem anderen Fenster anzuzeigen.
|
||||
Tipp: Verwenden Sie den JSON-Editor zum Erstellen und Bearbeiten von
|
||||
Serial Studio-Projektdateien.
|
||||
|
@ -22,4 +22,4 @@ the wiki:
|
||||
|
||||
→ https://github.com/Serial-Studio/Serial-Studio/wiki
|
||||
|
||||
Tip: Double-click on any group, chart or widget to view it in another window.
|
||||
Tip: use the JSON Editor to create and edit Serial Studio project files.
|
||||
|
@ -22,5 +22,4 @@ actuales, por favor lea la wiki:
|
||||
|
||||
→ https://github.com/Serial-Studio/Serial-Studio/wiki
|
||||
|
||||
Consejo: haga doble clic en cualquier grupo, gráfico o widget para verlo en
|
||||
otra ventana.
|
||||
Consejo: utilice el Editor JSON para crear y editar proyectos de Serial Studio.
|
||||
|
28
assets/messages/Welcome_RU.txt
Normal file
28
assets/messages/Welcome_RU.txt
Normal file
@ -0,0 +1,28 @@
|
||||
________ _____ ______ ____________ _____________
|
||||
__ ___/______________(_)_____ ___ / __ ___/_ /____ _______ /__(_)_____
|
||||
_____ \_ _ \_ ___/_ /_ __ `/_ / _____ \_ __/ / / / __ /__ /_ __ \
|
||||
____/ // __/ / _ / / /_/ /_ / ____/ // /_ / /_/ // /_/ / _ / / /_/ /
|
||||
/____/ \___//_/ /_/ \__,_/ /_/ /____/ \__/ \__,_/ \__,_/ /_/ \____/
|
||||
|
||||
|
||||
Добро пожаловать в Serial Studio! Для начала, пожалуйста, выберите COM-порт и
|
||||
скорость передачи данных в панели панели устройств справа. Если последовательное
|
||||
соединение успешно и входящие данные интерпретируются правильно, эта панель
|
||||
автоматически закроется, и на экране появится приборная панель будет отображена.
|
||||
В противном случае вы можете использовать консоль, чтобы найти источник вашей
|
||||
проблемы.
|
||||
|
||||
Используйте кнопки панели инструментов для отображения функций, которые вы хотите
|
||||
использовать. Если вы столкнулись с проблемой при работе с Serial Studio, сообщите
|
||||
об этом по адресу:
|
||||
|
||||
→ https://github.com/Serial-Studio/Serial-Studio/issues
|
||||
|
||||
Вы также можете воспользоваться ссылками в окне "О программе". Для получения
|
||||
документации по использования Serial Studio и интеграции с вашими текущими
|
||||
проектами MCU, пожалуйста, прочитайте вики:
|
||||
|
||||
→ https://github.com/Serial-Studio/Serial-Studio/wiki
|
||||
|
||||
Совет: Используйте редактор JSON Editor для создания и редактирования файлов
|
||||
проекта Serial Studio.
|
@ -17,4 +17,4 @@ ____/ // __/ / _ / / /_/ /_ / ____/ // /_ / /_/ // /_/ / _ / / /_/ /
|
||||
|
||||
→ https://github.com/Serial-Studio/Serial-Studio/wiki
|
||||
|
||||
提示:双击任何组,图表或小部件以在另一个窗口中查看它。
|
||||
提示:使用JSON编辑器来创建和编辑Serial Studio项目文件。
|
||||
|
@ -5,5 +5,6 @@
|
||||
<file>Welcome_EN.txt</file>
|
||||
<file>Welcome_ES.txt</file>
|
||||
<file>Welcome_ZH.txt</file>
|
||||
<file>Welcome_RU.txt</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
@ -36,6 +36,33 @@ Control {
|
||||
property alias startSequence: _startSequence.text
|
||||
property alias tcpPlugins: _tcpPlugins.checked
|
||||
property alias separatorSequence: _separatorSequence.text
|
||||
property alias uiRefreshRate: _uiRefreshRate.value
|
||||
|
||||
//
|
||||
// Maps the slider position to Hz
|
||||
// https://stackoverflow.com/a/846249
|
||||
//
|
||||
function logslider(position) {
|
||||
var minp = 0
|
||||
var maxp = 100
|
||||
var minv = Math.log(1)
|
||||
var maxv = Math.log(1000)
|
||||
var scale = (maxv - minv) / (maxp - minp);
|
||||
return Math.exp(minv + scale * (position - minp));
|
||||
}
|
||||
|
||||
//
|
||||
// Maps the Hz value to the slider position
|
||||
// https://stackoverflow.com/a/846249
|
||||
//
|
||||
function logposition(value) {
|
||||
var minp = 0
|
||||
var maxp = 100
|
||||
var minv = Math.log(1)
|
||||
var maxv = Math.log(1000)
|
||||
var scale = (maxv - minv) / (maxp - minp)
|
||||
return (Math.log(value) - minv) / scale + minp;
|
||||
}
|
||||
|
||||
//
|
||||
// Layout
|
||||
@ -130,6 +157,30 @@ Control {
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// UI refresh frequency
|
||||
//
|
||||
Label {
|
||||
text: qsTr("UI refresh rate") + ": "
|
||||
} RowLayout {
|
||||
spacing: app.spacing
|
||||
Slider {
|
||||
id: _uiRefreshRate
|
||||
from: 0
|
||||
to: 100
|
||||
Layout.fillWidth: true
|
||||
value: logposition(Cpp_Misc_TimerEvents.highFreqTimeoutHz)
|
||||
onValueChanged: {
|
||||
if (logslider(value) !== Cpp_Misc_TimerEvents.highFreqTimeoutHz)
|
||||
Cpp_Misc_TimerEvents.highFreqTimeoutHz = logslider(value)
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
text: Cpp_Misc_TimerEvents.highFreqTimeoutHz + " Hz"
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Plugins enabled
|
||||
//
|
||||
|
@ -80,6 +80,7 @@ Item {
|
||||
property alias startSequence: settings.startSequence
|
||||
property alias tcpPlugins: settings.tcpPlugins
|
||||
property alias separatorSequence: settings.separatorSequence
|
||||
property alias uiRefreshRate: settings.uiRefreshRate
|
||||
}
|
||||
|
||||
//
|
||||
|
Binary file not shown.
@ -658,6 +658,145 @@
|
||||
<translation>Netzwerk Schnittstelle</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JSON::Editor</name>
|
||||
<message>
|
||||
<source>Dataset widgets</source>
|
||||
<translation>Widgets für Datensätze</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Accelerometer</source>
|
||||
<translation>Beschleunigungsmesser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gyroscope</source>
|
||||
<translation>Gyroskop</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Map</source>
|
||||
<translation>Karte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Keine</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gauge</source>
|
||||
<translation>Messgerät</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Bar/level</source>
|
||||
<translation>Bar/Niveau</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Compass</source>
|
||||
<translation>Kompass</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Project</source>
|
||||
<translation>Neues Projekt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you want to save your changes?</source>
|
||||
<translation>Möchten Sie Ihre Änderungen speichern?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have unsaved modifications in this project!</source>
|
||||
<translation>Sie haben nicht gespeicherte Änderungen in diesem Projekt!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project error</source>
|
||||
<translation>Projektfehler</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project title cannot be empty!</source>
|
||||
<translation>Der Projekttitel darf nicht leer sein!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project error - Group %1</source>
|
||||
<translation>Projektfehler - Gruppe %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Group title cannot be empty!</source>
|
||||
<translation>Der Gruppentitel darf nicht leer sein!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project error - Group %1, Dataset %2</source>
|
||||
<translation>Projektfehler - Gruppe %1, Datensatz %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Dataset title cannot be empty!</source>
|
||||
<translation>Der Titel des Datensatzes darf nicht leer sein!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Warning - Group %1, Dataset %2</source>
|
||||
<translation>Warnung - Gruppe %1, Datensatz %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Dataset contains duplicate frame index position! Continue?</source>
|
||||
<translation>Der Datensatz enthält eine doppelte Frame-Indexposition! Weiter?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save JSON project</source>
|
||||
<translation>JSON-Projekt speichern</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File open error</source>
|
||||
<translation>Fehler beim Öffnen einer Datei</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select JSON file</source>
|
||||
<translation>JSON Modelldatei auswählen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Group</source>
|
||||
<translation>Neue Gruppe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete group "%1"</source>
|
||||
<translation>Gruppe "%1" löschen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to delete this group?</source>
|
||||
<translation>Sind Sie sicher, dass Sie diese Gruppe löschen wollen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to change the group-level widget?</source>
|
||||
<translation>Sind Sie sicher, dass Sie das Widget auf Gruppenebene ändern möchten?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Existing datasets for this group will be deleted</source>
|
||||
<translation>Vorhandene Datensätze für diese Gruppe werden gelöscht</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Accelerometer %1</source>
|
||||
<translation>Beschleunigungsmesser %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gyro %1</source>
|
||||
<translation>Kreisel %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Latitude</source>
|
||||
<translation>Breitengrad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Longitude</source>
|
||||
<translation>Längengrad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New dataset</source>
|
||||
<translation>Neuer Datensatz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete dataset "%1"</source>
|
||||
<translation>Datensatz "%1" löschen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to delete this dataset?</source>
|
||||
<translation>Sind Sie sicher, dass Sie diesen Datensatz löschen wollen?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JSON::Generator</name>
|
||||
<message>
|
||||
@ -674,11 +813,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>JSON map file loaded successfully!</source>
|
||||
<translation>JSON Modelldatei erfolgreich geladen!</translation>
|
||||
<translation type="vanished">JSON Modelldatei erfolgreich geladen!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File "%1" loaded into memory</source>
|
||||
<translation>Datei %1 geladen</translation>
|
||||
<translation type="vanished">Datei %1 geladen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot read JSON file</source>
|
||||
@ -697,6 +836,104 @@
|
||||
<translation type="vanished">Das Format der empfangenen Daten stimmt nicht mit der ausgewählten JSON Modelldatei überein.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonDatasetDelegate</name>
|
||||
<message>
|
||||
<source>Dataset %1 - %2</source>
|
||||
<translation>Datensatz %1 - %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Title:</source>
|
||||
<translation>Titel:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sensor reading, uptime, etc...</source>
|
||||
<translation>Sensormesswerte, Betriebszeit usw...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Units:</source>
|
||||
<translation>Einheiten:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Volts, meters, seconds, etc...</source>
|
||||
<translation>Volt, Meter, Sekunden, usw...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Frame index:</source>
|
||||
<translation>Frame-Index:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Generate graph:</source>
|
||||
<translation>Erzeugen Sie ein Diagramm:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Widget:</source>
|
||||
<translation>Widget:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Min value:</source>
|
||||
<translation>Minimaler Wert:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Max value:</source>
|
||||
<translation>Maximaler Wert:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonEditor</name>
|
||||
<message>
|
||||
<source>JSON Editor - %1</source>
|
||||
<translation>JSON-Editor - %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project title (required)</source>
|
||||
<translation>Projekttitel (erforderlich)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Data separator (default is ',')</source>
|
||||
<translation>Datentrennzeichen (Standard ist ',')</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Frame start sequence (default is '%1')</source>
|
||||
<translation>Startsequenz des Rahmens (Standard ist '%1')</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Frame end sequence (default is '%1')</source>
|
||||
<translation>Rahmenendsequenz (Standard ist '%1')</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Start something awesome</source>
|
||||
<translation>Starten Sie etwas Großartiges</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Click on the "%1" button to begin</source>
|
||||
<translation>Klicken Sie auf die Schaltfläche "%1", um zu beginnen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Close</source>
|
||||
<translation>Schließen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add group</source>
|
||||
<translation>Gruppe hinzufügen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open existing project...</source>
|
||||
<translation>Vorhandenes Projekt öffnen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Create new project</source>
|
||||
<translation>Neues Projekt erstellen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Apply</source>
|
||||
<translation>Bewerbung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save</source>
|
||||
<translation>Speichern</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonGenerator</name>
|
||||
<message>
|
||||
@ -736,6 +973,21 @@
|
||||
<translation type="vanished">JSON Dateien</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonGroupDelegate</name>
|
||||
<message>
|
||||
<source>Group %1 - %2</source>
|
||||
<translation>Gruppe %1 - %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Title</source>
|
||||
<translation>Titel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add dataset</source>
|
||||
<translation>Datensatz hinzufügen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MQTT</name>
|
||||
<message>
|
||||
@ -1466,6 +1718,14 @@
|
||||
<source>Theme</source>
|
||||
<translation>Thema</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Data separator</source>
|
||||
<translation>Daten-Trennzeichen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>UI refresh rate</source>
|
||||
<translation>UI-Aktualisierungsrate</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Setup</name>
|
||||
@ -1619,6 +1879,10 @@
|
||||
<source>Connect</source>
|
||||
<translation>Verbinden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JSON Editor</source>
|
||||
<translation>JSON-Editor</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Updater</name>
|
||||
|
Binary file not shown.
@ -571,6 +571,145 @@
|
||||
<translation></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JSON::Editor</name>
|
||||
<message>
|
||||
<source>Dataset widgets</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Accelerometer</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gyroscope</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Map</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gauge</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Bar/level</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Compass</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Project</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you want to save your changes?</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have unsaved modifications in this project!</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project error</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project title cannot be empty!</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project error - Group %1</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Group title cannot be empty!</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project error - Group %1, Dataset %2</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Dataset title cannot be empty!</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Warning - Group %1, Dataset %2</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Dataset contains duplicate frame index position! Continue?</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save JSON project</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File open error</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select JSON file</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Group</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete group "%1"</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to delete this group?</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to change the group-level widget?</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Existing datasets for this group will be deleted</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Accelerometer %1</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gyro %1</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Latitude</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Longitude</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New dataset</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete dataset "%1"</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to delete this dataset?</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JSON::Generator</name>
|
||||
<message>
|
||||
@ -585,14 +724,6 @@
|
||||
<source>JSON parse error</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JSON map file loaded successfully!</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File "%1" loaded into memory</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot read JSON file</source>
|
||||
<translation></translation>
|
||||
@ -602,6 +733,119 @@
|
||||
<translation></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonDatasetDelegate</name>
|
||||
<message>
|
||||
<source>Dataset %1 - %2</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Title:</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sensor reading, uptime, etc...</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Units:</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Volts, meters, seconds, etc...</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Frame index:</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Generate graph:</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Widget:</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Min value:</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Max value:</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonEditor</name>
|
||||
<message>
|
||||
<source>JSON Editor - %1</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project title (required)</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Data separator (default is ',')</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Frame start sequence (default is '%1')</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Frame end sequence (default is '%1')</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Start something awesome</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Click on the "%1" button to begin</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Close</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add group</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open existing project...</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Create new project</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Apply</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonGroupDelegate</name>
|
||||
<message>
|
||||
<source>Group %1 - %2</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Title</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add dataset</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MQTT</name>
|
||||
<message>
|
||||
@ -1256,6 +1500,14 @@
|
||||
<source>Theme</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Data separator</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>UI refresh rate</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Setup</name>
|
||||
@ -1354,6 +1606,10 @@
|
||||
<source>Connect</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JSON Editor</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Updater</name>
|
||||
|
Binary file not shown.
@ -690,6 +690,145 @@
|
||||
<translation>Puerto de red</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JSON::Editor</name>
|
||||
<message>
|
||||
<source>Dataset widgets</source>
|
||||
<translation>Widgets de conjuntos de datos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Accelerometer</source>
|
||||
<translation>Acelerómetro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gyroscope</source>
|
||||
<translation>Giroscopio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Map</source>
|
||||
<translation>Mapa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Ninguno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gauge</source>
|
||||
<translation>Calibre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Bar/level</source>
|
||||
<translation>Barra/nivel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Compass</source>
|
||||
<translation>Brújula</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Project</source>
|
||||
<translation>Nuevo proyecto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you want to save your changes?</source>
|
||||
<translation>¿Quieres guardar los cambios?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have unsaved modifications in this project!</source>
|
||||
<translation>¡Tienes modificaciones sin guardar en este proyecto!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project error</source>
|
||||
<translation>Error de proyecto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project title cannot be empty!</source>
|
||||
<translation>El título del proyecto no puede estar vacío.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project error - Group %1</source>
|
||||
<translation>Error de proyecto - Grupo %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Group title cannot be empty!</source>
|
||||
<translation>El título del grupo no puede estar vacío.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project error - Group %1, Dataset %2</source>
|
||||
<translation>Error de proyecto - Grupo %1, Conjunto de datos %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Dataset title cannot be empty!</source>
|
||||
<translation>El título del conjunto de datos no puede estar vacío.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Warning - Group %1, Dataset %2</source>
|
||||
<translation>Advertencia - Grupo %1, conjunto de datos %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Dataset contains duplicate frame index position! Continue?</source>
|
||||
<translation>El conjunto de datos contiene una posición de índice de trama duplicada. ¿Continuar?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save JSON project</source>
|
||||
<translation>Guardar proyecto JSON</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File open error</source>
|
||||
<translation>Error al abrir el archivo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select JSON file</source>
|
||||
<translation>Seleccionar archivo JSON</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Group</source>
|
||||
<translation>Nuevo grupo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete group "%1"</source>
|
||||
<translation>Eliminar el grupo "%1"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to delete this group?</source>
|
||||
<translation>¿Estás seguro/a de que quieres eliminar este grupo?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to change the group-level widget?</source>
|
||||
<translation>¿Estás seguro/a de que quieres cambiar el widget a nivel de grupo?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Existing datasets for this group will be deleted</source>
|
||||
<translation>Los conjuntos de datos existentes para este grupo se eliminarán</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Accelerometer %1</source>
|
||||
<translation>Acelerómetro %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gyro %1</source>
|
||||
<translation>Giroscopio %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Latitude</source>
|
||||
<translation>Latitud</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Longitude</source>
|
||||
<translation>Longitud</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New dataset</source>
|
||||
<translation>Nuevo conjunto de datos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete dataset "%1"</source>
|
||||
<translation>Eliminar el conjunto de datos "%1"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to delete this dataset?</source>
|
||||
<translation>¿Está seguro/a de que quiere eliminar este conjunto de datos?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JSON::Generator</name>
|
||||
<message>
|
||||
@ -706,11 +845,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>JSON map file loaded successfully!</source>
|
||||
<translation>¡El archivo de mapa JSON se cargó correctamente!</translation>
|
||||
<translation type="vanished">¡El archivo de mapa JSON se cargó correctamente!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File "%1" loaded into memory</source>
|
||||
<translation>Archivo "%1" cargado en memoria</translation>
|
||||
<translation type="vanished">Archivo "%1" cargado en memoria</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot read JSON file</source>
|
||||
@ -729,6 +868,104 @@
|
||||
<translation type="vanished">El formato de los datos recibidos no se corresponde con el archivo de mapa JSON seleccionado.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonDatasetDelegate</name>
|
||||
<message>
|
||||
<source>Dataset %1 - %2</source>
|
||||
<translation>Conjunto de datos %1 - %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Title:</source>
|
||||
<translation>Título:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sensor reading, uptime, etc...</source>
|
||||
<translation>Lectura del sensor, tiempo de funcionamiento, etc...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Units:</source>
|
||||
<translation>Unidades:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Volts, meters, seconds, etc...</source>
|
||||
<translation>Voltios, metros, segundos, etc...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Frame index:</source>
|
||||
<translation>Índice de la trama:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Generate graph:</source>
|
||||
<translation>Generar gráfico:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Widget:</source>
|
||||
<translation>Widget:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Min value:</source>
|
||||
<translation>Valor mínimo:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Max value:</source>
|
||||
<translation>Valor máximo:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonEditor</name>
|
||||
<message>
|
||||
<source>JSON Editor - %1</source>
|
||||
<translation>Editor JSON - %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project title (required)</source>
|
||||
<translation>Título del proyecto (obligatorio)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Data separator (default is ',')</source>
|
||||
<translation>Separador de datos (por defecto es ',')</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Frame start sequence (default is '%1')</source>
|
||||
<translation>Secuencia de inicio de la trama (por defecto es '%1')</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Frame end sequence (default is '%1')</source>
|
||||
<translation>Secuencia de fin de la trarma (por defecto es '%1')</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Start something awesome</source>
|
||||
<translation>Comienza algo increíble</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Click on the "%1" button to begin</source>
|
||||
<translation>Haga clic en el botón "%1" para comenzar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Close</source>
|
||||
<translation>Cerrar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add group</source>
|
||||
<translation>Agregar grupo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open existing project...</source>
|
||||
<translation>Abrir un proyecto existente...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Create new project</source>
|
||||
<translation>Crear nuevo proyecto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Apply</source>
|
||||
<translation>Aplicar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save</source>
|
||||
<translation>Guardar</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonGenerator</name>
|
||||
<message>
|
||||
@ -772,6 +1009,21 @@
|
||||
<translation type="vanished">Archivos JSON</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonGroupDelegate</name>
|
||||
<message>
|
||||
<source>Group %1 - %2</source>
|
||||
<translation>Grupo %1 - %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Title</source>
|
||||
<translation>Título</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add dataset</source>
|
||||
<translation>Agregar conjunto de datos</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonParser</name>
|
||||
<message>
|
||||
@ -1585,6 +1837,14 @@
|
||||
<source>Theme</source>
|
||||
<translation>Tema</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Data separator</source>
|
||||
<translation>Separador de datos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>UI refresh rate</source>
|
||||
<translation>Frec. de actualización</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Setup</name>
|
||||
@ -1774,6 +2034,10 @@
|
||||
<source>Connect</source>
|
||||
<translation>Conectar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JSON Editor</source>
|
||||
<translation>Editor JSON</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Updater</name>
|
||||
|
@ -4,5 +4,6 @@
|
||||
<file>en.qm</file>
|
||||
<file>es.qm</file>
|
||||
<file>zh.qm</file>
|
||||
<file>ru.qm</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
BIN
assets/translations/ru.qm
Normal file
BIN
assets/translations/ru.qm
Normal file
Binary file not shown.
1648
assets/translations/ru.ts
Normal file
1648
assets/translations/ru.ts
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -686,6 +686,145 @@
|
||||
<translation>网络端口</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JSON::Editor</name>
|
||||
<message>
|
||||
<source>Dataset widgets</source>
|
||||
<translation>数据集小工具</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Accelerometer</source>
|
||||
<translation>加速器</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gyroscope</source>
|
||||
<translation>陀螺仪</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Map</source>
|
||||
<translation>地图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>无</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gauge</source>
|
||||
<translation>仪表盘</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Bar/level</source>
|
||||
<translation>酒吧/楼层</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Compass</source>
|
||||
<translation>指南针</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Project</source>
|
||||
<translation>新项目</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you want to save your changes?</source>
|
||||
<translation>你想保存你的改动吗?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have unsaved modifications in this project!</source>
|
||||
<translation>你在这个项目中有未保存的修改!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project error</source>
|
||||
<translation>项目错误</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project title cannot be empty!</source>
|
||||
<translation>项目标题不能是空的!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project error - Group %1</source>
|
||||
<translation>Project error - Group %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Group title cannot be empty!</source>
|
||||
<translation>组的标题不能是空的!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project error - Group %1, Dataset %2</source>
|
||||
<translation>项目错误 - 组%1,数据集%2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Dataset title cannot be empty!</source>
|
||||
<translation>数据集的标题不能是空的!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Warning - Group %1, Dataset %2</source>
|
||||
<translation>警告 - 组 %1, 数据集 %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Dataset contains duplicate frame index position! Continue?</source>
|
||||
<translation>数据集包含重复的帧索引位置! 继续吗?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save JSON project</source>
|
||||
<translation>保存JSON项目</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File open error</source>
|
||||
<translation>文件打开错误</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select JSON file</source>
|
||||
<translation>选择JSON映射文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Group</source>
|
||||
<translation>新集团</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete group "%1"</source>
|
||||
<translation>删除组"%1"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to delete this group?</source>
|
||||
<translation>你确定要删除这个组吗?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to change the group-level widget?</source>
|
||||
<translation>你确定你要改变组级小部件吗?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Existing datasets for this group will be deleted</source>
|
||||
<translation>该组的现有数据集将被删除</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Accelerometer %1</source>
|
||||
<translation>加速器%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gyro %1</source>
|
||||
<translation>陀螺仪 %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Latitude</source>
|
||||
<translation>纬度</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Longitude</source>
|
||||
<translation>经度</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New dataset</source>
|
||||
<translation>新的数据集</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete dataset "%1"</source>
|
||||
<translation>删除数据集"%1"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to delete this dataset?</source>
|
||||
<translation>你确定要删除这个数据集吗?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JSON::Generator</name>
|
||||
<message>
|
||||
@ -702,11 +841,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>JSON map file loaded successfully!</source>
|
||||
<translation>JSON映射文件已成功加载!</translation>
|
||||
<translation type="vanished">JSON映射文件已成功加载!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File "%1" loaded into memory</source>
|
||||
<translation>文件“%1”已加载到内存中</translation>
|
||||
<translation type="vanished">文件“%1”已加载到内存中</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot read JSON file</source>
|
||||
@ -725,6 +864,104 @@
|
||||
<translation type="vanished">接收到的数据格式与所选的JSON映射文件不对应。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonDatasetDelegate</name>
|
||||
<message>
|
||||
<source>Dataset %1 - %2</source>
|
||||
<translation>数据集 %1 - %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Title:</source>
|
||||
<translation>标题:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sensor reading, uptime, etc...</source>
|
||||
<translation>传感器读数、正常运行时间等...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Units:</source>
|
||||
<translation>单位:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Volts, meters, seconds, etc...</source>
|
||||
<translation>伏特,米,秒,等等...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Frame index:</source>
|
||||
<translation>框架指数:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Generate graph:</source>
|
||||
<translation>生成图形:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Widget:</source>
|
||||
<translation>小工具:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Min value:</source>
|
||||
<translation>最小值:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Max value:</source>
|
||||
<translation>最大值:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonEditor</name>
|
||||
<message>
|
||||
<source>JSON Editor - %1</source>
|
||||
<translation>JSON编辑器 - %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Project title (required)</source>
|
||||
<translation>项目名称(必填)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Data separator (default is ',')</source>
|
||||
<translation>数据分隔符(默认为',')</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Frame start sequence (default is '%1')</source>
|
||||
<translation>帧开始顺序(默认为'%1')</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Frame end sequence (default is '%1')</source>
|
||||
<translation>帧结束序列(默认为'%1')</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Start something awesome</source>
|
||||
<translation>开始做一些了不起的事情</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Click on the "%1" button to begin</source>
|
||||
<translation>点击"%1 "按钮,开始</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Close</source>
|
||||
<translation>关闭</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add group</source>
|
||||
<translation>添加组别</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open existing project...</source>
|
||||
<translation>打开现有的项目...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Create new project</source>
|
||||
<translation>创建新项目</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Apply</source>
|
||||
<translation>申请</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save</source>
|
||||
<translation>拯救</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonGenerator</name>
|
||||
<message>
|
||||
@ -768,6 +1005,21 @@
|
||||
<translation type="vanished">JSON文件</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JsonGroupDelegate</name>
|
||||
<message>
|
||||
<source>Group %1 - %2</source>
|
||||
<translation>组别 %1 - %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Title</source>
|
||||
<translation>标题</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add dataset</source>
|
||||
<translation>添加数据集</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MQTT</name>
|
||||
<message>
|
||||
@ -1502,6 +1754,14 @@
|
||||
<source>Theme</source>
|
||||
<translation>主题</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Data separator</source>
|
||||
<translation>数据分离器</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>UI refresh rate</source>
|
||||
<translation>UI刷新率</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Setup</name>
|
||||
@ -1679,6 +1939,10 @@
|
||||
<source>Connect</source>
|
||||
<translation>连接</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JSON Editor</source>
|
||||
<translation>JSON编辑器</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Updater</name>
|
||||
|
@ -54,7 +54,7 @@ Export::Export()
|
||||
auto ge = JSON::Generator::getInstance();
|
||||
auto te = Misc::TimerEvents::getInstance();
|
||||
connect(io, &IO::Manager::connectedChanged, this, &Export::closeFile);
|
||||
connect(te, &Misc::TimerEvents::timeout1Hz, this, &Export::writeValues);
|
||||
connect(te, &Misc::TimerEvents::lowFreqTimeout, this, &Export::writeValues);
|
||||
connect(ge, &JSON::Generator::jsonChanged, this, &Export::registerFrame);
|
||||
|
||||
LOG_TRACE() << "Class initialized";
|
||||
|
@ -99,7 +99,7 @@ Console::Console()
|
||||
// Read received data automatically
|
||||
auto dm = Manager::getInstance();
|
||||
auto te = Misc::TimerEvents::getInstance();
|
||||
connect(te, SIGNAL(timeout42Hz()), this, SLOT(displayData()));
|
||||
connect(te, SIGNAL(highFreqTimeout()), this, SLOT(displayData()));
|
||||
connect(dm, &Manager::dataSent, this, &Console::onDataSent);
|
||||
connect(dm, &Manager::dataReceived, this, &Console::onDataReceived);
|
||||
|
||||
|
@ -55,7 +55,7 @@ Serial::Serial()
|
||||
|
||||
// Build serial devices list
|
||||
auto te = Misc::TimerEvents::getInstance();
|
||||
connect(te, SIGNAL(timeout1Hz()), this, SLOT(refreshSerialDevices()));
|
||||
connect(te, SIGNAL(lowFreqTimeout()), this, SLOT(refreshSerialDevices()));
|
||||
|
||||
// Log class init
|
||||
LOG_TRACE() << "Class initialized";
|
||||
|
@ -55,7 +55,7 @@ Client::Client()
|
||||
auto io = IO::Manager::getInstance();
|
||||
auto ge = JSON::Generator::getInstance();
|
||||
auto te = Misc::TimerEvents::getInstance();
|
||||
connect(te, &Misc::TimerEvents::timeout42Hz, this, &Client::sendData);
|
||||
connect(te, &Misc::TimerEvents::highFreqTimeout, this, &Client::sendData);
|
||||
connect(io, &IO::Manager::connectedChanged, this, &Client::resetStatistics);
|
||||
connect(ge, &JSON::Generator::jsonChanged, this, &Client::registerJsonFrame);
|
||||
|
||||
|
@ -159,6 +159,7 @@ void ModuleManager::initializeQmlInterface()
|
||||
auto mqttPublisher = MQTT::Client::getInstance();
|
||||
auto pluginsBridge = Plugins::Bridge::getInstance();
|
||||
auto macExtras = Misc::MacExtras::getInstance();
|
||||
auto timerEvents = Misc::TimerEvents::getInstance();
|
||||
LOG_INFO() << "Finished initializing C++ modules";
|
||||
|
||||
// Retranslate the QML interface automagically
|
||||
@ -186,6 +187,7 @@ void ModuleManager::initializeQmlInterface()
|
||||
c->setContextProperty("Cpp_MQTT_Client", mqttPublisher);
|
||||
c->setContextProperty("Cpp_Plugins_Bridge", pluginsBridge);
|
||||
c->setContextProperty("Cpp_Misc_MacExtras", macExtras);
|
||||
c->setContextProperty("Cpp_Misc_TimerEvents", timerEvents);
|
||||
|
||||
// Register app info with QML
|
||||
c->setContextProperty("Cpp_AppName", qApp->applicationName());
|
||||
@ -198,7 +200,7 @@ void ModuleManager::initializeQmlInterface()
|
||||
engine()->load(QUrl(QStringLiteral("qrc:/qml/main.qml")));
|
||||
|
||||
// Start common event timers
|
||||
Misc::TimerEvents::getInstance()->startTimers();
|
||||
timerEvents->startTimers();
|
||||
|
||||
// Log QML engine status
|
||||
LOG_INFO() << "Finished loading QML interface";
|
||||
|
@ -27,29 +27,38 @@
|
||||
#include <ConsoleAppender.h>
|
||||
|
||||
using namespace Misc;
|
||||
#define HZ_TO_MS(x) qCeil(1000 / x)
|
||||
|
||||
/**
|
||||
/**º
|
||||
* Pointer to the only instance of the class
|
||||
*/
|
||||
static TimerEvents *INSTANCE = nullptr;
|
||||
|
||||
/**
|
||||
* Converts the given @a hz to milliseconds
|
||||
*/
|
||||
static int HZ_TO_MS(const int hz)
|
||||
{
|
||||
const double rHz = hz;
|
||||
const double uHz = 1000;
|
||||
return qRound(uHz / rHz);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor function
|
||||
*/
|
||||
TimerEvents::TimerEvents()
|
||||
{
|
||||
// Configure timeout intevals
|
||||
m_timer1Hz.setInterval(HZ_TO_MS(1));
|
||||
m_timer42Hz.setInterval(HZ_TO_MS(42));
|
||||
m_timerLowFreq.setInterval(HZ_TO_MS(1));
|
||||
m_timerHighFreq.setInterval(HZ_TO_MS(21));
|
||||
|
||||
// Configure timer precision
|
||||
m_timer1Hz.setTimerType(Qt::PreciseTimer);
|
||||
m_timer42Hz.setTimerType(Qt::PreciseTimer);
|
||||
m_timerLowFreq.setTimerType(Qt::PreciseTimer);
|
||||
m_timerHighFreq.setTimerType(Qt::PreciseTimer);
|
||||
|
||||
// Configure signals/slots
|
||||
connect(&m_timer1Hz, &QTimer::timeout, this, &TimerEvents::timeout1Hz);
|
||||
connect(&m_timer42Hz, &QTimer::timeout, this, &TimerEvents::timeout42Hz);
|
||||
connect(&m_timerLowFreq, &QTimer::timeout, this, &TimerEvents::lowFreqTimeout);
|
||||
connect(&m_timerHighFreq, &QTimer::timeout, this, &TimerEvents::highFreqTimeout);
|
||||
LOG_TRACE() << "Class initialized";
|
||||
}
|
||||
|
||||
@ -64,13 +73,21 @@ TimerEvents *TimerEvents::getInstance()
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the target UI refresh frequency
|
||||
*/
|
||||
int TimerEvents::highFreqTimeoutHz() const
|
||||
{
|
||||
return HZ_TO_MS(m_timerHighFreq.interval());
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops all the timers of this module
|
||||
*/
|
||||
void TimerEvents::stopTimers()
|
||||
{
|
||||
m_timer1Hz.stop();
|
||||
m_timer42Hz.stop();
|
||||
m_timerLowFreq.stop();
|
||||
m_timerHighFreq.stop();
|
||||
|
||||
LOG_INFO() << "Timers stopped";
|
||||
}
|
||||
@ -80,8 +97,26 @@ void TimerEvents::stopTimers()
|
||||
*/
|
||||
void TimerEvents::startTimers()
|
||||
{
|
||||
m_timer1Hz.start();
|
||||
m_timer42Hz.start();
|
||||
m_timerLowFreq.start();
|
||||
m_timerHighFreq.start();
|
||||
|
||||
LOG_TRACE() << "Timers started";
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the target UI refresh frequency
|
||||
*/
|
||||
void TimerEvents::setHighFreqTimeout(const int hz)
|
||||
{
|
||||
if (hz > 0)
|
||||
{
|
||||
m_timerHighFreq.setInterval(HZ_TO_MS(hz));
|
||||
emit highFreqTimeoutChanged();
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
m_timerHighFreq.setInterval(HZ_TO_MS(1));
|
||||
emit highFreqTimeoutChanged();
|
||||
}
|
||||
}
|
||||
|
@ -30,25 +30,34 @@ namespace Misc
|
||||
{
|
||||
class TimerEvents : public QObject
|
||||
{
|
||||
// clang-format off
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(int highFreqTimeoutHz
|
||||
READ highFreqTimeoutHz
|
||||
WRITE setHighFreqTimeout
|
||||
NOTIFY highFreqTimeoutChanged)
|
||||
// clang-format on
|
||||
|
||||
signals:
|
||||
void timeout1Hz();
|
||||
void timeout42Hz();
|
||||
void lowFreqTimeout();
|
||||
void highFreqTimeout();
|
||||
void highFreqTimeoutChanged();
|
||||
|
||||
public:
|
||||
static TimerEvents *getInstance();
|
||||
int highFreqTimeoutHz() const;
|
||||
|
||||
public slots:
|
||||
void stopTimers();
|
||||
void startTimers();
|
||||
void setHighFreqTimeout(const int hz);
|
||||
|
||||
private:
|
||||
TimerEvents();
|
||||
|
||||
private:
|
||||
QTimer m_timer1Hz;
|
||||
QTimer m_timer42Hz;
|
||||
QTimer m_timerLowFreq;
|
||||
QTimer m_timerHighFreq;
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -83,6 +83,9 @@ int Translator::systemLanguage() const
|
||||
case QLocale::German:
|
||||
lang = 3;
|
||||
break;
|
||||
case QLocale::Russian:
|
||||
lang = 4;
|
||||
break;
|
||||
default:
|
||||
lang = 0;
|
||||
break;
|
||||
@ -111,6 +114,9 @@ QString Translator::welcomeConsoleText() const
|
||||
case 3:
|
||||
lang = "DE";
|
||||
break;
|
||||
case 4:
|
||||
lang = "RU";
|
||||
break;
|
||||
default:
|
||||
lang = "EN";
|
||||
break;
|
||||
@ -148,7 +154,7 @@ QString Translator::acknowledgementsText() const
|
||||
*/
|
||||
QStringList Translator::availableLanguages() const
|
||||
{
|
||||
return QStringList { "English", "Español", "简体中文", "Deutsch" };
|
||||
return QStringList { "English", "Español", "简体中文", "Deutsch", "Русский" };
|
||||
}
|
||||
|
||||
/**
|
||||
@ -180,6 +186,10 @@ void Translator::setLanguage(const int language)
|
||||
langName = "de";
|
||||
locale = QLocale(QLocale::German);
|
||||
break;
|
||||
case 4:
|
||||
langName = "ru";
|
||||
locale = QLocale(QLocale::Russian);
|
||||
break;
|
||||
default:
|
||||
langName = "en";
|
||||
locale = QLocale(QLocale::English);
|
||||
|
@ -50,7 +50,7 @@ Bridge::Bridge()
|
||||
auto ge = JSON::Generator::getInstance();
|
||||
auto te = Misc::TimerEvents::getInstance();
|
||||
connect(ge, &JSON::Generator::jsonChanged, this, &Bridge::registerFrame);
|
||||
connect(te, &Misc::TimerEvents::timeout42Hz, this, &Bridge::sendProcessedData);
|
||||
connect(te, &Misc::TimerEvents::highFreqTimeout, this, &Bridge::sendProcessedData);
|
||||
|
||||
// Send I/O "raw" data directly
|
||||
auto io = IO::Manager::getInstance();
|
||||
|
@ -48,7 +48,7 @@ DataProvider::DataProvider()
|
||||
auto ge = JSON::Generator::getInstance();
|
||||
auto te = Misc::TimerEvents::getInstance();
|
||||
connect(cp, SIGNAL(openChanged()), this, SLOT(resetData()));
|
||||
connect(te, SIGNAL(timeout42Hz()), this, SLOT(updateData()));
|
||||
connect(te, SIGNAL(highFreqTimeout()), this, SLOT(updateData()));
|
||||
connect(io, SIGNAL(connectedChanged()), this, SLOT(resetData()));
|
||||
connect(ge, SIGNAL(jsonFileMapChanged()), this, SLOT(resetData()));
|
||||
connect(ge, &JSON::Generator::jsonChanged, this, &DataProvider::selectLatestJSON);
|
||||
@ -115,10 +115,6 @@ JSON::Group *DataProvider::getGroup(const int index)
|
||||
*/
|
||||
void DataProvider::resetData()
|
||||
{
|
||||
// Stop if dev a device is connected or if CSV file is open
|
||||
if (IO::Manager::getInstance()->connected() || CSV::Player::getInstance()->isOpen())
|
||||
return;
|
||||
|
||||
// Make latest frame invalid
|
||||
m_latestJsonFrame = JFI_Empty();
|
||||
m_latestFrame.read(m_latestJsonFrame.jsonDocument.object());
|
||||
|
@ -71,8 +71,9 @@ GraphProvider::GraphProvider()
|
||||
auto ge = JSON::Generator::getInstance();
|
||||
auto te = Misc::TimerEvents::getInstance();
|
||||
connect(cp, SIGNAL(openChanged()), this, SLOT(resetData()));
|
||||
connect(te, SIGNAL(timeout42Hz()), this, SLOT(drawGraphs()));
|
||||
connect(te, SIGNAL(highFreqTimeout()), this, SLOT(drawGraphs()));
|
||||
connect(io, SIGNAL(connectedChanged()), this, SLOT(resetData()));
|
||||
connect(ge, SIGNAL(jsonFileMapChanged()), this, SLOT(resetData()));
|
||||
connect(ge, &JSON::Generator::jsonChanged, this, &GraphProvider::registerFrame);
|
||||
|
||||
// Avoid issues when CSV player goes backwards
|
||||
|
Loading…
x
Reference in New Issue
Block a user