feat(sat): set it up in Settings, work the pass in the tab
Two things belong in different places, and they were in one. Settings → Satellites now holds the setup: which satellites to follow — the same two-column shape as the awards, for the same reason, since a feed carries two hundred birds and an operator works six — and the orbital elements, their age, the fetch, and pasting your own. Following none still means every satellite with both elements and a frequency plan, so somebody who has not chosen yet is not handed an empty tab. The panel keeps only what a pass needs. A countdown to AOS, or to LOS once it is up, because that is the number that decides whether you sit down; a bar for where in the pass you are, since mid-pass the useful question is not the clock but whether you are past the peak; rise, peak and set with compass directions, because "rises SW" is a direction to look in and 213° is arithmetic. Distance, altitude and footprint. And approaching or receding, which is the sign of the whole Doppler correction and the only thing that explains why the frequencies are moving the way they are. The countdowns run in the browser from two timestamps. Predicting a pass steps the orbit across a day thirty seconds at a time, which is not something to do once a second for a clock the page can keep itself.
This commit is contained in:
@@ -588,6 +588,13 @@ const en: Dict = {
|
||||
'sat.trackingDown': 'Tracking the downlink only — this radio has one receiver.',
|
||||
'sat.downlinkOnly': 'downlink only', 'sat.nominal': 'nominal',
|
||||
'sat.antenna': 'Antenna', 'sat.rotCommanded': '(commanded — this controller does not report back)',
|
||||
'sat.aos': 'Rises in', 'sat.los': 'Sets in', 'sat.rise': 'Rise', 'sat.peak': 'Peak', 'sat.set': 'Set',
|
||||
'sat.range': 'Distance', 'sat.altitude': 'Altitude', 'sat.footprint': 'Footprint',
|
||||
'sat.approaching': 'approaching', 'sat.receding': 'receding', 'sat.below': 'below the horizon',
|
||||
'sat.noPassSoon': 'No pass in the next day — check the elements, or your minimum elevation.',
|
||||
'sat.geoHint': 'Geostationary: always there, no Doppler to correct. Point once and leave it.',
|
||||
'sat.noneFollowed': 'no satellite followed — choose some in Settings',
|
||||
'sat.tleStale': 'elements are old — refresh them in Settings',
|
||||
'sec.satellite': 'Satellites',
|
||||
'satset.hint': 'Where the antenna is, and the machine that points it. The satellites you follow and the frequency plan are in the Satellites tab.',
|
||||
'satset.grid': 'Locator', 'satset.gridPlaceholder': 'your station’s',
|
||||
@@ -603,6 +610,17 @@ const en: Dict = {
|
||||
'satset.rotRangeHint': 'A 450° rotator follows a pass straight through north instead of unwinding, so it is used that way when it can be. “Start above” leaves the mast alone until the satellite is worth pointing at; “move by” is the smallest change worth a command — keep it inside your beamwidth.',
|
||||
'satset.rotPark': 'Park at north, elevation zero, when tracking stops',
|
||||
'satset.rotTest': 'Test the rotator', 'satset.rotTesting': 'asking the controller…',
|
||||
'satset.elements': 'Orbital elements',
|
||||
'satset.tleAge': '{n} satellites, {h} h old', 'satset.tleNone': 'no elements yet', 'satset.tleCustom': '{n} of your own',
|
||||
'satset.tleFetch': 'Fetch now', 'satset.tleFetching': 'fetching…', 'satset.tleFetched': '{n} satellites.',
|
||||
'satset.tleHint': 'From Celestrak’s amateur list, with a mirror behind it. They are kept on disk, so the Satellites tab is full the moment it opens even with no internet — a set a few days old still predicts tonight’s passes perfectly well.',
|
||||
'satset.tlePaste': 'Paste elements…', 'satset.tlePasteAdd': 'Add these', 'satset.tleAdded': '{n} satellites added.',
|
||||
'satset.tlePastePlaceholder': 'ISS (ZARYA)\n1 25544U 98067A …\n2 25544 51.6…',
|
||||
'satset.tlePasteHint': 'For a satellite no feed carries yet. Kept in their own file, so a refresh never wipes them.',
|
||||
'satset.follow': 'Satellites to follow',
|
||||
'satset.followHint': 'The Satellites tab and the pass list show these, and nothing else. Follow none and every satellite that has both elements and a frequency plan is shown.',
|
||||
'satset.available': 'Available', 'satset.followed': 'Followed', 'satset.noneFollowed': 'None — every usable satellite is shown.',
|
||||
'satset.allFollowed': 'All of them are followed.', 'satset.search': 'Search…', 'satset.withPlanOnly': 'Only those with a frequency plan',
|
||||
};
|
||||
|
||||
const fr: Dict = {
|
||||
@@ -1154,6 +1172,13 @@ const fr: Dict = {
|
||||
'sat.trackingDown': 'Seule la descente est suivie — cette radio n’a qu’un récepteur.',
|
||||
'sat.downlinkOnly': 'descente seule', 'sat.nominal': 'nominal',
|
||||
'sat.antenna': 'Antenne', 'sat.rotCommanded': '(commandé — ce contrôleur ne répond pas)',
|
||||
'sat.aos': 'Lever dans', 'sat.los': 'Coucher dans', 'sat.rise': 'Lever', 'sat.peak': 'Culmination', 'sat.set': 'Coucher',
|
||||
'sat.range': 'Distance', 'sat.altitude': 'Altitude', 'sat.footprint': 'Empreinte',
|
||||
'sat.approaching': 'se rapproche', 'sat.receding': 's’éloigne', 'sat.below': 'sous l’horizon',
|
||||
'sat.noPassSoon': 'Aucun passage dans les 24 h — vérifiez les éléments, ou votre élévation minimale.',
|
||||
'sat.geoHint': 'Géostationnaire : toujours là, aucun Doppler à corriger. On pointe une fois et on n’y touche plus.',
|
||||
'sat.noneFollowed': 'aucun satellite suivi — choisissez-en dans les Réglages',
|
||||
'sat.tleStale': 'éléments anciens — actualisez-les dans les Réglages',
|
||||
'sec.satellite': 'Satellites',
|
||||
'satset.hint': 'Où se trouve l’antenne, et la machine qui la pointe. Les satellites suivis et le plan de fréquences sont dans l’onglet Satellites.',
|
||||
'satset.grid': 'Locator', 'satset.gridPlaceholder': 'celui de la station',
|
||||
@@ -1169,6 +1194,17 @@ const fr: Dict = {
|
||||
'satset.rotRangeHint': 'Un rotor 450° suit un passage à travers le nord sans se dérouler ; il est donc utilisé ainsi quand il le peut. « Démarrer au-dessus de » laisse le pylône tranquille tant que le satellite ne mérite pas d’être pointé ; « déplacer par » est le plus petit écart qui vaut une commande — gardez-le à l’intérieur de votre ouverture de faisceau.',
|
||||
'satset.rotPark': 'Ranger au nord, élévation zéro, à l’arrêt du suivi',
|
||||
'satset.rotTest': 'Tester le rotor', 'satset.rotTesting': 'interrogation du contrôleur…',
|
||||
'satset.elements': 'Éléments orbitaux',
|
||||
'satset.tleAge': '{n} satellites, {h} h', 'satset.tleNone': 'aucun élément', 'satset.tleCustom': 'dont {n} à vous',
|
||||
'satset.tleFetch': 'Récupérer', 'satset.tleFetching': 'récupération…', 'satset.tleFetched': '{n} satellites.',
|
||||
'satset.tleHint': 'Depuis la liste amateur de Celestrak, avec un miroir derrière. Ils sont conservés sur disque : l’onglet Satellites est rempli dès son ouverture, même sans internet — un jeu vieux de quelques jours prédit très bien les passages de ce soir.',
|
||||
'satset.tlePaste': 'Coller des éléments…', 'satset.tlePasteAdd': 'Ajouter', 'satset.tleAdded': '{n} satellites ajoutés.',
|
||||
'satset.tlePastePlaceholder': 'ISS (ZARYA)\n1 25544U 98067A …\n2 25544 51.6…',
|
||||
'satset.tlePasteHint': 'Pour un satellite qu’aucun flux ne diffuse encore. Conservés dans leur propre fichier : une mise à jour ne les efface jamais.',
|
||||
'satset.follow': 'Satellites à suivre',
|
||||
'satset.followHint': 'L’onglet Satellites et la liste des passages n’affichent que ceux-ci. N’en suivez aucun et tous les satellites ayant à la fois des éléments et un plan de fréquences sont affichés.',
|
||||
'satset.available': 'Disponibles', 'satset.followed': 'Suivis', 'satset.noneFollowed': 'Aucun — tous les satellites utilisables sont affichés.',
|
||||
'satset.allFollowed': 'Tous sont suivis.', 'satset.search': 'Rechercher…', 'satset.withPlanOnly': 'Seulement ceux avec un plan de fréquences',
|
||||
};
|
||||
|
||||
const dicts: Record<Lang, Dict> = { en, fr };
|
||||
|
||||
Reference in New Issue
Block a user