mirror of
https://github.com/praktimarc/kst4contest.git
synced 2026-10-19 05:42:58 +02:00
Document the two languages, and how to contribute a third
Both manuals get the language picker in full: where it sits, that it applies per profile and takes effect at once in every open window, and -- at more length -- what is deliberately left alone and why. An operator who sees an English beacon text in a German client should be able to read that it is meant that way. The contribution route is written down in both, because plain text files are only useful if somebody knows they are there: copy, translate, submit; a partial file is welcome; the build reports mistakes by file name and writes a worksheet of what is still missing. PROJECT_CONTEXT records the decisions that outlive this stage -- the four kinds of text and the rule that the addressee decides, that core produces no display text, that incompleteness is allowed and incorrectness is not, that anything built outside a composition needs its text read inside one, and that a column id is never translated. CLAUDE.md said two modules; there are three, and the third never ships. It also states the German orthography now, which this session got wrong across a spec and two plans: ss after a short vowel, so muss and dass.
This commit is contained in:
7 files changed
+2796
-4
No files matched your search
@@ -1106,3 +1106,60 @@ Die Prüfung verwendet immer den **primären Bildschirm**. Sie stellt nicht die
|
||||
Die automatische Größenbegrenzung gilt derzeit außerdem nur für das Hauptfenster. Das Einstellungsfenster, das separate Cluster- und QSO-Monitorfenster sowie weitere Zusatzfenster verwenden weiterhin ihre jeweils gespeicherten Größen, ohne dieselbe zusätzliche Prüfung gegen den primären Bildschirm.
|
||||
|
||||
Im Klartext: Die Schutzfunktion verhindert vor allem, dass das zentrale Hauptfenster nach einem Wechsel auf einen kleineren Bildschirm unbenutzbar startet. Sie ist keine vollständige Verwaltung aller Fensterpositionen in einem wechselnden Mehrmonitor-Setup.
|
||||
|
||||
---
|
||||
|
||||
## Sprache der Oberfläche (ab v1.50)
|
||||
|
||||
Die Oberfläche spricht Deutsch oder Englisch. Die Wahl sitzt im Einstellungsfenster im Reiter
|
||||
**GUI**, im letzten Abschnitt **Language**, und gilt **pro Operatorprofil** — an einer
|
||||
Mehrmann-Station können zwei Operateure zwei Sprachen haben.
|
||||
|
||||
Drei Werte stehen zur Wahl:
|
||||
|
||||
| Wert | Bedeutung |
|
||||
|---|---|
|
||||
| **Systemsprache** | die Sprache des Betriebssystems; ist das keine, für die Texte vorliegen, dann Englisch |
|
||||
| **DE** | Deutsch |
|
||||
| **EN** | Englisch |
|
||||
|
||||
**Ein Wechsel wirkt sofort in allen offenen Fenstern** — Hauptfenster, Einstellungen, Karte und
|
||||
Monitor zugleich, ohne Neustart und ohne ein Fenster zu schließen. Dauerhaft wird die Wahl wie
|
||||
jede andere Einstellung mit **Einstellungen speichern**.
|
||||
|
||||
### Was nicht übersetzt wird, und warum
|
||||
|
||||
Drei Sorten Text bleiben unverändert, in jeder Sprache:
|
||||
|
||||
- **Alles, was an den ON4KST-Server geht.** Protokollbefehle und Chat-Befehle wie `/CQ` oder
|
||||
`/AWAY` würden übersetzt die Verbindung brechen oder vom Server nicht verstanden.
|
||||
- **Alles, was an andere Funker geht.** Deine Bakentexte, Antworttexte, Textbausteine und
|
||||
Kurztasten bleiben so, wie du sie eingetragen hast. Sie stehen in der gespeicherten
|
||||
Konfiguration deines Profils; sie zu übersetzen würde bestehende Profile verändern.
|
||||
- **Funkerkürzel in der Oberfläche.** QRA, QRG, QTF, QRB, Tropo, LOC, wkd, NOT QRV, LOS,
|
||||
Fresnel, Sked — die sind international und lesen sich in beiden Sprachen gleich.
|
||||
|
||||
Drei Tests wachen darüber, und zwar an der Ausgabe statt an der Textdatei: die Protokollrahmen
|
||||
werden unter drei Locales gebaut und verglichen, sämtliche Vorgabewerte der Konfiguration
|
||||
werden über Reflexion verglichen, und kein Wert in einer Übersetzungsdatei darf ein
|
||||
Protokollbefehl sein.
|
||||
|
||||
### Eine Sprache beitragen
|
||||
|
||||
Die Texte liegen als gewöhnliche Textdateien unter `app-desktop/src/main/i18n/`, eine je
|
||||
Sprache. Wer eine weitere beitragen will, kopiert `strings_en.properties` nach
|
||||
`strings_<code>.properties` und übersetzt die Werte rechts vom Gleichheitszeichen. Kein Kotlin,
|
||||
kein Gradle.
|
||||
|
||||
**Eine unvollständige Übersetzung ist willkommen** — ein nicht übersetzter Schlüssel erscheint
|
||||
englisch statt zu fehlen. Eine *fehlerhafte* bricht dagegen den Bau ab: ein Schlüssel, den die
|
||||
englische Grundlage nicht kennt, oder ein Platzhalter wie `{0}`, der in der Übersetzung fehlt
|
||||
und damit stillschweigend Daten verschluckt.
|
||||
|
||||
`./gradlew :app-desktop:classes` baut und meldet jeden Fehler mit dem Dateinamen. Was noch
|
||||
fehlt, schreibt der Bau als Arbeitsblatt nach
|
||||
`app-desktop/build/generated/i18n/todo/strings_<code>.todo.properties` — die fehlenden
|
||||
Schlüssel mit dem englischen Text als Wert, zum Ausfüllen.
|
||||
|
||||
Deutsch wird durch einen Test auf Vollständigkeit gehalten, weil es ausgeliefert wird. Eine
|
||||
beigetragene Sprache nicht.
|
||||
@@ -1085,3 +1085,57 @@ The check always uses the **primary screen**. It does not restore the previous p
|
||||
The automatic size restriction currently applies to the main window only. The settings window, the separate cluster and QSO monitor window and other auxiliary windows continue to use their stored sizes without the same additional check against the primary screen.
|
||||
|
||||
In plain terms: the protection mainly prevents the central main window from becoming unusable after moving to a smaller display. It is not a complete window-position manager for a changing multi-monitor setup.
|
||||
|
||||
---
|
||||
|
||||
## Interface Language (from v1.50)
|
||||
|
||||
The interface speaks English or German. The choice sits in the settings window on the **GUI**
|
||||
tab, in the last section **Language**, and applies **per operator profile** — at a multi
|
||||
operator station two operators can have two languages.
|
||||
|
||||
Three values are offered:
|
||||
|
||||
| Value | Meaning |
|
||||
|---|---|
|
||||
| **System language** | the operating system's language; English when no texts exist for it |
|
||||
| **DE** | German |
|
||||
| **EN** | English |
|
||||
|
||||
**A change applies at once in every open window** — main window, settings, map and monitor
|
||||
together, with no restart and without closing anything. The choice is kept permanently the
|
||||
same way as every other setting, with **Save settings**.
|
||||
|
||||
### What is not translated, and why
|
||||
|
||||
Three kinds of text stay as they are, in every language:
|
||||
|
||||
- **Anything that goes to the ON4KST server.** Protocol frames and chat commands such as
|
||||
`/CQ` or `/AWAY` would break the connection or not be understood if they were translated.
|
||||
- **Anything that goes to other radio amateurs.** Your beacon texts, auto answers, snippets
|
||||
and shortcuts stay exactly as you entered them. They live in your profile's stored
|
||||
configuration; translating them would alter existing profiles.
|
||||
- **Amateur radio shorthand in the interface.** QRA, QRG, QTF, QRB, Tropo, LOC, wkd, NOT QRV,
|
||||
LOS, Fresnel, Sked — these are international and read the same either way.
|
||||
|
||||
Three tests guard this, and they check the output rather than the text files: the protocol
|
||||
frames are built under three locales and compared, every configuration default is compared by
|
||||
reflection, and no value in a translation file may be a protocol command.
|
||||
|
||||
### Contributing a language
|
||||
|
||||
The texts are ordinary text files under `app-desktop/src/main/i18n/`, one per language. To
|
||||
contribute another, copy `strings_en.properties` to `strings_<code>.properties` and translate
|
||||
the values to the right of the equals sign. No Kotlin, no Gradle.
|
||||
|
||||
**A partial translation is welcome** — an untranslated key appears in English rather than
|
||||
going missing. An *incorrect* one fails the build instead: a key the English base does not
|
||||
know, or a placeholder such as `{0}` missing from the translation, which would silently drop
|
||||
whatever it was carrying.
|
||||
|
||||
`./gradlew :app-desktop:classes` builds and reports every mistake by file name. What is still
|
||||
missing is written as a worksheet to
|
||||
`app-desktop/build/generated/i18n/todo/strings_<code>.todo.properties` — the missing keys with
|
||||
the English text as the value, ready to fill in.
|
||||
|
||||
German is held complete by a test because it is shipped. A contributed language is not.
|
||||
Reference in new issue
Block a user