Speak the operator's language

The interface is German or English, chosen per operator profile on the GUI tab, in force at
once in every open window, and remembered across restarts. 376 texts in both languages.

The texts are ordinary .properties files that nobody has to compile: a contributor copies the
English one, translates the values, and opens a pull request. A third module -- build tooling
that never ships -- turns them into Kotlin before anything compiles, which is what makes a
mistyped key and a wrong argument count compile errors rather than things an operator
discovers. It lives in the main build rather than buildSrc because buildSrc's tests do not run
on `./gradlew build`, measured, and a generator whose tests never run is the exact failure it
exists to prevent.

Incompleteness is allowed and incorrectness is not. A missing key warns and falls back to
English, so a partial contributed language can be submitted at all; an orphan key, a
placeholder the translation drops, a duplicate key or an unreadable file fail the build with
the generator's own message naming the file. The argument count always comes from the English
base. German is held complete by a test because it ships; a contributed language is not.

What is deliberately not translated is the harder half. Protocol frames and chat commands
would break the connection or go unread; the beacon texts, auto answers, snippets and
shortcuts go to other radio amateurs and sit in every operator's stored profile; the 273
println calls in core are diagnostics, and a German stack trace is worse for whoever reads the
bug report; and QRA, QRG, QTF, LOS, Fresnel and wkd read the same in either language. Three
tests guard the boundary by measuring behaviour rather than text: the protocol frames built
under three locales, every preference default compared by reflection, and no translation value
being a protocol command. The reflective one is the only one that covers what nobody thought
of.

One insight turned up three times. Anything built outside a composition freezes the language it
was built in: the window title, the settings tab strip and every column header are all
constructed once at startup -- the columns from Java -- so each now holds a function read when
it is drawn. That also fixed something older and unrelated to language: the main window's title
was a fixed "KST4Contest (Compose)" for the whole session, where the JavaFX window had carried
the live connection line. It carries it again.

A column's id is never translated. It is what the remembered widths and order are keyed on.
This commit is contained in:
Rsclub2_2 committed 2026-10-05 22:36:01 +02:00
1 parent da8a28d250
commit e44436750b
85 files changed
+3552 -508

No files matched your search

@@ -0,0 +1,377 @@
# German. Held complete by a test, because this is a shipped language.
airscout.applyHint=Serverkennung, Clientkennung und Frequenzmodus wirken sofort. Nach einer Änderung des UDP-Ports neu verbinden.
airscout.automaticFrequency=AirScout-Frequenz je Station automatisch wählen
airscout.automaticHint=Die automatische Wahl nimmt zuerst die aktuelle QRG der Station, dann Hinweise aus Stationsname und Chat-Kategorie. Nur abschalten, um für jede Station einen festen Protokollwert zu erzwingen.
airscout.clientIdentifier=KST4Contest-Clientkennung [KST]:
airscout.enabled=AirScout-UDP-Anbindung aktivieren (AirScout 0.9.9.5 oder neuer)
airscout.forcedBand=Fester AirScout-Bandwert [1440000 = 144 MHz]:
airscout.frequencySection=Abgefragte Frequenz
airscout.serverIdentifier=AirScout-Serverkennung [AS]:
airscout.udpPort=AirScout-UDP-Port [9872] — nach Änderung neu verbinden:
airscout.udpSection=AirScout-UDP-Kommunikation
alert.ok=OK
beacon.enabled=Die Bake in dieser Kategorie senden
beacon.intervalMinutes=Abstand in ganzen Minuten
beacon.intervalSection=Gemeinsamer Abstand
beacon.message=Bakentext
beacon.sectionFor=CQ-Bake für {0}
connection.connect=Verbinden
connection.connectTo=Mit {0} verbinden
connection.disconnect=Trennen
connection.disconnectAndCloseChat=Trennen & Chat schließen
dialog.cancel=Abbrechen
dialog.ok=OK
gui.bandColumnHints=Hinweise in den Bandspalten
gui.language=Sprache
gui.language.system=Systemsprache
gui.startupDesign=Design beim Start
gui.startupFilters=Beim Start aktive Nachrichtenfilter
logSynch.fileChooserTitle=Nur-Lese-Loginterpreter-Datei wählen
logSynch.fileEnabled=Gearbeitete Rufzeichen regelmäßig aus einer Logdatei lesen (ohne Bandangabe)
logSynch.fileLabel=Zu überwachende Logdatei:
logSynch.fileSection=Dateiabfrage für gearbeitete Rufzeichen
logSynch.networkEnabled=QSO-Nachrichten von N1MM+, QARTEST, UCXLog und DXLog.net verarbeiten
logSynch.networkSection=Netzbasierter QSO-Abgleich (N1MM/QARTEST/UCXLog/DXLog)
logSynch.sharedPort=Gemeinsamer UDP-Port für QSO- und TRX-Nachrichten [Vorgabe 12060]:
logSynch.winTestBroadcast=UDP-Broadcast-Adresse für Win-Test (Vorgabe = Broadcast der Internetschnittstelle)
logSynch.winTestEnabled=Win-Test-UDP-Lognachrichten aus dem Netz empfangen
logSynch.winTestHint=Die Broadcast-Adresse wird einmal ermittelt, solange sie noch {0} ist. Eine Portänderung wirkt auf den laufenden Empfänger, sobald das Feld den Fokus verliert.
logSynch.winTestPort=UDP-Port für den Win-Test-Empfänger (Vorgabe ist 9871)
logSynch.winTestSection=Win-Test-Netzwerkempfänger
logSynch.winTestStationName=KST-Stationsname im Win-Test-Netz (Quelle der SKED-Pakete)
menu.about=Über...
menu.contactAuthor=Den Autor per Standard-Mailprogramm anschreiben
menu.disconnect=Trennen
menu.donateOv3t=OV3Ts Flugzeug-Datendienst unterstützen
menu.donatePayPal=Entwicklung von kst4Contest per PayPal unterstützen
menu.exitAndDisconnect=Beenden + trennen
menu.file=Datei
menu.hideMonitor=Cluster- / Fremd-QSOs ausblenden
menu.hideOptions=Optionen ausblenden
menu.homepage=DARC-X08-Homepage besuchen
menu.info=Info
menu.newsgroup=kst4Contest-Newsgroup beitreten
menu.options=Optionen
menu.setQrgAsNameInChat=QRG als Namen im Chat setzen (Hauptkategorie)
menu.showMeAsActive=Mich als AKTIV im Chat zeigen!
menu.showMeAsAway=Mich als ABWESEND vom Chat zeigen!
menu.showMonitor=Cluster- / Fremd-QSOs anzeigen
menu.showOptions=Optionen anzeigen
menu.switchOperatorProfile=Operatorprofil wechseln...
menu.toggleStationMap=Stationskarte ein-/ausblenden
menu.useDarkDesign=Abenddesign verwenden
menu.useDefaultDesign=Tagdesign verwenden
menu.windows=Fenster
messageHandling.autoAnswerEnabled=Privatnachrichten automatisch beantworten
messageHandling.autoAnswerSection=Automatische Antwort auf Privatnachrichten
messageHandling.autoAnswerText=Antworttext
messageHandling.qrgAnswerEnabled=Eine QRG-Anfrage mit der aktuellen Frequenz beantworten
messageHandling.qrgAnswerSection=Automatische Antwort auf eine QRG-Anfrage
notification.addCallsignToList=Ein Rufzeichen zur Überwachungsliste hinzufügen
notification.addMonitored=Überwachtes Rufzeichen hinzufügen
notification.bandUpgradeHint=Auf einen möglichen Bandwechsel hinweisen, wenn ein QSO geloggt wird
notification.bandUpgradePriority=Die Priorität einer Station mit möglichem Bandwechsel anheben
notification.bandUpgradeSection=Hinweise auf Bandwechsel
notification.callsign=Rufzeichen
notification.clusterEnabled=Den DX-Cluster-Server betreiben
notification.clusterPort=TCP-Port
notification.clusterSection=Lokaler DX-Cluster-Server
notification.cwCallsign=Das Rufzeichen bei einer empfangenen Privatnachricht in CW geben
notification.fallbackBand=Ersatzband für ein Spot ohne Bandangabe
notification.monitoringSection=QSO-Überwachung
notification.sendTestSpot=Ein Testspot senden
notification.simpleSounds=Einfache Töne abspielen
notification.soundsSection=Töne
notification.speakCallsign=Das Rufzeichen bei einer empfangenen Privatnachricht ansagen
notification.spotterCallsign=Spotter-Rufzeichen
settings.applyAndClose=Übernehmen/Schließen
settings.save=Einstellungen speichern
shortcuts.addButton=Kurztaste hinzufügen
shortcuts.addSnippet=Neuen Textbaustein hinzufügen
shortcuts.buttonsSection=Kurztastenknöpfe über dem Nachrichtenfeld
shortcuts.snippetsSection=Textbausteine (die ersten 10 über Strg+1 bis Strg+0)
station.bandsSection=Aktive Bänder
station.beamWidth=Öffnungswinkel der Antenne, Grad
station.callsign=Rufzeichen
station.chatSection=Chat-Kategorie
station.defaultsSection=Vorgaben
station.demDirectory=DEM-Stammverzeichnis
station.locator=Locator
station.mainCategory=Hauptkategorie
station.maxQrb=Maximaler QRB
station.nameMain=Name, Hauptkategorie
station.nameSecond=Name, zweite Kategorie
station.ownAntennaGain=Eigener Antennengewinn, dBi
station.ownAntennaHeight=Eigene Antennenhöhe, Meter
station.ownSection=Eigene Station
station.ownTxPower=Eigene Sendeleistung, Watt
station.password=Passwort
station.pathSection=Vorgaben für die Streckenanalyse
station.qtf=QTF
station.rotatorEnabled=Rotorabgleich aktiv
station.rotatorHost=Rotor-Host
station.rotatorPort=Rotor-Port
station.rotatorSection=PSTRotator
station.secondCategory=Zweite Kategorie
station.secondChatEnabled=2. Chat: in einer zweiten Kategorie anmelden
station.serverHost=Servername
station.serverPort=Serverport
station.serverSection=ON4KST-Server
station.targetAntennaGain=Antennengewinn der Gegenstation, dBi
station.targetTxPower=Sendeleistung der Gegenstation, Watt
trxSynch.hint=Eine aktivierte Quelle erzeugt von sich aus keine Frequenz. Die eigene QRG wird erst aktualisiert, wenn tatsächlich gültige RadioInfo- oder Win-Test-STATUS-Daten eintreffen; bis dahin bleibt sie so, wie sie von Hand eingetragen wurde.
trxSynch.hintSection=Was eine aktivierte Quelle bewirkt
trxSynch.ucxEnabled=MYQRG aus RadioInfo-Nachrichten auf dem gemeinsamen Log-Sync-Port aktualisieren
trxSynch.ucxSection=UCXLog-TRX-Infos empfangen
trxSynch.winTestEnabled=Win-Test-STATUS-QRG-Abgleich (aktualisiert die eigene QRG aus der Win-Test-Transceiverfrequenz)
trxSynch.winTestPassFrequency=Durchgangsfrequenz aus Win-Test-STATUS verwenden (statt der eigenen QRG)
trxSynch.winTestSection=Win-Test-TRX-Abgleich
trxSynch.winTestStationFilter=Win-Test-Stationsnamenfilter (z. B. STN1, leer = alle annehmen)
worked.empty=Die Datenbank enthält keine Rufzeichen.
worked.expiryHint=Worked-, NOT-QRV- und Feldangaben verfallen nach drei Tagen von selbst. Ein Zurücksetzen vor jedem Contest ist normalerweise nicht nötig.
worked.lastResetAffected=Das letzte Zurücksetzen betraf {0} Zeilen.
worked.refresh=Datenbank neu einlesen
worked.reset=Worked-, NOT-QRV- und Feldangaben zurücksetzen...
worked.resetConfirm=Daten zurücksetzen
worked.resetDialogBody=Alle Worked-, NOT-QRV- und Feldangaben zurücksetzen?\n\nDas löscht jede contestbezogene Markierung in der internen Datenbank. Vor jedem Contest ist das normalerweise nicht nötig, weil diese Angaben nach drei Tagen verfallen.
worked.resetDialogTitle=Contestdaten zurücksetzen
worked.resetFailed=Die Contestdaten konnten nicht zurückgesetzt werden. Die interne Datenbank ist möglicherweise nicht erreichbar oder inkonsistent. Es wurde kein erfolgreiches Zurücksetzen bestätigt.
worked.section=Datenbank gearbeiteter Stationen
tab.station=Station
tab.logSynch=Log-Abgleich
tab.trxSynch=TRX-Abgleich
tab.airscout=Airscout
tab.notification=Hinweise
tab.shortcuts=Kurztasten
tab.beacon=Bake
tab.messageHandling=Nachrichten
tab.workedDatabase=Worked-Datenbank
tab.gui=GUI
tab.profiles=Profile
tab.colours=Farben
settings.categoryMainFallback=Haupt-Chat-Kategorie
settings.categorySecondFallback=Zweite Chat-Kategorie
settings.spotNeedsConnection=Zuerst KST4Contest verbinden und den lokalen DX-Cluster-Server einschalten.
settings.spotNoClient=Es ist kein DX-Cluster-Client mit KST4Contest verbunden.
settings.spotNotDelivered=Das Testspot konnte nicht zugestellt werden.
settings.writeFailed=Die Konfigurationsdatei konnte nicht geschrieben werden. Die Einstellungen bleiben für diese Sitzung aktiv.
settings.writtenTo=Die Einstellungen sind als Vorgabe in der XML-Konfigurationsdatei gespeichert:\n{0}
profiles.active=Aktives Profil:
profiles.settingsFile=Einstellungsdatei:
profiles.workedStations=Gearbeitete Stationen:
profiles.new=Neues Profil...
profiles.duplicate=Duplizieren...
profiles.rename=Umbenennen...
profiles.delete=Löschen...
profiles.changeWorked=Gearbeitete Stationen ändern...
profiles.switchTo=Zum gewählten Profil wechseln...
profiles.explanation=Jedes Profil hat eigene Einstellungen und ein eigenes Fensterlayout. Ein Profil kann entweder die gemeinsamen gearbeiteten Stationen der Station mitbenutzen — was eine Mehrmann-Station will — oder eigene führen. Beim Duplizieren wird alles übernommen außer Rufzeichen und Passwort, und gearbeitete Stationen nie.
profiles.dialogTitle=Operatorprofile
profiles.none=Kein Operatorprofil eingerichtet.
profiles.columnProfile=Profil
profiles.columnWorked=Gearbeitete Stationen
profiles.columnLastUsed=Zuletzt benutzt
profiles.inUse= (in Benutzung)
profiles.newTitle=Neues Operatorprofil
profiles.newBody=Name und gearbeitete Stationen des neuen Profils
profiles.nameLabel=Profilname, zum Beispiel DN9APW
profiles.create=Profil anlegen
profiles.duplicateTitle=Operatorprofil duplizieren
profiles.duplicateBody=Name des neuen Profils
profiles.duplicateHint=Alles wird übernommen außer Rufzeichen und Passwort. Gearbeitete Stationen werden nie kopiert.
profiles.renameTitle=Operatorprofil umbenennen
profiles.renameBody=Neuer Name des Profils
profiles.renameHint=Dateien und Ordner des Profils werden nicht angefasst.
profiles.deleteTitle=Operatorprofil löschen
profiles.deleteBody=Das Profil "{0}" löschen?
profiles.deleteConfirm=Profil löschen
profiles.workedTitle=Gearbeitete Stationen
profiles.workedBody=Gearbeitete Stationen von "{0}"
profiles.workedHint=Das Umschalten verschiebt keine Daten. Bereits unter der anderen Einstellung gesammelte gearbeitete Stationen bleiben, wo sie sind.
colours.section=Farben dieses Entwurfs
colours.roleWithSource={0} ({1})
colours.readabilitySection=Lesbarkeit
colours.warning={0} liest sich jetzt mit {1} zu 1, wo dieser Entwurf {2} zu 1 ausliefert.
colours.warningKept=Die Farben werden trotzdem behalten — eine harte Kombination kann gewollt sein.
colours.keepingSection=Diese Farben behalten
colours.keepingHint=Eine Farbe gilt sofort und überall. Den Neustart überlebt sie erst, wenn „Einstellungen speichern" gedrückt wurde.
colours.waysBackSection=Wege zurück
colours.backToPrevious=Zurück zum Stand von vorher ({0})
colours.discardChanges=Meine Änderungen verwerfen ({0})
colours.resetToShipped=Auf Auslieferung zurücksetzen ({0})
colours.fileSection=Die Stilvorlage von Hand bearbeiten
colours.fileReads=Dieser Entwurf liest {0}. Eine oben gesetzte Farbe überstimmt für diese Rolle, was die Datei sagt.
colours.fileAbsent=Dieser Entwurf hat keine eigene Stilvorlage. Eine kann als Ausgangspunkt nach {0} geschrieben werden.
colours.exportButton=Die Stilvorlage dieses Entwurfs in mein Profil schreiben
colours.exportWritten=Nach {0} geschrieben. Bearbeiten und neu starten, um das Ergebnis zu sehen.
colours.exportAlreadyThere={0} ist schon vorhanden und wurde nicht angefasst.
colours.exportFailed=Die Stilvorlage konnte nicht geschrieben werden: {0}
colours.sourceShipped=Auslieferung
colours.sourceFile=Datei
colours.sourceChanged=geändert
colours.roleSurface=Fläche (Menüzeile, ausgewählte Zeilen)
colours.roleWindowSurface=Fensterfläche (die Fenster selbst)
colours.roleFieldInterior=Feldinneres (Felder, Listen, Knöpfe)
colours.roleText=Text
colours.roleAccent=Akzent
colours.roleSeparator=Trennlinie
colours.notAColour='{0}' ist keine Farbe. Sechs Hexadezimalziffern mit führendem Rautezeichen, zum Beispiel #3C7A4B. {1} bleibt unverändert.
column.callsign=Rufzeichen
column.name=Name
column.message=Nachricht
column.time=Zeit
column.lastQrgRx=Letzte QRG RX
column.lastQrgTx=Letzte QRG TX
filter.find=Suchen...
filter.reset=Filter zurücksetzen
filter.showOnlyQrb=Nur QRB [km] <=
filter.showOnlyQtf=Nur QTF:
filter.hideWorked=Gearbeitete ausblenden:
filter.inactiveStations=Inaktive Stationen
filter.onlyNewGrids=Nur neue Felder
filter.gridColour=Feldfarbe
filter.newBands=Neue Bänder
filter.tropo=Tropo >=0dB
selected.none=Keine Station gewählt.
selected.priority=Priorität:
selected.more=mehr
selected.showMessages=Nachrichten zeigen
selected.createSked=Sked anlegen
selected.sked=Sked
selected.skedInMinutes=Sked in (Min.)
selected.skedFail=Sked fehlgeschlagen
selected.remindPmIn=Erinnerungs-PM in
selected.reminderOffsets=Erinnerungsabstände
selected.resetFail=Zurücksetzen fehlgeschlagen
selected.tagNotQrv=Als NOT QRV markieren
selected.band=Band
selected.mode=Mode
selected.lookUpAndShow=Nachschlagen und zeigen
selected.lookupQrz=Auf qrz.com nachschlagen
selected.lookupQrzcq=Auf qrzcq.com nachschlagen
selected.showPathInAs=Strecke in AS zeigen
selected.lastActivity=Letzte Aktivität: {0} (vor {1} Min.)
candidates.title=Stationen mit höchster Priorität
candidates.none=Noch keine Kandidaten.
candidates.doubleClick=Doppelklick auf einen Kandidaten wählt ihn aus.
update.title=Aktualisierungsinformationen
update.available=Aktualisierung verfügbar!
update.installedVersion=Installierte Version:
update.latestVersion=Neueste stabile Version:
update.mainChanges=Wesentliche Änderungen:
update.additionalInformation=Weitere Informationen:
update.download=Herunterladen:
update.openReleasePage=Release-Seite öffnen
update.changeLog=Änderungsprotokoll
update.knownBugs=Bekannte Fehler
update.versions=Versionen
map.title=Stationskarte
map.tab=Karte
map.resetView=Ansicht zurücksetzen
map.groupNearby=Nahe Stationen gruppieren
map.triggerClusterSpot=Cluster-Spot auslösen
map.showPathAnalysis=Streckenanalyse zeigen
map.hidePathAnalysis=Streckenanalyse ausblenden
map.pathAnalysisHidden=Die Streckenanalyse ist ausgeblendet.
map.tilesUnavailable=Kartenkacheln nicht verfügbar — die Netzverbindung prüfen.
path.title=Strecken- und Geländeanalyse
path.selectStation=Eine Station wählen, um Strecken- und Geländeanalyse vorzubereiten.
path.fromLocator=Vom Locator:
path.toLocator=Zum Locator:
path.endpoints=Endpunkte:
path.distanceQtf=Entfernung/QTF:
path.frequency=Frequenz:
path.status=Status:
path.source=Quelle:
path.los=LOS:
path.fresnel=Fresnel:
path.obstruction=Hindernis:
path.radioHorizon=Funkhorizont:
path.terrainHorizon=Geländehorizont:
path.refraction=Refraktion:
path.mechanisms=Mechanismen:
path.assessment=Bewertung:
path.linkBudget=Streckenbilanz:
path.rxPower=Empfangsleistung:
path.cwHint=CW-Hinweis:
chart.noSamples=Keine Profilpunkte verfügbar.
chart.distanceAxis=Entfernung [km]
chart.heightAxis=Höhe [m]
chart.legend=Legende:
chart.terrain=Gelände
chart.los=LOS
chart.fresnel=Fresnel
chart.critical=Kritisch
chart.diffraction=Beugung
chart.home=Eigene
chart.radioHorizonShort=Funkhor.
chart.terrainHorizonShort=Geländehor.
chart.homeRadioHorizon=Eigener Funkhorizont
chart.homeTerrainHorizon=Eigener Geländehorizont
chart.dxRadioHorizon=Funkhorizont der Gegenstation
chart.dxTerrainHorizon=Geländehorizont der Gegenstation
chart.frequency=f = {0} MHz
chart.criticalFresnel=Kritischer Punkt: Fresnel-Eingriff {0} m bei {1} km
chart.criticalLos=Kritischer Punkt: LOS-Freiraum {0} m bei {1} km
chart.diffractionCandidate=Beugungskandidat {0} km, KE ≈ {1} dB
title.connectionLost=VERBINDUNG VERLOREN – neuer Versuch eingeplant
title.connecting=Verbindung zu ON4KST wird aufgebaut…
title.authenticating=Verbunden – Anmeldung bei ON4KST läuft…
title.synchronizing=Verbunden – ON4KST-Chatdaten werden abgeglichen…
title.disconnected=NICHT VERBUNDEN!
status.noConnection=Keine ON4KST-Verbindung
status.linkTooltip=ON4KST-Verbindung: {0}\n{1}
status.linkConnected=🟢 LINK: Verbunden
status.linkConnecting=🟡 LINK: Verbindet…
status.linkDisconnecting=🟡 LINK: Trennt…
status.linkReconnecting=🔴 LINK: Verbindet neu…
status.linkDisconnected=🔴 LINK: Nicht verbunden
picker.title=Operatorprofil wählen
picker.moreThanOne=Es ist mehr als ein Operatorprofil eingerichtet.
picker.start=Starten
picker.quit=Beenden
dialog.yes=Ja
dialog.switchProfile=Profil wechseln
alert.profileTitle=Operatorprofil
alert.profileNotFound=Das angeforderte Operatorprofil wurde nicht gefunden.
alert.profilesTitle=Operatorprofile
alert.onlyOneProfile=Es ist nur ein Operatorprofil eingerichtet.
alert.onlyOneProfileBody=Weitere Profile werden im Einstellungsfenster im Reiter „Profile" angelegt. Jedes Profil behält eigene Einstellungen und ein eigenes Layout und kann die Worked-Datenbank der Station entweder mitbenutzen oder eine eigene führen.
alert.switchProfileTitle=Operatorprofil wechseln
alert.switchProfileQuestion=Zu „{0}" wechseln?
alert.switchProfileBody=Die ON4KST-Verbindung wird geschlossen und alle Fenster werden mit den Einstellungen und dem Layout des gewählten Profils neu aufgebaut.\n\nNicht gespeicherte Einstellungen des aktuellen Profils gehen verloren. Fenstergrößen sowie Teiler- und Spaltenbreiten werden automatisch gesichert.
alert.quitTitle=Anwendung beenden
alert.quitQuestion=Soll die Verbindung zum Chat getrennt werden?
alert.simpleLogTitle=Simplelogfile angelegt
alert.simpleLogHeader=Das gewählte Simplelogfile gab es nicht und wurde angelegt
alert.simpleLogBody=Datei: {0}\n\nPrüfe zuerst, ob du die Simplelogfile-Anbindung überhaupt brauchst. Bietet dein Logprogramm eine unterstützte Netzschnittstelle, nutze diese für Band- und Locatorangaben.\n\nWenn du Simplelogfile benutzt, stelle dein Logprogramm so ein, dass es sein laufendes Log in diese Datei schreibt. Logge dann ein Test-QSO und prüfe, ob das Rufzeichen in KST4Contest binnen einer Minute als gearbeitet markiert wird.\n\nPrüfe vor jedem Contest, dass das Logprogramm das aktuelle Contestlog in genau diese Datei schreibt. KST4Contest setzt aus Simplelogfile stammende Worked-Markierungen zum Contestbeginn nicht von selbst zurück.
alert.simpleLogLink=Das Simplelogfile-Handbuch öffnen
tooltip.bandsNone=Bänder: -
tooltip.bandsPrefix=Bänder:
tooltip.bandStatusLegend=Bandstatus:\nX = auf diesem Band gearbeitet\nB+ = Band verfügbar, auf diesem Band noch nicht gearbeitet (Rufzeichen auf einem anderen Band bereits gearbeitet)\na = Band verfügbar, Rufzeichen auf keinem Band gearbeitet (in den GUI-Einstellungen abschaltbar; fällt dann auf B+ zurück)\no = Großfeld auf diesem Band bereits gearbeitet, von einer beliebigen Station (in den GUI-Einstellungen abschaltbar)\n(leer) = keine Angaben zu diesem Band\no kann mit den übrigen zusammentreffen, zum Beispiel „ao" oder „B+o"
tooltip.bandStatusThisStation=\n\nDiese Station ({0}):\nStatus: {1}
tooltip.workedStatusLegend=Worked-Status:\nleer = Rufzeichen nicht gearbeitet, Feld nicht gearbeitet\nx = Rufzeichen gearbeitet\no = Feld gearbeitet\nxo = Rufzeichen und Feld gearbeitet
tooltip.workedStatusThisStation=\n\nDiese Station:\nRufzeichen gearbeitet: {0}\nFeld gearbeitet: {1} ({2})
tooltip.yes=ja
tooltip.no=nein
tooltip.unknownGrid=unbekanntes Feld
tooltip.grid=Feld {0}
messages.public=Öffentliche Nachrichten
messages.dxCluster=DXCluster-Nachrichten
messages.qsoOfTheOther=QSO der Gegenstation
chat.ownQrgTooltip=Die eigene Frequenz in der Hauptkategorie
chat.secondQrgTooltip=Die Frequenz für die zweite Chat-Kategorie von Hand eintragen
chat.qtfTooltip=Die eigene Antennenrichtung (QTF); wird vom Rotor übernommen, wenn einer abgeglichen wird
list.moveDown=Auswahl nach unten
list.moveUp=Auswahl nach oben
list.clearToRemove=Den Text eines Eintrags leeren, um ihn zu entfernen.
column.lastKnownQrg=Letzte bekannte QRG
alert.cannotConnectTitle=Verbinden nicht möglich
alert.credentialsMissing=Anmeldedaten fehlen
alert.credentialsMissingBody=Bitte zuerst Rufzeichen und Passwort in den Einstellungen eintragen.
alert.connectionFailedTitle=Verbindung fehlgeschlagen
alert.connectionFailedBody=Verbinden nicht möglich: {0}
contrast.textOnWindowSurface=Text auf der Fensterfläche
contrast.textInsideField=Text im Feld
contrast.accentOnWindowSurface=Akzent auf der Fensterfläche
contrast.textOnMenuStrip=Text auf der Menüzeile
@@ -0,0 +1,386 @@
# The base language. Every key and every argument count comes from this file.
#
# To contribute a language: copy this file to strings_<code>.properties and translate the
# values to the right of the equals sign. An untranslated key falls back to English, so a
# partial file is welcome. `./gradlew :app-desktop:classes` builds and reports any mistake,
# and writes a worksheet of what is still missing to
# app-desktop/build/generated/i18n/todo/.
#
# Nothing that goes to the ON4KST server or to other radio amateurs belongs in this file --
# none of it is here, and three tests keep it that way.
airscout.applyHint=Server identifier, client identifier and frequency mode are applied immediately. Reconnect after changing the UDP port.
airscout.automaticFrequency=Select AirScout frequency automatically per station
airscout.automaticHint=Automatic selection uses the station's current QRG first, then station-name and chat-category evidence. Disable it only to force one protocol value for every station.
airscout.clientIdentifier=KST4Contest client identifier [KST]:
airscout.enabled=Enable AirScout UDP integration (AirScout 0.9.9.5 or newer)
airscout.forcedBand=Forced AirScout band value [1440000 = 144 MHz]:
airscout.frequencySection=Queried frequency
airscout.serverIdentifier=AirScout server identifier [AS]:
airscout.udpPort=AirScout UDP port [9872] — reconnect after changing:
airscout.udpSection=AirScout UDP communication
alert.ok=OK
beacon.enabled=Send the beacon in this category
beacon.intervalMinutes=Interval in whole minutes
beacon.intervalSection=Shared interval
beacon.message=Beacon message
beacon.sectionFor=CQ beacon for {0}
connection.connect=Connect
connection.connectTo=Connect to {0}
connection.disconnect=Disconnect
connection.disconnectAndCloseChat=Disconnect & close Chat
dialog.cancel=Cancel
dialog.ok=OK
gui.bandColumnHints=Hints in the band columns
gui.language=Language
gui.language.system=System language
gui.startupDesign=Startup design
gui.startupFilters=Message filters active at startup
logSynch.fileChooserTitle=Choose Readonly-Loginterpreter-File
logSynch.fileEnabled=Read worked callsigns periodically from a log file (without band information)
logSynch.fileLabel=Log file to be monitored:
logSynch.fileSection=File polling for worked callsigns
logSynch.networkEnabled=Process QSO messages from N1MM+, QARTEST, UCXLog and DXLog.net
logSynch.networkSection=Network-based QSO synchronization (N1MM/QARTEST/UCXLog/DXLog)
logSynch.sharedPort=Shared UDP port for QSO and TRX messages [default 12060]:
logSynch.winTestBroadcast=UDP broadcast address for Win-Test (default = internet interface broadcast)
logSynch.winTestEnabled=Receive Win-Test network based UDP log messages
logSynch.winTestHint=The broadcast address is detected once while it is still {0}. A port change takes effect on the running listener when the field loses focus.
logSynch.winTestPort=UDP-Port for Win-Test listener (default is 9871)
logSynch.winTestSection=Win-Test Network-Listener
logSynch.winTestStationName=KST station name in Win-Test network (src of SKED packets)
menu.about=About...
menu.contactAuthor=Contact the author using default mail app
menu.disconnect=Disconnect
menu.donateOv3t=Donate for OV3T´s plane feed service
menu.donatePayPal=Donate for kst4Contest development via PayPal
menu.exitAndDisconnect=Exit + disconnect
menu.file=File
menu.hideMonitor=Hide cluster / stranger QSOs
menu.hideOptions=hide options
menu.homepage=Visit DARC X08-Homepage
menu.info=Info
menu.newsgroup=Join kst4Contest newsgroup
menu.options=Options
menu.setQrgAsNameInChat=Set QRG as name in Chat (main category)
menu.showMeAsActive=Show me as ACTIVE in chat!
menu.showMeAsAway=Show me as AWAY FROM chat!
menu.showMonitor=Show cluster / stranger QSOs
menu.showOptions=Show options
menu.switchOperatorProfile=Switch operator profile...
menu.toggleStationMap=Show / hide station map
menu.useDarkDesign=Use dark mode design
menu.useDefaultDesign=Use default mode design
menu.windows=Windows
messageHandling.autoAnswerEnabled=Answer private messages automatically
messageHandling.autoAnswerSection=Automatic answer to private messages
messageHandling.autoAnswerText=Answer text
messageHandling.qrgAnswerEnabled=Answer a QRG request with the current frequency
messageHandling.qrgAnswerSection=Automatic answer to a QRG request
notification.addCallsignToList=Add a callsign to the monitoring list
notification.addMonitored=Add monitored callsign
notification.bandUpgradeHint=Hint at a band upgrade when a QSO is logged
notification.bandUpgradePriority=Raise the priority of a station worth upgrading
notification.bandUpgradeSection=Band upgrade hints
notification.callsign=Callsign
notification.clusterEnabled=Run the DX Cluster server
notification.clusterPort=TCP port
notification.clusterSection=Local DX Cluster server
notification.cwCallsign=Play the callsign in CW on a received private message
notification.fallbackBand=Fallback band for a spot without band information
notification.monitoringSection=QSO monitoring
notification.sendTestSpot=Send a test spot
notification.simpleSounds=Play simple sounds
notification.soundsSection=Sounds
notification.speakCallsign=Speak the callsign on a received private message
notification.spotterCallsign=Spotter callsign
settings.applyAndClose=Apply/Close prefs
settings.save=Save settings
shortcuts.addButton=Add shortcut
shortcuts.addSnippet=Add new snippet
shortcuts.buttonsSection=Shortcut buttons above the message field
shortcuts.snippetsSection=Text snippets (the first 10 use Ctrl+1 through Ctrl+0)
station.bandsSection=Active bands
station.beamWidth=Antenna beam width, degrees
station.callsign=Callsign
station.chatSection=Chat category
station.defaultsSection=Defaults
station.demDirectory=DEM root directory
station.locator=Locator
station.mainCategory=Main category
station.maxQrb=Maximum QRB
station.nameMain=Name, main category
station.nameSecond=Name, second category
station.ownAntennaGain=Own antenna gain, dBi
station.ownAntennaHeight=Own antenna height, metres
station.ownSection=Own station
station.ownTxPower=Own TX power, watts
station.password=Password
station.pathSection=Path analysis defaults
station.qtf=QTF
station.rotatorEnabled=Rotator sync enabled
station.rotatorHost=Rotator host
station.rotatorPort=Rotator port
station.rotatorSection=PSTRotator
station.secondCategory=Second category
station.secondChatEnabled=2nd chat: log in to a second category
station.serverHost=Server host name
station.serverPort=Server port
station.serverSection=ON4KST server
station.targetAntennaGain=Target antenna gain, dBi
station.targetTxPower=Target TX power, watts
trxSynch.hint=An enabled source does not produce a frequency by itself. The own QRG is only updated once valid RadioInfo or Win-Test STATUS data actually arrives; until then it stays as entered by hand.
trxSynch.hintSection=What an enabled source does
trxSynch.ucxEnabled=Update MYQRG from RadioInfo messages received on the shared log-sync port
trxSynch.ucxSection=Receive UCXLog TRX info
trxSynch.winTestEnabled=Win-Test STATUS QRG Sync (updates own QRG from Win-Test transceiver frequency)
trxSynch.winTestPassFrequency=Use pass frequency from Win-Test STATUS (instead of own QRG)
trxSynch.winTestSection=Win-Test TRX sync
trxSynch.winTestStationFilter=Win-Test station name filter (e.g. STN1, empty = accept all)
worked.empty=The worked database holds no callsigns.
worked.expiryHint=Worked, NOT-QRV and grid data expire after three days on their own. A reset before every contest is normally not required.
worked.lastResetAffected=Last reset affected {0} rows.
worked.refresh=Refresh worked database
worked.reset=Reset worked, NOT-QRV and grid data...
worked.resetConfirm=Reset data
worked.resetDialogBody=Reset all worked, NOT-QRV and grid data?\n\nThis clears every contest-related flag in the internal database. A reset before every contest is normally not required because these data expire after three days.
worked.resetDialogTitle=Reset contest data
worked.resetFailed=The contest data could not be reset. The internal database may be unavailable or inconsistent. No successful reset was confirmed.
worked.section=Worked station database
tab.station=Station
tab.logSynch=Log synch
tab.trxSynch=TRX synch
tab.airscout=Airscout
tab.notification=Notification
tab.shortcuts=Shortcuts
tab.beacon=Beacon
tab.messageHandling=Messagehandling
tab.workedDatabase=Workedstn database
tab.gui=GUI
tab.profiles=Profiles
tab.colours=Colours
settings.categoryMainFallback=Main chat category
settings.categorySecondFallback=Second chat category
settings.spotNeedsConnection=Connect KST4Contest and enable the local DX Cluster server first.
settings.spotNoClient=No DX Cluster client is connected to KST4Contest.
settings.spotNotDelivered=The test spot could not be delivered.
settings.writeFailed=The configuration file could not be written. The settings stay active for this session.
settings.writtenTo=Settings are stored as default to the xml config file:\n{0}
profiles.active=Active profile:
profiles.settingsFile=Settings file:
profiles.workedStations=Worked stations:
profiles.new=New profile...
profiles.duplicate=Duplicate...
profiles.rename=Rename...
profiles.delete=Delete...
profiles.changeWorked=Change worked stations...
profiles.switchTo=Switch to selected profile...
profiles.explanation=Each profile has its own settings and window layout. A profile can either share the common station worked stations, which is what a multi operator station wants, or keep its own. Duplicating a profile copies everything except callsign and password, and never copies worked stations.
profiles.dialogTitle=Operator profiles
profiles.none=No operator profile configured.
profiles.columnProfile=Profile
profiles.columnWorked=Worked stations
profiles.columnLastUsed=Last used
profiles.inUse= (in use)
profiles.newTitle=New operator profile
profiles.newBody=Name and worked stations of the new profile
profiles.nameLabel=Profile name, for example DN9APW
profiles.create=Create profile
profiles.duplicateTitle=Duplicate operator profile
profiles.duplicateBody=Name of the new profile
profiles.duplicateHint=Everything is copied except callsign and password. Worked stations are never copied.
profiles.renameTitle=Rename operator profile
profiles.renameBody=New name of the profile
profiles.renameHint=Files and folders of the profile are not touched.
profiles.deleteTitle=Delete operator profile
profiles.deleteBody=Delete the profile "{0}"?
profiles.deleteConfirm=Delete profile
profiles.workedTitle=Worked stations
profiles.workedBody=Worked stations of "{0}"
profiles.workedHint=Switching does not move any data. Worked stations already collected under the other setting stay where they are.
colours.section=Colours of this design
colours.roleWithSource={0} ({1})
colours.readabilitySection=Readability
colours.warning={0} now reads at {1} to 1, where this design ships {2} to 1.
colours.warningKept=The colours are kept either way — a hard combination can be deliberate.
colours.keepingSection=Keeping these colours
colours.keepingHint=A colour applies at once, everywhere. It survives a restart only once Save settings has been pressed.
colours.waysBackSection=Ways back
colours.backToPrevious=Back to how it was ({0})
colours.discardChanges=Discard my changes ({0})
colours.resetToShipped=Reset to the shipped colours ({0})
colours.fileSection=Editing the stylesheet by hand
colours.fileReads=This design reads {0}. A colour set above overrides what the file says for that role.
colours.fileAbsent=This design has no stylesheet of its own. One can be written to {0} as a starting point.
colours.exportButton=Write this design's stylesheet into my profile
colours.exportWritten=Written to {0}. Edit it and restart to see the result.
colours.exportAlreadyThere={0} is already there and was left untouched.
colours.exportFailed=Could not write the stylesheet: {0}
colours.sourceShipped=shipped
colours.sourceFile=from file
colours.sourceChanged=changed
colours.roleSurface=Surface (menu strip, selected rows)
colours.roleWindowSurface=Window surface (the windows themselves)
colours.roleFieldInterior=Field interior (fields, lists, buttons)
colours.roleText=Text
colours.roleAccent=Accent
colours.roleSeparator=Separator line
colours.notAColour='{0}' is not a colour. Six hexadecimal digits with a leading hash, for example #3C7A4B. {1} is unchanged.
column.callsign=Callsign
column.name=Name
column.message=Message
column.time=Time
column.lastQrgRx=Last QRG RX
column.lastQrgTx=Last QRG TX
filter.find=Find...
filter.reset=Reset filters
filter.showOnlyQrb=Show only QRB [km] <=
filter.showOnlyQtf=Show only QTF:
filter.hideWorked=Hide worked:
filter.inactiveStations=Inactive stations
filter.onlyNewGrids=Only new grids
filter.gridColour=Grid color
filter.newBands=New bands
filter.tropo=Tropo >=0dB
selected.none=No station selected.
selected.priority=Priority:
selected.more=more
selected.showMessages=Show messages
selected.createSked=Create sked
selected.sked=Sked
selected.skedInMinutes=Sked in (min)
selected.skedFail=Sked fail
selected.remindPmIn=Remind-PM in
selected.reminderOffsets=Reminder offsets
selected.resetFail=Reset fail
selected.tagNotQrv=Tag not QRV
selected.band=Band
selected.mode=Mode
selected.lookUpAndShow=Look up and show
selected.lookupQrz=Lookup on qrz.com
selected.lookupQrzcq=Lookup on qrzcq.com
selected.showPathInAs=Show path in AS
selected.lastActivity=Last activity: {0} ({1} min ago)
candidates.title=Top priority candidates
candidates.none=No candidates yet.
candidates.doubleClick=Double-click a candidate to select it.
update.title=Update information
update.available=Update available!
update.installedVersion=Installed version:
update.latestVersion=Latest stable version:
update.mainChanges=Main changes:
update.additionalInformation=Additional information:
update.download=Download:
update.openReleasePage=Open release page
update.changeLog=ChangeLog
update.knownBugs=Known bugs
update.versions=Versions
map.title=Station Map
map.tab=Map
map.resetView=Reset view
map.groupNearby=Group nearby stations
map.triggerClusterSpot=Trigger cluster spot
map.showPathAnalysis=Show path analysis
map.hidePathAnalysis=Hide path analysis
map.pathAnalysisHidden=Path analysis is hidden.
map.tilesUnavailable=Map tiles unavailable — check the network connection.
path.title=Path / terrain analysis
path.selectStation=Select a station to prepare path and terrain analysis.
path.fromLocator=From locator:
path.toLocator=To locator:
path.endpoints=Endpoints:
path.distanceQtf=Distance/QTF:
path.frequency=Frequency:
path.status=Status:
path.source=Source:
path.los=LOS:
path.fresnel=Fresnel:
path.obstruction=Obstruction:
path.radioHorizon=Radio horizon:
path.terrainHorizon=Terrain horizon:
path.refraction=Refraction:
path.mechanisms=Mechanisms:
path.assessment=Assessment:
path.linkBudget=Link budget:
path.rxPower=RX power:
path.cwHint=CW hint:
chart.noSamples=No profile samples available.
chart.distanceAxis=Distance [km]
chart.heightAxis=Height [m]
chart.legend=Legend:
chart.terrain=Terrain
chart.los=LOS
chart.fresnel=Fresnel
chart.critical=Critical
chart.diffraction=Diffraction
chart.home=Home
chart.radioHorizonShort=Radio hor.
chart.terrainHorizonShort=Terr. hor.
chart.homeRadioHorizon=Home radio horizon
chart.homeTerrainHorizon=Home terrain horizon
chart.dxRadioHorizon=DX radio horizon
chart.dxTerrainHorizon=DX terrain horizon
chart.frequency=f = {0} MHz
chart.criticalFresnel=Critical point: Fresnel intrusion {0} m @ {1} km
chart.criticalLos=Critical point: LOS clearance {0} m @ {1} km
chart.diffractionCandidate=Diffraction candidate {0} km, KE ≈ {1} dB
title.connectionLost=CONNECTION LOST – reconnect scheduled
title.connecting=Connecting to ON4KST…
title.authenticating=Connected – authenticating with ON4KST…
title.synchronizing=Connected – synchronizing ON4KST chat data…
title.disconnected=DISCONNECTED!
status.noConnection=No ON4KST connection
status.linkTooltip=ON4KST link: {0}\n{1}
status.linkConnected=🟢 LINK: Connected
status.linkConnecting=🟡 LINK: Connecting…
status.linkDisconnecting=🟡 LINK: Disconnecting…
status.linkReconnecting=🔴 LINK: Reconnecting…
status.linkDisconnected=🔴 LINK: Disconnected
picker.title=Select operator profile
picker.moreThanOne=More than one operator profile is configured.
picker.start=Start
picker.quit=Quit
dialog.yes=Yes
dialog.switchProfile=Switch profile
alert.profileTitle=Operator profile
alert.profileNotFound=The requested operator profile was not found.
alert.profilesTitle=Operator profiles
alert.onlyOneProfile=Only one operator profile is configured.
alert.onlyOneProfileBody=Additional profiles are created in the settings window on the "Profiles" tab. Each profile keeps its own settings and layout, and can either share the station worked database or use its own.
alert.switchProfileTitle=Switch operator profile
alert.switchProfileQuestion=Switch to "{0}"?
alert.switchProfileBody=The ON4KST connection is closed and all windows are rebuilt with the settings and layout of the selected profile.\n\nUnsaved settings of the current profile are lost. Window sizes, divider and column widths are saved automatically.
alert.quitTitle=Quit application
alert.quitQuestion=Do you want to disconnect from the Chat?
alert.simpleLogTitle=Simplelogfile created
alert.simpleLogHeader=The selected Simplelogfile did not exist and has been created
alert.simpleLogBody=File: {0}\n\nFirst check whether you need the Simplelogfile integration. If your logging application provides a supported network interface, use that interface for band and locator information.\n\nIf you use Simplelogfile, configure your logging application to write its live log to this file. Then log a test QSO and verify that the callsign is marked as worked in KST4Contest within one minute.\n\nBefore each contest, verify that the logging application writes the current contest log to this exact file. KST4Contest does not reset Simplelogfile-derived Worked marks automatically when a new contest starts.
alert.simpleLogLink=Open the Simplelogfile manual
tooltip.bandsNone=Bands: -
tooltip.bandsPrefix=Bands:
tooltip.bandStatusLegend=Band status:\nX = worked on this band\nB+ = band available, not worked on this band yet (call already worked on another band)\na = band available, call not worked on any band yet (can be turned off in GUI settings; falls back to B+)\no = grid square already worked on this band, by any station (can be turned off in GUI settings)\n(empty) = no information for this band\no can combine with the others, e.g. "ao" or "B+o"
tooltip.bandStatusThisStation=\n\nThis station ({0}):\nStatus: {1}
tooltip.workedStatusLegend=Worked status:\nempty = call not worked, grid not worked\nx = call worked\no = grid worked\nxo = call and grid worked
tooltip.workedStatusThisStation=\n\nThis station:\nCall worked: {0}\nGrid worked: {1} ({2})
tooltip.yes=yes
tooltip.no=no
tooltip.unknownGrid=unknown grid
tooltip.grid=grid {0}
messages.public=Public messages
messages.dxCluster=DXCluster messages
messages.qsoOfTheOther=QSO of the other
chat.ownQrgTooltip=Your own frequency in the main category
chat.secondQrgTooltip=Enter the frequency for the second chat category by hand
chat.qtfTooltip=Your antenna heading (QTF); read from the rotator when one is synced
list.moveDown=Move selected down
list.moveUp=Move selected up
list.clearToRemove=Clear the text of an entry to remove it.
column.lastKnownQrg=Last known QRG
alert.cannotConnectTitle=Cannot connect
alert.credentialsMissing=Login credentials missing
alert.credentialsMissingBody=Please configure your callsign and password in Settings first.
alert.connectionFailedTitle=Connection failed
alert.connectionFailedBody=Could not connect: {0}
contrast.textOnWindowSurface=Text on the window surface
contrast.textInsideField=Text inside a field
contrast.accentOnWindowSurface=Accent on the window surface
contrast.textOnMenuStrip=Text on the menu strip