An operator was about to build band→relay mapping into the custom URL rows.
It already exists, and better: relay auto-control has a per-relay "band" rule
driving webswitch, KMTronic, Dingtian, Denkovi and USB boards. It holds state
so a relay is only commanded when its wanted position changed, reads the
boards live before the first apply so it does not re-command one already in
place, and carries per-relay labels. A URL fired on a band change has none of
that, and would have been a second definition of "which antenna on which band"
— the drift that cost us a week on counties.
So the gap was only the hardware: a hand-made switch is none of the five named
types. It is now the sixth, "HTTP relay": an ON URL and an OFF URL, either as
one pattern with {relay} substituted, or one pair per relay. The per-relay
form is the reason it exists — these boxes often have URLs with nothing in
common between channels (…/FF0101 and …/FF0201), which no pattern can express.
Status is remembered rather than read: most have no endpoint worth trusting.
The cost is stated in the code and the panel — after a restart every relay is
re-commanded once, which is harmless on a board with no memory and far better
than assuming an antenna is already selected.
And the Connections panel now says so, exactly where the wrong choice is made:
picking a band change with a URL transport shows a note pointing at Station
Control. The URL transport stays — a lookup pushed to a webhook or a QSO to a
dashboard is an event, not a state, and Station Control has no place for it.
"UDP: new outbound “WSJT-X logged QSO” — announces each contact on the WSJT-X UDP interface, both messages WSJT-X itself sends, for any logger that listens there rather than for plain-text ADIF (Logger32 among them).",
"Appearance: the Sahara theme is lighter, parchment rather than deep sand, with a terracotta accent.",
"UDP: new outbound “Custom message” — you choose what fires it (band change, QSO logged, rotator command, callsign lookup) and what it says, with fields like {band} or {az}. It leaves as a UDP datagram or an HTTP request, which is how most antenna switches are driven.",
"Settings: the UDP section is now “Connections” — it no longer carries only UDP. Every custom message is logged with what was sent, and a message that came out empty says so, with a password in a URL redacted."
"Settings: the UDP section is now “Connections” — it no longer carries only UDP. Every custom message is logged with what was sent, and a message that came out empty says so, with a password in a URL redacted.",
"Station relays: new “HTTP relay” device for home-made and generic switches — an ON and an OFF URL, either one pattern with {relay} or one pair per relay. It then follows the same per-band rules as the named boards."
],
"fr":[
"Envoi de spot : le commentaire porte désormais les références de diplôme après le mode — celles que vous avez attribuées (POTA, SOTA, IOTA…), pas le DXCC, la zone et le préfixe que chacun déduit de l’indicatif. Un auto-spot porte VOS références d’activation.",
@@ -30,7 +31,8 @@
"UDP : nouvelle sortie « QSO enregistré WSJT-X » — annonce chaque contact sur l’interface UDP WSJT-X, les deux messages que WSJT-X émet lui-même, pour tout logger qui écoute là plutôt que l’ADIF en texte brut (Logger32 entre autres).",
"Apparence : le thème Sahara s’éclaircit, parchemin plutôt que sable profond, avec un accent terre cuite.",
"UDP : nouvelle sortie « Message personnalisé » — vous choisissez ce qui la déclenche (changement de bande, QSO enregistré, commande de rotor, recherche d’indicatif) et ce qu’elle dit, avec des champs comme {band} ou {az}. Elle part en datagramme UDP ou en requête HTTP, ce qui est la façon dont se pilotent la plupart des commutateurs d’antennes.",
"Réglages : la section UDP devient « Connexions » — elle ne porte plus seulement de l’UDP. Chaque message personnalisé est journalisé avec son contenu, un message rendu vide le signale, et un mot de passe dans une URL est masqué."
"Réglages : la section UDP devient « Connexions » — elle ne porte plus seulement de l’UDP. Chaque message personnalisé est journalisé avec son contenu, un message rendu vide le signale, et un mot de passe dans une URL est masqué.",
"Relais de station : nouveau périphérique « Relais HTTP » pour les commutateurs faits main ou génériques — une URL ON et une URL OFF, soit un modèle avec {relay}, soit une paire par relais. Il suit ensuite les mêmes règles par bande que les cartes reconnues."
constTYPE_LABEL: Record<string,string>={webswitch:'WebSwitch 1216H',kmtronic:'KMTronic 8-relay',denkovi:'Denkovi USB (FT245)',usbrelay:'Denkovi USB (serial)',dingtian:'Dingtian IOT relay'};
'uscty.backfillIntro':'Resolve county (and grid) for US QSOs already in your log that are missing them. Existing values are kept — only blanks are filled.',
'uscty.backfillRun':'Fill missing counties',
'uscty.backfillDone':'{s} US QSOs scanned · {c} counties, {g} grids filled.',
'station.typeHttpGen':'HTTP relay (home-made / generic)','station.onPattern':'ON URL pattern','station.offPattern':'OFF URL pattern','station.patternHint':'{relay} is replaced by the relay number. Leave blank if every relay has its own URL below.','station.perRelayUrls':'Per-relay URLs (optional)','station.perRelayHint':'Filled in here, these win over the patterns — for a switch whose channels have nothing in common. State is remembered, not read back: after a restart every relay is re-commanded once.','station.onUrlPh':'ON URL','station.offUrlPh':'OFF URL',
'station.title':'Station Control','station.rotator':'Rotator','station.rotateTo':'Rotate to {az}°','station.rotatorNoRead':'No heading read','station.bands':'Bands','station.nudgeUp':'Up {n} kHz','station.nudgeDown':'Down {n} kHz','station.trackOn':'Tracking on','station.trackOff':'Tracking off','station.trackStepTip':'Re-tune only when the rig has moved this far','station.trackModeTip':'When the antenna is allowed to re-tune','station.trackAlways':'Every frequency change','station.trackStep':'Past a step','station.trackBand':'Band change only','station.trackAlwaysTip':'Follow every frequency change. Best resonance, but the motors run constantly — and on a SteppIR every move blocks transmit while the elements travel.','station.trackStepTipMode':'Re-tune only once the rig has moved further than the step. Follows a QSY, ignores tuning around.','station.trackBandTip':'Re-tune only when the band changes. The motors move a few times a day and are left alone within a band.','station.pattern':'Pattern','station.bi':'Bi','station.retract':'Retract elements','station.moving':'MOVING','station.elements':'Elements (mm)','station.read':'Read','station.readLengths':'Read current element lengths from the controller','station.noLengths':'Lengths unknown — click Read to fetch them from the controller.','station.element':'Element','station.reflector':'Reflector','station.driven':'Driven','station.director':'Dir','station.set':'Set','station.elementsHint':'Each press lengthens/shortens the element by 2 mm (like the physical console). Verify which element responds on your antenna.','station.setExactLen':'Click to type the exact current length (fixes the baseline if the auto-read is off).','station.atMax':'Controller refused — the element is likely at its maximum length for this band, so it can\'t extend further.','station.go':'Go','station.stop':'Stop','station.dragHint':'Drag the grip handle on the left of a panel to move it. Pick a column count to lay them out in a grid.','station.dragMove':'Drag to move this panel','station.colsAuto':'Auto','station.addDevice':'Add device','station.editDevice':'Edit device','station.empty':'No relay boards yet. Add a WebSwitch 1216H or a KMTronic 8-relay board to control your station power and accessories.','station.online':'Online','station.offline':'Offline','station.edit':'Edit','station.delete':'Delete','station.relay':'Relay','station.on':'ON','station.off':'OFF','station.type':'Device type','station.name':'Name','station.host':'Host / IP','station.hostHint':'LAN IP for local use. To reach the board from OUTSIDE, put a full URL here — e.g. https://relay.yourdomain.com — pointing at a reverse proxy (Nginx Proxy Manager…) that fronts the board’s HTTP port.','station.user':'Username','station.pass':'Password','station.optional':'optional','station.ftdiSerial':'FTDI serial number','station.detect':'Detect','station.ftdiHint':'The Denkovi board is driven via FTDI bit-bang (not the COM port). Pick its serial (e.g. DAE0006K). Needs the FTDI D2XX driver installed.','station.channels':'Relays','station.comPort':'COM port','station.noPorts':'No ports found','station.usbRelayHint':'Cheap USB-serial relay boards (CH340/LCUS) using the A0 command protocol. If yours does not switch, tell me its model / command set.','station.labels':'Relay labels','station.cancel':'Cancel','station.save':'Save','station.test':'Test connection','station.testOk':'Connected — {n} relays','station.testFail':'Not connected','station.detectNone':'No FTDI board found — check the cable and that the D2XX driver is installed.','station.detectFound':'{n} board(s) detected.',
'awards.followHint':'Awards shown in the Awards tab. Leave the right side empty to show them all.','awards.available':'All awards','awards.followed':'Followed','awards.search':'Filter…','awards.addAll':'Add all','awards.clear':'Clear','awards.allTracked':'All awards are followed.','awards.noneFollowed':'Nothing followed yet — the Awards tab shows all.',
'altm.filterPh':'Filter…','altm.noMatch':'no match','altm.noneAll':'none selected = ALL','altm.nSelected':'{n} selected','altm.giveName':'Give the rule a name','altm.deleteConfirm':'Delete alert "{name}"?','altm.title':'Alert management','altm.desc':'Alert when a spot matches a rule. Empty filters = ANY; the filters you set are ANDed (e.g. France + 20m = French stations on 20m).','altm.rules':'Rules','altm.noRules':'No rules yet — click +','altm.emailTo':'Alert e-mail to','altm.selectOrCreate':'Select or create a rule.','altm.tabDef':'Definition','altm.tabCall':'Call / DXCC','altm.tabBandMode':'Band / Mode','altm.tabOrigin':'Origin','altm.ruleName':'Rule name','altm.alertEnabled':'Alert enabled','altm.againAfter':'Alert again after (min)','altm.againHint':'0 = once/session · -1 = always','altm.actions':'Actions','altm.visual':'Visual','altm.sound':'Sound','altm.email':'E-mail','altm.skipWorked':'Skip calls already worked (same band + mode)','altm.callsigns':'Callsigns (one per line, wildcards: IW3*, */P)','altm.countries':'Countries (DXCC)','altm.continents':'Continents','altm.bands':'Bands','altm.modes':'Modes','altm.spotterCall':'Spotter callsign (wildcard)','altm.spotterCallPh':'e.g. F* or DL1ABC','altm.spotterContinents':'Spotter continents','altm.spotterCountries':'Spotter countries','altm.delete':'Delete','altm.saveRule':'Save rule','altm.close':'Close',
'ncp.newNetPrompt':'New NET name:','ncp.renamePrompt':'Rename NET:','ncp.deleteConfirm':'Delete NET "{name}" and its roster? This cannot be undone.','ncp.closeConfirm':"{n} station(s) still on the air will be dropped WITHOUT logging. Close anyway?",'ncp.removeConfirm':"Remove {n} station(s) from this NET's roster?",'ncp.colCallsign':'Callsign','ncp.colName':'Name','ncp.colTimeOn':'Time on','ncp.colBand':'Band','ncp.colMode':'Mode','ncp.colComment':'Comment','ncp.colCountry':'Country','ncp.colDate':'Date','ncp.workedBefore':'Worked before','ncp.wbHint':'Click a station (on air or roster) to see prior QSOs','ncp.wbNone':'No prior QSO with','ncp.wbFirst':'first','ncp.wbLast':'last','ncp.wbResize':'Drag to resize','ncp.newNet':'New NET','ncp.closeToSwitch':'Close the NET to switch','ncp.selectNetTitle':'Select a NET','ncp.selectNetOption':'— select a NET —','ncp.closeNet':'Close NET','ncp.openNet':'Open NET','ncp.rename':'Rename','ncp.delete':'Delete','ncp.netOpenBadge':'NET OPEN','ncp.onAir':'On air:','ncp.roster':'Roster:','ncp.onAirActive':'On air — active QSOs','ncp.activeHint':'mic-pass order · ⬆⬇ to reorder · double-click → edit · "Log & end" to save','ncp.moveUp':'Move up the mic-pass order','ncp.moveDown':'Move down the mic-pass order','ncp.logEndSelected':'Log & end selected','ncp.logAll':'Log everyone ({n})','ncp.logAllConfirm':'Log all {n} on-air station(s) to the logbook?','ncp.netUsersRoster':'NET users — roster','ncp.rosterHint':'double-click → put on air','ncp.addContact':'Add contact','ncp.remove':'Remove','ncp.putOnAir':'Put selected on air','ncp.addContactTitle':'Add contact to NET','ncp.addContactDesc':"Saved in this NET's roster (reused next time you open it).",'ncp.callsign':'Callsign','ncp.search':'Search','ncp.name':'Name','ncp.country':'Country','ncp.cancel':'Cancel','ncp.saveInNet':'Save in NET',
'udpp.relayInstead':'For an antenna switch or a relay board, use Station Control → relays instead: it holds the state, reads the boards at startup and does not re-switch while you tune inside a band. A home-made switch is the “HTTP relay” type there.',
'udpp.svcCustomLabel':'Custom message','udpp.svcCustomHint':'You choose what fires it and what it says. A UDP datagram or an HTTP request — the latter is how most antenna switches are driven.','udpp.trigger':'Fires on','udpp.trgBand':'Band change (radio)','udpp.trgQso':'QSO logged','udpp.trgRotator':'Rotator command','udpp.trgLookup':'Callsign lookup','udpp.transport':'Sends as','udpp.transportUdp':'UDP message','udpp.transportUrl':'URL (HTTP GET)','udpp.url':'URL','udpp.urlHint':'Values are URL-encoded. Credentials may be included as http://user:pass@host/… — stored as typed, so keep it to your own network.','udpp.template':'Message','udpp.lineEnd':'Line end','udpp.lineEndNone':'None','udpp.fieldsAvailable':'Fields for this trigger','udpp.fieldsHint':'Anything else renders empty.',
'udpp.svcWsjtLabel':'WSJT-X / JTDX / MSHV','udpp.svcWsjtHint':'Auto-logs FT8/FT4/etc. QSOs and fills the entry callsign live.','udpp.svcAdifLabel':'ADIF message (JTAlert, GridTracker)','udpp.svcAdifHint':'Receives a single ADIF record per packet and logs it.','udpp.svcN1mmLabel':'N1MM Logger+ (contest XML)','udpp.svcN1mmHint':'Receives contest QSOs as XML messages.','udpp.svcRemoteLabel':'Remote callsign (DXHunter, custom)','udpp.svcRemoteHint':'A short text packet containing just a callsign — fills the entry field.','udpp.svcWsjtLogLabel':'WSJT-X logged QSO','udpp.svcWsjtLogHint':'Announces each logged QSO on the WSJT-X UDP interface — both messages WSJT-X itself sends. For any logger that listens there rather than for plain-text ADIF (Logger32’s additional UDP sockets, for one).','udpp.svcDbLabel':'ADIF Message','udpp.svcDbHint':'Sends the ADIF of every QSO you log to a remote listener (Cloudlog UDP, N1MM, …).','udpp.svcPstLabel':'PstRotator frequency','udpp.svcPstHint':'Sends the rig frequency as <PST><FREQUENCY> whenever it changes — set PstRotatorAz tracker to DXLog.net (default port 12040).','udpp.svcN1mmRadioLabel':'N1MM RadioInfo (freq + mode)','udpp.svcN1mmRadioHint':'Broadcasts the rig frequency/mode as N1MM Logger+ RadioInfo XML on every change — consumed by PstRotator (N1MM tracker) and many other tools.','udpp.deleteConfirm':'Delete this UDP connection?','udpp.loading':'Loading…','udpp.intro':'Connections let OpsLog talk to other ham radio software. Inbound connections receive QSOs or callsigns and update the logbook live; outbound connections notify other apps when you log a QSO locally. Enable multicast to share a port with another listener without conflict — required for the typical WSJT-X 2237 setup.','udpp.inboundTitle':'Inbound — OpsLog listens','udpp.outboundTitle':'Outbound — OpsLog sends','udpp.reloadAll':'Reload all','udpp.reloadHint':'Restarts every enabled listener after a manual change.','udpp.add':'Add','udpp.noConnection':'No connection.','udpp.unnamed':'(unnamed)','udpp.dialogTitle':'{action} {direction} connection','udpp.new':'New','udpp.edit':'Edit','udpp.directionInbound':'inbound','udpp.directionOutbound':'outbound','udpp.name':'Name','udpp.namePhInbound':'WSJT-X log','udpp.namePhOutbound':'Cloudlog notify','udpp.serviceType':'Service type','udpp.port':'Port','udpp.multicast':'Multicast','udpp.multicastGroup':'Multicast group','udpp.multicastHint':'Use the same group address as the sending app. WSJT-X default is 224.0.0.1.','udpp.destinationIp':'Destination IP','udpp.enabled':'Enabled','udpp.cancel':'Cancel','udpp.save':'Save',
'fltb.fCallsign':'Callsign','fltb.fDate':'Date / time (UTC)','fltb.fEndDate':'End date / time','fltb.fBand':'Band','fltb.fRxBand':'RX band','fltb.fMode':'Mode','fltb.fSubmode':'Submode','fltb.fFreq':'Frequency (Hz)','fltb.fRxFreq':'RX frequency (Hz)','fltb.fRstSent':'RST sent','fltb.fRstRcvd':'RST rcvd','fltb.fName':'Name','fltb.fQth':'QTH','fltb.fAddress':'Address','fltb.fEmail':'E-mail','fltb.fGrid':'Grid','fltb.fCountry':'Country','fltb.fState':'State','fltb.fCounty':'County','fltb.fDxcc':'DXCC #','fltb.fContinent':'Continent','fltb.fCqz':'CQ zone','fltb.fItuz':'ITU zone','fltb.fIota':'IOTA','fltb.fSota':'SOTA ref','fltb.fPota':'POTA ref','fltb.fWwff':'WWFF ref','fltb.fRig':'Rig','fltb.fAntenna':'Antenna','fltb.fQslSent':'Paper QSL sent status','fltb.fQslSentDate':'Paper QSL sent date','fltb.fQslRcvd':'Paper QSL received status','fltb.fQslRcvdDate':'Paper QSL received date','fltb.fQslSentVia':'QSL sent via','fltb.fQslRcvdVia':'QSL rcvd via','fltb.fQslVia':'QSL via','fltb.fLotwSent':'LoTW sent status','fltb.fLotwSentDate':'LoTW sent date','fltb.fLotwRcvd':'LoTW received status','fltb.fLotwRcvdDate':'LoTW received date','fltb.fEqslSent':'eQSL sent status','fltb.fEqslSentDate':'eQSL sent date','fltb.fEqslRcvd':'eQSL received status','fltb.fEqslRcvdDate':'eQSL received date','fltb.fQrzSent':'QRZ.com sent status','fltb.fQrzSentDate':'QRZ.com sent date','fltb.fQrzRcvd':'QRZ.com received status','fltb.fQrzRcvdDate':'QRZ.com received date','fltb.fClublogSent':'Club Log sent status','fltb.fClublogSentDate':'Club Log sent date','fltb.fHrdlogSent':'HRDLog sent status','fltb.fHrdlogSentDate':'HRDLog sent date','fltb.fContestId':'Contest ID','fltb.fSerialRcvd':'Serial rcvd','fltb.fSerialSent':'Serial sent','fltb.fPropMode':'Propagation mode','fltb.fSatellite':'Satellite','fltb.fMyCallsign':'Station callsign (my call)','fltb.fOperator':'Operator','fltb.fOwnerCallsign':'Owner callsign','fltb.fMyGrid':'My grid','fltb.fMyCountry':'My country','fltb.fMyState':'My state','fltb.fMyCounty':'My county','fltb.fMyIota':'My IOTA','fltb.fMySota':'My SOTA ref','fltb.fMyPota':'My POTA ref','fltb.fMyWwff':'My WWFF ref','fltb.fMyStreet':'My street','fltb.fMyCity':'My city','fltb.fMyPostal':'My postal code','fltb.fMyRig':'My rig','fltb.fMyAntenna':'My antenna','fltb.fTxPower':'TX power (W)','fltb.fComment':'Comment','fltb.fNotes':'Notes','fltb.opEq':'equals (=)','fltb.opNe':'not equal (≠)','fltb.opContains':'contains','fltb.opStartsWith':'starts with','fltb.opEndsWith':'ends with','fltb.opGt':'greater than (>)','fltb.opLt':'less than (<)','fltb.opGe':'greater or equal (≥)','fltb.opLe':'less or equal (≤)','fltb.opEmpty':'is empty','fltb.opIn':'is one of','fltb.opNotIn':'is none of','fltb.listPh':'2m, 70cm — comma separated','fltb.opNotEmpty':'is not empty','fltb.title':'QSO filter','fltb.match':'Match','fltb.all':'ALL (AND)','fltb.any':'ANY (OR)','fltb.loadPreset':'Load preset…','fltb.noConditions':'No conditions — the list shows all QSOs. Add one below.','fltb.where':'WHERE','fltb.valuePh':'value','fltb.remove':'Remove','fltb.addCondition':'Add condition','fltb.presetNamePh':'Preset name…','fltb.savePreset':'Save preset','fltb.clear':'Clear','fltb.cancel':'Cancel','fltb.applyClose':'Apply & close',
@@ -586,6 +588,7 @@ const fr: Dict = {
'uscty.backfillIntro':"Résout le comté (et le locator) pour les QSO US déjà dans ton log qui n'en ont pas. Les valeurs existantes sont conservées — seuls les vides sont remplis.",
'uscty.backfillRun':'Remplir les comtés manquants',
'uscty.backfillDone':'{s} QSO US analysés · {c} comtés, {g} locators remplis.',
'station.typeHttpGen':'Relais HTTP (fait main / générique)','station.onPattern':'Modèle d’URL ON','station.offPattern':'Modèle d’URL OFF','station.patternHint':'{relay} est remplacé par le numéro du relais. Laissez vide si chaque relais a sa propre URL ci-dessous.','station.perRelayUrls':'URL par relais (optionnel)','station.perRelayHint':'Renseignées ici, elles l’emportent sur les modèles — pour un commutateur dont les voies n’ont rien en commun. L’état est mémorisé, pas relu : après un redémarrage chaque relais est recommandé une fois.','station.onUrlPh':'URL ON','station.offUrlPh':'URL OFF',
'station.title':'Contrôle station','station.rotator':'Rotator','station.rotateTo':'Tourner vers {az}°','station.rotatorNoRead':'Azimut non lu','station.bands':'Bandes','station.nudgeUp':'Monter de {n} kHz','station.nudgeDown':'Descendre de {n} kHz','station.trackOn':'Suivi actif','station.trackOff':'Suivi inactif','station.trackStepTip':'Ne réaccorder que si le rig a bougé d au moins ça','station.trackModeTip':"Quand l'antenne a le droit de se réaccorder",'station.trackAlways':'À chaque changement','station.trackStep':'Au-delà d un pas','station.trackBand':'Changement de bande','station.trackAlwaysTip':"Suivre chaque changement de fréquence. Résonance idéale, mais les moteurs tournent en permanence — et sur une SteppIR chaque déplacement bloque l'émission le temps du mouvement.",'station.trackStepTipMode':"Ne réaccorder qu'une fois le rig sorti du pas. Suit un QSY, ignore la recherche autour.",'station.trackBandTip':"Ne réaccorder qu'au changement de bande. Les moteurs bougent quelques fois par jour et restent tranquilles dans une bande.",'station.pattern':'Diagramme','station.bi':'Bi','station.retract':'Rétracter les éléments','station.moving':'EN MOUVEMENT','station.elements':'Éléments (mm)','station.read':'Lire','station.readLengths':'Lire les longueurs actuelles depuis le contrôleur','station.noLengths':'Longueurs inconnues — clique sur Lire pour les récupérer depuis le contrôleur.','station.element':'Élément','station.reflector':'Réflecteur','station.driven':'Radiateur','station.director':'Dir','station.set':'Régler','station.elementsHint':"Chaque appui allonge/raccourcit l'élément de 2 mm (comme le pupitre). Vérifie quel élément répond sur ton antenne.",'station.setExactLen':"Clique pour taper la longueur actuelle exacte (recale la base si la lecture auto est fausse).",'station.atMax':"Refusé par le contrôleur — l'élément est probablement en butée (longueur max pour cette bande), il ne peut plus s'allonger.",'station.go':'Aller','station.stop':'Stop','station.dragHint':'Glisse la poignée à gauche d un panneau pour le déplacer. Choisis un nombre de colonnes pour la disposition.','station.dragMove':'Glisser pour déplacer ce panneau','station.colsAuto':'Auto','station.addDevice':'Ajouter un appareil','station.editDevice':"Modifier l'appareil",'station.empty':"Aucune carte relais. Ajoute un WebSwitch 1216H ou une carte KMTronic 8 relais pour piloter l'alimentation et les accessoires de ta station.",'station.online':'En ligne','station.offline':'Hors ligne','station.edit':'Modifier','station.delete':'Supprimer','station.relay':'Relais','station.on':'ON','station.off':'OFF','station.type':"Type d'appareil",'station.name':'Nom','station.host':'Hôte / IP','station.hostHint':"IP du LAN en local. Pour joindre la carte depuis L'EXTÉRIEUR, saisis une URL complète ici — ex. https://relais.tondomaine.com — pointant vers un reverse proxy (Nginx Proxy Manager…) qui expose le port HTTP de la carte.",'station.user':"Nom d'utilisateur",'station.pass':'Mot de passe','station.optional':'optionnel','station.ftdiSerial':'Numéro de série FTDI','station.detect':'Détecter','station.ftdiHint':"La carte Denkovi se pilote en FTDI bit-bang (pas via le port COM). Choisis son numéro de série (ex. DAE0006K). Nécessite le driver FTDI D2XX installé.",'station.channels':'Relais','station.comPort':'Port COM','station.noPorts':'Aucun port','station.usbRelayHint':"Cartes USB-série bon marché (CH340/LCUS) protocole A0. Si la tienne ne commute pas, donne-moi le modèle / jeu de commandes.",'station.labels':'Libellés des relais','station.cancel':'Annuler','station.save':'Enregistrer','station.test':'Tester la connexion','station.testOk':'Connecté — {n} relais','station.testFail':'Non connecté','station.detectNone':'Aucune carte FTDI trouvée — vérifie le câble et que le driver D2XX est installé.','station.detectFound':'{n} carte(s) détectée(s).',
'awards.followHint':'Diplômes affichés dans l’onglet Awards. Laisse la colonne de droite vide pour tous les afficher.','awards.available':'Tous les diplômes','awards.followed':'Suivis','awards.search':'Filtrer…','awards.addAll':'Tout ajouter','awards.clear':'Vider','awards.allTracked':'Tous les diplômes sont suivis.','awards.noneFollowed':'Aucun pour l’instant — l’onglet Awards les montre tous.',
'altm.filterPh':'Filtrer…','altm.noMatch':'aucun résultat','altm.noneAll':'aucune sélection = TOUT','altm.nSelected':'{n} sélectionné(s)','altm.giveName':'Donne un nom à la règle','altm.deleteConfirm':"Supprimer l'alerte « {name} » ?",'altm.title':'Gestion des alertes','altm.desc':'Alerte quand un spot correspond à une règle. Filtres vides = TOUT ; les filtres définis sont combinés par ET (ex. France + 20m = stations françaises sur 20m).','altm.rules':'Règles','altm.noRules':'Aucune règle — clique sur +','altm.emailTo':"E-mail d'alerte à",'altm.selectOrCreate':'Sélectionne ou crée une règle.','altm.tabDef':'Définition','altm.tabCall':'Indicatif / DXCC','altm.tabBandMode':'Bande / Mode','altm.tabOrigin':'Origine','altm.ruleName':'Nom de la règle','altm.alertEnabled':'Alerte activée','altm.againAfter':'Réalerter après (min)','altm.againHint':'0 = une fois/session · -1 = toujours','altm.actions':'Actions','altm.visual':'Visuel','altm.sound':'Son','altm.email':'E-mail','altm.skipWorked':'Ignorer les indicatifs déjà contactés (même bande + mode)','altm.callsigns':'Indicatifs (un par ligne, jokers : IW3*, */P)','altm.countries':'Pays (DXCC)','altm.continents':'Continents','altm.bands':'Bandes','altm.modes':'Modes','altm.spotterCall':'Indicatif du spotteur (joker)','altm.spotterCallPh':'ex. F* ou DL1ABC','altm.spotterContinents':'Continents du spotteur','altm.spotterCountries':'Pays du spotteur','altm.delete':'Supprimer','altm.saveRule':'Enregistrer la règle','altm.close':'Fermer',
'spm.callRequired':'Indicatif requis','spm.freqRequired':'Fréquence (kHz) requise','spm.title':'Envoyer un spot DX','spm.callsign':'Indicatif','spm.callPh':'Indicatif DX','spm.frequency':'Fréquence (kHz)','spm.message':'Message','spm.messagePh':'ex. CW · TNX QSO','spm.latestQsos':'Derniers QSO','spm.spotSent':'Spot envoyé ✓','spm.masterCluster':'Cluster maître','spm.cancel':'Annuler','spm.sending':'Envoi…','spm.sendSpot':'Envoyer le spot',
'ncp.newNetPrompt':'Nom du nouveau NET :','ncp.renamePrompt':'Renommer le NET :','ncp.deleteConfirm':'Supprimer le NET « {name} » et son répertoire ? Cette action est irréversible.','ncp.closeConfirm':"{n} station(s) encore en l'air seront retirées SANS être enregistrées. Fermer quand même ?",'ncp.removeConfirm':'Retirer {n} station(s) du répertoire de ce NET ?','ncp.colCallsign':'Indicatif','ncp.colName':'Nom','ncp.colTimeOn':'Heure début','ncp.colBand':'Bande','ncp.colMode':'Mode','ncp.colComment':'Commentaire','ncp.colCountry':'Pays','ncp.colDate':'Date','ncp.workedBefore':'Déjà contacté','ncp.wbHint':'Cliquer une station (on air ou roster) pour voir les QSO précédents','ncp.wbNone':'Aucun QSO précédent avec','ncp.wbFirst':'premier','ncp.wbLast':'dernier','ncp.wbResize':'Glisser pour redimensionner','ncp.newNet':'Nouveau NET','ncp.closeToSwitch':'Ferme le NET pour changer','ncp.selectNetTitle':'Sélectionne un NET','ncp.selectNetOption':'— sélectionner un NET —','ncp.closeNet':'Fermer le NET','ncp.openNet':'Ouvrir le NET','ncp.rename':'Renommer','ncp.delete':'Supprimer','ncp.netOpenBadge':'NET OUVERT','ncp.onAir':"En l'air :",'ncp.roster':'Répertoire :','ncp.onAirActive':"En l'air — QSO actifs",'ncp.activeHint':'ordre de passage du micro · ⬆⬇ pour réordonner · double-clic → éditer · « Logger & terminer »','ncp.moveUp':"Monter dans l'ordre de passage",'ncp.moveDown':"Descendre dans l'ordre de passage",'ncp.logEndSelected':'Logger & terminer la sélection','ncp.logAll':'Logger tout le monde ({n})','ncp.logAllConfirm':'Logger les {n} station(s) on air dans le logbook ?','ncp.netUsersRoster':'Membres du NET — répertoire','ncp.rosterHint':"double-clic → mettre en l'air",'ncp.addContact':'Ajouter un contact','ncp.remove':'Retirer','ncp.putOnAir':"Mettre la sélection en l'air",'ncp.addContactTitle':'Ajouter un contact au NET','ncp.addContactDesc':'Enregistré dans le répertoire de ce NET (réutilisé à la prochaine ouverture).','ncp.callsign':'Indicatif','ncp.search':'Rechercher','ncp.name':'Nom','ncp.country':'Pays','ncp.cancel':'Annuler','ncp.saveInNet':'Enregistrer dans le NET',
'udpp.relayInstead':'Pour un commutateur d’antennes ou une carte de relais, préférez Station Control → relais : il tient l’état, relit les cartes au démarrage et ne recommute pas quand vous bougez dans la même bande. Un commutateur fait main s’y déclare en type « Relais HTTP ».',
'udpp.svcCustomLabel':'Message personnalisé','udpp.svcCustomHint':'Vous choisissez ce qui le déclenche et ce qu’il dit. Datagramme UDP ou requête HTTP — cette dernière est la façon dont se pilotent la plupart des commutateurs d’antennes.','udpp.trigger':'Déclencheur','udpp.trgBand':'Changement de bande (radio)','udpp.trgQso':'QSO enregistré','udpp.trgRotator':'Commande de rotor','udpp.trgLookup':'Recherche d’indicatif','udpp.transport':'Envoi','udpp.transportUdp':'Message UDP','udpp.transportUrl':'URL (HTTP GET)','udpp.url':'URL','udpp.urlHint':'Les valeurs sont encodées pour l’URL. Les identifiants peuvent s’écrire http://user:pass@hôte/… — stockés tels quels, à réserver à votre réseau local.','udpp.template':'Message','udpp.lineEnd':'Fin de ligne','udpp.lineEndNone':'Aucune','udpp.fieldsAvailable':'Champs de ce déclencheur','udpp.fieldsHint':'Tout autre champ rendra du vide.',
'udpp.svcWsjtLabel':'WSJT-X / JTDX / MSHV','udpp.svcWsjtHint':"Logue automatiquement les QSO FT8/FT4/etc. et remplit l'indicatif de saisie en direct.",'udpp.svcAdifLabel':'Message ADIF (JTAlert, GridTracker)','udpp.svcAdifHint':'Reçoit un seul enregistrement ADIF par paquet et le logue.','udpp.svcN1mmLabel':'N1MM Logger+ (XML contest)','udpp.svcN1mmHint':'Reçoit les QSO de contest sous forme de messages XML.','udpp.svcRemoteLabel':'Indicatif distant (DXHunter, personnalisé)','udpp.svcRemoteHint':'Un court paquet texte contenant juste un indicatif — remplit le champ de saisie.','udpp.svcWsjtLogLabel':'QSO enregistré WSJT-X','udpp.svcWsjtLogHint':'Annonce chaque QSO enregistré sur l’interface UDP WSJT-X — les deux messages que WSJT-X émet lui-même. Pour tout logger qui écoute là plutôt que l’ADIF en texte brut (les sockets UDP supplémentaires de Logger32, par exemple).','udpp.svcDbLabel':"ADIF Message",'udpp.svcDbHint':"Envoie l'ADIF de chaque QSO enregistré vers un écouteur distant (Cloudlog UDP, N1MM…).",'udpp.svcPstLabel':'Fréquence PstRotator','udpp.svcPstHint':"Envoie la fréquence du poste en <PST><FREQUENCY> à chaque changement — règle le tracker de PstRotatorAz sur DXLog.net (port 12040 par défaut).",'udpp.svcN1mmRadioLabel':'N1MM RadioInfo (fréq + mode)','udpp.svcN1mmRadioHint':"Diffuse la fréquence/mode du poste en XML RadioInfo N1MM Logger+ à chaque changement — lu par PstRotator (tracker N1MM) et beaucoup d'autres outils.",'udpp.deleteConfirm':'Supprimer cette connexion UDP ?','udpp.loading':'Chargement…','udpp.intro':"Les connexions permettent à OpsLog de dialoguer avec d'autres logiciels radioamateurs. Les connexions entrantes reçoivent des QSO ou des indicatifs et mettent le journal à jour en direct ; les connexions sortantes notifient d'autres apps quand tu enregistres un QSO localement. Active le multicast pour partager un port avec un autre écouteur sans conflit — nécessaire pour la config WSJT-X 2237 classique.",'udpp.inboundTitle':'Entrant — OpsLog écoute','udpp.outboundTitle':'Sortant — OpsLog envoie','udpp.reloadAll':'Tout recharger','udpp.reloadHint':'Redémarre chaque écouteur activé après une modification manuelle.','udpp.add':'Ajouter','udpp.noConnection':'Aucune connexion.','udpp.unnamed':'(sans nom)','udpp.dialogTitle':'{action} connexion {direction}','udpp.new':'Nouvelle','udpp.edit':'Modifier','udpp.directionInbound':'entrante','udpp.directionOutbound':'sortante','udpp.name':'Nom','udpp.namePhInbound':'Log WSJT-X','udpp.namePhOutbound':'Notification Cloudlog','udpp.serviceType':'Type de service','udpp.port':'Port','udpp.multicast':'Multicast','udpp.multicastGroup':'Groupe multicast','udpp.multicastHint':"Utilise la même adresse de groupe que l'app émettrice. Le défaut WSJT-X est 224.0.0.1.",'udpp.destinationIp':'IP de destination','udpp.enabled':'Activé','udpp.cancel':'Annuler','udpp.save':'Enregistrer',
'fltb.fCallsign':'Callsign','fltb.fDate':'Date / time (UTC)','fltb.fEndDate':'End date / time','fltb.fBand':'Band','fltb.fRxBand':'RX band','fltb.fMode':'Mode','fltb.fSubmode':'Submode','fltb.fFreq':'Frequency (Hz)','fltb.fRxFreq':'RX frequency (Hz)','fltb.fRstSent':'RST sent','fltb.fRstRcvd':'RST rcvd','fltb.fName':'Name','fltb.fQth':'QTH','fltb.fAddress':'Address','fltb.fEmail':'E-mail','fltb.fGrid':'Grid','fltb.fCountry':'Country','fltb.fState':'State','fltb.fCounty':'County','fltb.fDxcc':'DXCC #','fltb.fContinent':'Continent','fltb.fCqz':'CQ zone','fltb.fItuz':'ITU zone','fltb.fIota':'IOTA','fltb.fSota':'SOTA ref','fltb.fPota':'POTA ref','fltb.fWwff':'WWFF ref','fltb.fRig':'Rig','fltb.fAntenna':'Antenna','fltb.fQslSent':'Paper QSL sent status','fltb.fQslSentDate':'Paper QSL sent date','fltb.fQslRcvd':'Paper QSL received status','fltb.fQslRcvdDate':'Paper QSL received date','fltb.fQslSentVia':'QSL envoyée via','fltb.fQslRcvdVia':'QSL reçue via','fltb.fQslVia':'QSL via','fltb.fLotwSent':'LoTW sent status','fltb.fLotwSentDate':'LoTW sent date','fltb.fLotwRcvd':'LoTW received status','fltb.fLotwRcvdDate':'LoTW received date','fltb.fEqslSent':'eQSL sent status','fltb.fEqslSentDate':'eQSL sent date','fltb.fEqslRcvd':'eQSL received status','fltb.fEqslRcvdDate':'eQSL received date','fltb.fQrzSent':'QRZ.com sent status','fltb.fQrzSentDate':'QRZ.com sent date','fltb.fQrzRcvd':'QRZ.com received status','fltb.fQrzRcvdDate':'QRZ.com received date','fltb.fClublogSent':'Club Log sent status','fltb.fClublogSentDate':'Club Log sent date','fltb.fHrdlogSent':'HRDLog sent status','fltb.fHrdlogSentDate':'HRDLog sent date','fltb.fContestId':'Contest ID','fltb.fSerialRcvd':'Serial rcvd','fltb.fSerialSent':'Serial sent','fltb.fPropMode':'Propagation mode','fltb.fSatellite':'Satellite','fltb.fMyCallsign':'Station callsign (my call)','fltb.fOperator':'Operator','fltb.fOwnerCallsign':'Owner callsign','fltb.fMyGrid':'My grid','fltb.fMyCountry':'My country','fltb.fMyState':'My state','fltb.fMyCounty':'My county','fltb.fMyIota':'My IOTA','fltb.fMySota':'My SOTA ref','fltb.fMyPota':'My POTA ref','fltb.fMyWwff':'My WWFF ref','fltb.fMyStreet':'My street','fltb.fMyCity':'My city','fltb.fMyPostal':'My postal code','fltb.fMyRig':'My rig','fltb.fMyAntenna':'My antenna','fltb.fTxPower':'TX power (W)','fltb.fComment':'Comment','fltb.fNotes':'Notes','fltb.opEq':'égal (=)','fltb.opNe':'différent (≠)','fltb.opContains':'contient','fltb.opStartsWith':'commence par','fltb.opEndsWith':'finit par','fltb.opGt':'supérieur à (>)','fltb.opLt':'inférieur à (<)','fltb.opGe':'supérieur ou égal (≥)','fltb.opLe':'inférieur ou égal (≤)','fltb.opEmpty':'est vide','fltb.opIn':'est parmi','fltb.opNotIn':'n est pas parmi','fltb.listPh':'2m, 70cm — séparés par des virgules','fltb.opNotEmpty':"n'est pas vide",'fltb.title':'Filtre QSO','fltb.match':'Correspondance','fltb.all':'TOUS (ET)','fltb.any':'AU MOINS UN (OU)','fltb.loadPreset':'Charger un préréglage…','fltb.noConditions':'Aucune condition — la liste affiche tous les QSO. Ajoutes-en une ci-dessous.','fltb.where':'OÙ','fltb.valuePh':'valeur','fltb.remove':'Retirer','fltb.addCondition':'Ajouter une condition','fltb.presetNamePh':'Nom du préréglage…','fltb.savePreset':'Enregistrer le préréglage','fltb.clear':'Effacer','fltb.cancel':'Annuler','fltb.applyClose':'Appliquer & fermer',
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.