Language de - subtilitas/rcbench GitHub Wiki
Sprache der Oberfläche
Das Panel zeigt seine Oberfläche auf Englisch oder auf Deutsch. SETUP, ANWENDUNG, Sprache wählt sie (ENGLISH, DEUTSCH). Die Wahl gilt zusammen mit dem Design, das nächste Bild erscheint in der neuen Sprache; nichts startet neu. Sie liegt wie jede Einstellung im NVS (Non-Volatile Storage), sobald SPEICHERN sie übernimmt.

Was der Sprache folgt und was nicht
| Folgt der Sprache | Bleibt, wie es ist |
|---|---|
| Beschriftungen, Namen und Hilfetexte der Einstellungen, Alarme im Band, Warnfelder, Ablehnungshinweise, die Details des Splash | die Begriffe unter Begriffe, die Englisch bleiben |
| der TXT-Bericht (reiner Text) des Servotests, in der Sprache beim Start des Laufs | die CSV-Datei (Comma-Separated Values) des Servotests: Kopfzeile und die Wörter in ihren Zeilen (test, phase, mode), damit Werkzeuge jeden Lauf gleich lesen |
die Hinweise und Ablehnungen der Stick-Programmierung, und die Handgriffe eines ESC-Profils, wo das Profil sie auf Deutsch nennt (action_de) |
Namen, Punkte und Werte der Profile des ESC (Electronic Speed Controller), die aus den Anleitungen stammen |
| die Parameternamen des Programmers und ihre Werte, die der Firmware gehören, wie ihre Konfiguratoren sie zeigen | |
| das Konsolen-Log |
Aktuelle Einschränkungen:
- Ein Alarm, der schon im Band steht, bleibt in der Sprache, in der er
entstand, bis er ersetzt, weggetippt oder nach 30 s (
UI_ALERT_SHOW_S) gelöscht wird. Der gehaltene Alarm für einen Touch-Controller, der beim Start nicht antwortete, entsteht in der Sprache aus dem NVS und bleibt bis zum Neustart; ohne Touch lässt sich die Sprache bis dahin nicht ändern. - Die Meldezeile von LOG VIEWER (eine Datei, die sich nicht öffnen oder löschen ließ, eine gelöschte Datei) bleibt in ihrer Sprache, bis die nächste geöffnete oder gelöschte Datei sie ersetzt oder leert.
- Der Titel eines schon offenen Tastenfelds oder einer Auswahlliste bleibt in seiner Sprache, bis es sich schließt.
- Die Stick-Engine meldet eine Ablehnung auf Englisch, und die Seite findet
die Übersetzung über dieses Englisch. Eine Ablehnung, die die Tabelle nicht
kennt, erscheint auf Englisch.
test_textprüft, dass jede Ablehnung der einkompilierten Profile einen deutschen Eintrag hat.
Zahlen
Die Seiten, der TXT-Bericht und die CSV schreiben in jeder Sprache den
Dezimalpunkt: 7.4 V, 0.05 A. Es ist das Trennzeichen des Senders, der
ESC-Konfiguratoren und der eigenen Anzeige des Netzteils, und eine CSV mit
Dezimalkomma bräuchte ein anderes Feldtrennzeichen. Die deutschen Seiten
dieser Dokumentation schreiben im Fließtext das deutsche Dezimalkomma
(7,4 V); ein Text, der vom Bildschirm zitiert wird, behält seinen Punkt
(seit 1.5 s kein Messwert).
Begriffe, die Englisch bleiben
Das sind die Wörter, die ein Bediener am Sender, in einem ESC-Konfigurator, in einer Anleitung oder einem Datenblatt findet, und die Sicherheitsbedienelemente, die in jeder Sprache gleich lauten. Ein übersetztes ARM würde nicht zum Wort in der Anleitung neben dem Prüfstand passen.
- Die Sicherheits- und Antriebsbedienung und INSTALL, das Halten des Panel-Updates: ARM, DISARM, STOP, SWEEP, PAUSE, TRIM, REVERSE. CENTRE bleibt als Pulsname Englisch (PULS CENTRE); die Taste auf SERVO, die das Servo dorthin fährt, heißt ZENTRIEREN. HOLD bleibt als Phasenname des Servotests Englisch. PAUSED, der Sweep-Knopf eines angehaltenen Sweeps, ist ein Zustand und nicht die Bedienung und heißt PAUSIERT; PAUSE, die Bedienung, bleibt Englisch.
- Die Seitentitel: MOTOR & ESC, SERVO, SUPPLY, ANALYSER, LOGS, SETUP, SETTINGS, BATTERY, BALANCE, PROGRAMMER, OUTPUTS, PICK A PIN, LOG VIEWER, CAN BUS FAULT, LINK LOST, FILES & UPDATE, PANEL UPDATE. Ein Hinweis, der eine Seite nennt, nennt sie beim Titel: "der Seite SUPPLY".
- Protokoll- und Modusnamen: DShot, PWM (Pulse-Width Modulation), PPM (Pulse-Position Modulation), OneShot, S.BUS, CAN (Controller Area Network), BLHeli_S, AM32, ESCape32, VESC, KISS, PD mini, AUTO, CV (Constant Voltage), CC (Constant Current), STANDARD PWM, HELI CYCLIC, ESC STICK, BUS OFF, und BENCH und SIM im Statusband.
- Die Zustandswörter des Prüfstands, kurz genug für ihren Platz: SAFE und ARMED im Statusband, und SILENT im Urteil des ANALYSER. ARM und DISARM sind die Tasten, SAFE und ARMED die Zustände.
- Die Begriffe des Fachs: Frame Rate, Throttle, Failsafe, Brown-out, Timing, Endpoint, Link, Live, Online, Touch, Display, Pin, Slot, Slice, Pad, Resync, Bad tail, tx err, rx err, bus err, Frame, Access Point (ACCESS POINT auf FILES & UPDATE), Upload, Build.
- Einheiten, die Stickpositionen MIN, MID und MAX und die Tastenbeschriftungen DEL, CLR und OK.
- Die Namen, die das Werkzeug des Herstellers den Einstellungen eines KST- oder Chaservo-Servos gibt, als Zeilen des Servo-Programmierers: DEAD BAND, MAX. DUTY, BOOST, STRETCH, SOFT START, NEUTRAL, PULSE LOWER, PULSE UPPER, LEFT ANGLE, RIGHT ANGLE, REVERSION und die Zeilen seines Tabs SPERRE; dazu PORT, BACKUP und Pairing.
Glossar
Ein deutsches Wort je englischem Begriff, auf jeder Seite und im Bericht.
| Englisch | Deutsch |
|---|---|
| bench | Prüfstand |
| supply | Netzteil |
| output | Ausgang |
| set point | Sollwert |
| commanded pulse (SERVO, COMMANDED) | PULSBREITE, wie PULS MIN, PULS CENTRE und PULS MAX; die Zeile SET des Netzteils heißt SOLL |
| input (of a supply), wiring | Eingang, Verdrahtung |
| current limit | Strombegrenzung |
| cap | Obergrenze |
| trip (die eigene Abschaltung des Netzteils), current trip, voltage trip | Abschaltung (ABSCH. auf der Karte MODUS), Überstrom, Überspannung |
| card | Karte |
| run | Lauf |
| step (des Netzteils) | Stufe |
| report | Bericht |
| reading | Messwert |
| setting (ein Eintrag in SETUP) | Einstellung |
| SETTINGS (das eigene Overlay einer Seite) | OPTIONEN |
| save, reset, apply, close | speichern, zurücksetzen, übernehmen, schließen |
| cancel, abort | abbrechen |
| hold to … | … halten |
| refused | abgelehnt |
| screen (eine Seite der Oberfläche) | Seite |
| screen (das Display) | Bildschirm |
| coprocessor | Koprozessor |
| emergency stop | Not-Aus |
| board | Platine |
| pack, cell, spread | Akku, Zelle, Streuung |
| peak | Spitze (max auf einer Karte) |
| idle current, holding current | Ruhestrom, Haltestrom |
| travel, travel time | Weg, Stellzeit |
| stall | blockieren |
| movement, dwell, settle | Bewegung, Verweilen, Einschwingen |
| paused (the sweep button) | PAUSIERT |
| speed (des Servotests), range | Tempo, Bereich |
| device under test | Prüfling |
| pass, fail, aborted (ein Urteil) | bestanden, nicht bestanden, abgebrochen |
| FAULT (ein Zustand) | FEHLER |
| ON, OFF | EIN, AUS |
| beep | Piepton |
| item, value (eines ESC-Menüs) | Punkt, Wert |
| entry (in ein ESC-Menü), power-up | Einstieg, Einschalten |
| manual step (am ESC), MANUAL INTERVENTION REQUIRED, das Schild MANUAL | Handgriff, MANUELLER EINGRIFF NÖTIG, HAND |
| DONE (ein Handgriff bestätigt) | ERLEDIGT |
| threshold | Schwelle |
| defaults | Vorgaben |
| channel | Kanal |
| probe (des CAN-Selbsttests) | Testframe |
| terminator, branch (eines Busses) | Abschluss, Stichleitung |
| separator, row, column | Trenner, Zeile, Spalte |
| Wi-Fi | WLAN |
| home network, network name, hidden network | Heimnetz, Netzname, verstecktes Netz |
| access code | Zugangscode |
| upload, download | hochladen, herunterladen |
| image (a firmware file), install | Image, installieren |
| plot, table | Grafik, Tabelle |
| simulated, modelled (vom Panel berechnet) | simuliert |
| model (ein Flugmodell, ein ESC-Produkt) | Modell |
| protocol page (des Links) | Page |
| floor (des Stroms, Stick-Programmierung) | Grund |
| horn (eines Servos) | Ruderhorn |
| start (einen Lauf) | starten, START auf einem Knopf |
| surface (die Rolle eines Ausgangs) | Ruder |
| connect, disconnect, read, write | verbinden, trennen, lesen, schreiben |
| restore (ein Backup auf ein Servo) | zurückspielen |
| enable (das Schreiben auf ein Servo) | freigeben |
| record (eines unterbrochenen Schreibens) | Vermerk |
| store (ein Backup), stored | speichern, gespeichert |
| verify (ein Servo gegen das Gelesene) | prüfen |
| locked (ein Wert, der gezeigt und nicht geschrieben wird) | gesperrt |
| speed, speed limit (eines programmierten Servos) | Tempo, Tempolimit |
Der Ton ist der eines Messgeräts: ein Substantiv, wo eine Beschriftung reicht, der Imperativ, wo eine Anweisung nötig ist, kein "Sie". Eine Beschriftung in Großbuchstaben schreibt ß als SS (SCHLIESSEN, GRÖSSE); Text in gemischter Schreibung schreibt ß. Das große ẞ (U+1E9E) ist nicht in den Fonts.
Die Kodierung
Jeder Text ist UTF-8 (Unicode Transformation Format, 8 Bit), vom C-Quelltext
bis zum TXT-Bericht auf der Karte. gfx dekodiert ihn, und ein Codepoint ist
eine Zelle:
- Die beiden Text-Fonts enthalten druckbares ASCII (American Standard Code for Information Interchange, 0x20 bis 0x7E) und die sieben deutschen Buchstaben Ä Ö Ü ß ä ö ü (U+00C4, U+00D6, U+00DC, U+00DF, U+00E4, U+00F6, U+00FC), je 102 Glyphen. Der Ziffern-Font enthält nur Ziffern und Satzzeichen.
- Ein Codepoint, den ein Font nicht enthält, erscheint als
?. Ein Byte, das keine gültige Folge beginnt, eine abgeschnittene Folge und eine überlange Form sind je ein?, und der Dekoder liest nie über das Endezeichen hinaus. - Eine Breite ist Zellen mal Zellbreite:
gfx_text_width()undgfx_text_cells()zählen Codepoints, undgfx_text_prefix()liefert die Bytelänge der ersten n Zellen, damit ein Schnitt zwischen zwei Zeichen fällt. - Ein Puffer misst Bytes, und ein deutscher Buchstabe belegt zwei. Das
Alarmband fasst
UI_ALERT_MAX, 128 Bytes mit Endezeichen.
UTF-8 statt einer Ein-Byte-Codepage: Die Tabellen bleiben im Quelltext
lesbar, und der Bericht öffnet sich in jedem Editor am PC richtig. Der Preis
ist, dass keine Breite aus strlen() kommen darf; die Seiten messen mit den
Funktionen oben.
Die Tabellen
| Datei | Enthält |
|---|---|
shared/ui/include/ui_text.def |
jeden übersetzten Text: seine ID (Identifier), die Zellen seines Feldes, wo kein Screenshot ihn zeigt, und sein Englisch |
shared/ui/ui_text_de.c |
das Deutsche nach ID; Beschriftungen, Hilfetexte, Optionen und Kategorien der Einstellungen; die Wörter des Servotests und den Bericht |
shared/ui/ui_text.c |
die Suche: TR(ID), ui_setting_label(), ui_servo_str() und die übrigen |
Ein Eintrag, den eine Sprache auf NULL lässt, zeigt das Englische; eine
unvollständige Tabelle funktioniert also. Ein übersetztes Format wandelt
dieselben Argumente in derselben Reihenfolge wie sein Englisch.
Die Passprüfungen
python3 tools/render_ui.py --fit
baut den Renderer mit GFX_TEXT_TRACE, zeichnet alle 226 Ansichten auf
Englisch und auf Deutsch und schlägt fehl, wenn ein Text in einer der beiden
Sprachen
- breiter ist als die Box, die
gfx_text_in()bekam, - am Rand des Bereichs abgeschnitten wird, in dem er steht,
- über die gefüllte Form hinausläuft, auf der er steht,
- einen anderen Text des Bildes überlappt, oder
- von einer später gezeichneten Fläche übermalt und nicht neu
gezeichnet wird. Nur die Zeichen zählen: eine Fläche über den Leerzeichen,
mit denen eine Beschriftung aufgefüllt ist, ist kein Befund. OUTPUTS mit
offener Protokollliste (
outputs-protocol) ist ausgenommen, weil die Liste die Pins daneben absichtlich verdeckt.
Ein englischer Überlauf, der für eine Zeit hingenommen wird, kommt in
KNOWN_OVERFLOWS im Werkzeug, mit seiner Ansicht, seinem Text und seinem
Messwert; die Liste ist leer. Ein gelisteter wird als known ausgegeben und
schlägt nicht fehl; ein deutscher Befund, der einem
davon Wort für Wort gleicht, ist derselbe Text an derselben Stelle und
schlägt ebenfalls nicht fehl. Ein Eintrag, den die Prüfung nicht mehr findet,
schlägt fehl, bis er aus der Liste genommen ist. Die Prüfung schlägt auch bei
einem Text ohne angegebene Breite fehl, den keine Ansicht zeichnet.
python3 tools/check_formats.py
kompiliert shared/ mit jedem Aufruf von TR() und jedem Wort des Berichts
durch sein englisches Literal ersetzt, unter -Wformat=2 -Wformat-nonliteral -Wformat-signedness, und schlägt bei jeder Warnung
fehl: jedes englische Format passt zu den Argumenten seines Aufrufs. Die
main.c des Panels liegt nicht in shared/ und ist nicht abgedeckt.
test_text deckt den Rest ab: jede ID hat Deutsch, jedes deutsche Format
wandelt, was sein Englisch wandelt, jeder Text mit angegebener Breite passt
in jeder Sprache hinein, Alarme und Splash-Details passen in ihre Puffer,
übersetzte Einstellungen passen in SETUP und die TIMING-Seite, und Spalten
und Beschriftungen des Berichts stehen bündig.
tools/check_docs.py schlägt fehl, wenn eine deutsche Wiki-Seite in
Backticks das Englische eines Textes zitiert, den der Bildschirm deutsch
zeigt: einen Text der Oberfläche, die Ausgabe eines Formats, mit Zahlen oder Text
an der Stelle seiner Umwandlungen, Name, Hilfetext, Option oder Kategorie einer Einstellung oder
ein Wort des Servotests, auch ein Zitat, das über zwei Zeilen umbricht.
Fließtext ohne Backticks wird nicht geprüft: Er nennt auch
Protokoll-Pages, Befehle an das Netzteil und Beschriftungen der Platine, die
ein Wort mit einer Beschriftung der Oberfläche teilen.
Eine Sprache hinzufügen
UI_LANG_xxinui_lang_tinshared/ui/include/ui_text.heintragen, und den eigenen Namen der Sprache an derselben Stelle ink_languageinshared/settings/settings.c.shared/ui/ui_text_de.cnachui_text_xx.ckopieren, übersetzen undui_lang_xxink_langsinshared/ui/ui_text.cund seine Deklaration inui_text.heintragen.- Die Datei in
shared/ui/CMakeLists.txtund inSOURCESintools/render_ui.pyundtools/frame_cost.pyeintragen. - Ein Buchstabe, den die Fonts nicht enthalten, kommt in die Liste in
FONTSintools/gen_font.py, undpython3 tools/gen_font.pyerzeugt sie neu. - Die Sprache in
LANGSintools/render_ui.pyund im Argument vontest/host/render_screen.ceintragen, dannpython3 tools/render_ui.py --fitundpython3 tools/render_ui.pyausführen. german_has_every_stringintest/host/test_text.cauf die neue Tabelle erweitern, ihr Glossar hier schreiben und diese Seite übersetzen.