Files
meshtastic-web/apps/web/public/i18n/locales/fi-FI/dialog.json
T
Ben MeadorsandGitHub bbe9a0d5cd feat(protobufs): sync to firmware-current and consume workspace package (#1097)
* feat(protobufs): sync to firmware-current and consume workspace package

Sync the vendored .proto sources to firmware-current (v2.7.25+48), regenerate the v2 TS bindings, and consume the workspace @meshtastic/protobufs (workspace:*) in place of the stale JSR 2.7.20 — finishing the monorepo migration (core was already workspace:*).

Includes the one required breaking-change fix: admin nodedb_reset changed int32 to bool, so resetNodes() now sends value: true.

* build(protobufs): vendor generated bindings for workspace consumers

The package is consumed via workspace:* — its exports point at the TS source, which imports ./dist/meshtastic/*_pb.ts — so the generated output must exist at build time. CI builds web/core with no codegen step and the runners have no buf CLI, so the bindings are vendored here (kept gitignored; lint/format skip them). Regenerate with: pnpm --filter @meshtastic/protobufs gen

* fix(protobufs): clean script removes the actual generated output dir

buf writes bindings to packages/ts/dist, but clean was removing a non-existent root dist — so it never cleaned stale output. Addresses Copilot review feedback.

* refactor: move web app packages/web -> apps/web

Aligns the web app with the apps/web layout (matching the Vercel web-test Root Directory and the SDK-migration direction). Pure directory move plus root config: pnpm-workspace (adds apps/*), vitest projects, root tsconfig reference, and the pr/release-web/nightly workflows. vercel.json moved with the app. Build + 36 validation tests green.

* feat: config fields, module pages, key verification, telemetry capture

Incorporates the firmware-current feature work onto the protobuf foundation: new config fields (Display message bubbles; LoRa fem_lna_mode + serial_hal_only; Telemetry air_quality_screen_enabled); 4 new ModuleConfig pages (TrafficManagement, StatusMessage, TAK, RemoteHardware); the manual Key Verification flow (sendKeyVerification + ClientNotificationDialog stages + Verify Key button); live telemetry capture (nodeDB addDeviceMetrics) and admin hardening (toggleMutedNode, graceful PortNum default); plus the sdk-preview ConfigEditor demo and store/config tests. Build + lint + format + 131 tests green.

* chore: drop #1062 (unsaved-change-detection) to match upstream revert

#1062 was merged to main by accident (per @danditomaso) and is being reverted. Reverse-applied its diff here via 3-way so #1097 stays consistent with where main is headed, while keeping the feature changes layered on the same files (deviceStore/changeRegistry). Build + 131 tests + lint + format green.

* fix(nodes): clean up SNR display in node table and map popup

SNR is a ratio measured in dB, not dBm (which is absolute power); the
node table and map popup both mislabeled it and crammed three values
together: '0dBm/50%/50raw'. The trailing '%/raw' pair was the same
heuristic ((snr+10)*5) shown twice — once clamped, once not.

Render SNR in dB rounded to one decimal, color-coded by a 0-100%
signal-quality heuristic (green/yellow/red), with the quality percentage
as a muted secondary. Drop the redundant raw value. Adds unit.db; this
matches the existing SNRTooltip, which already renders dB.
2026-06-15 13:23:28 -05:00

239 lines
11 KiB
JSON

{
"deleteMessages": {
"description": "Tämä toiminto poistaa kaiken viestihistorian. Toimintoa ei voi perua. Haluatko varmasti jatkaa?",
"title": "Tyhjennä kaikki viestit"
},
"import": {
"description": "Nykyinen LoRa-asetus ylikirjoitetaan.",
"error": {
"invalidUrl": "Virheellinen Meshtastic verkko-osoite"
},
"channelPrefix": "Kanava: ",
"primary": "Ensisijainen ",
"doNotImport": "Tuonti ei onnistu",
"channelName": "Nimi",
"channelSlot": "Paikka",
"channelSetUrl": "Kanavan asetus / QR-koodin URL-osoite",
"useLoraConfig": "Tuo LoRa-asetukset",
"presetDescription": "Nykyiset LoRa-asetukset korvataan uusilla.",
"title": "Tuo kanava-asetukset"
},
"locationResponse": {
"title": "Sijainti: {{identifier}}",
"altitude": "Korkeus: ",
"coordinates": "Koordinaatit: ",
"noCoordinates": "Ei koordinaatteja"
},
"pkiRegenerateDialog": {
"title": "Luodaanko ennalta jaettu avain uudelleen?",
"description": "Haluatko varmasti luoda ennalta jaetun avaimen uudelleen?",
"regenerate": "Luo uudelleen"
},
"addConnection": {
"title": "Lisää yhteys",
"description": "Valitse yhteystyyppi ja täytä tiedot",
"validation": {
"requiresWebBluetooth": "Tämä yhteystyyppi vaatii <0>Web-sarjaportti bluetooth</0> -tuen. Käytä tuettua selainta, kuten Chromea tai Edgeä.",
"requiresWebSerial": "Tämä yhteystyyppi vaatii <0>Web-sarjaportti</0> -tuen. Käytä tuettua selainta, kuten Chromea tai Edgeä.",
"requiresSecureContext": "Tämä sovellus vaatii <0>suojatun yhteyden</0>. Yhdistä käyttämällä HTTPS:ää tai localhostia.",
"additionallyRequiresSecureContext": "Lisäksi se vaatii <0>suojatun yhteyden</0>. Yhdistä käyttämällä HTTPS:ää tai localhostia."
},
"bluetoothConnection": {
"namePlaceholder": "Bluetoothilla yhdistetty laite",
"supported": {
"title": "Verkkoselaimen Bluetooth-tuettu"
},
"notSupported": {
"title": "Verkkoselaimen Bluetooth ei ole tuettu",
"description": "Selaimesi tai laitteesi ei tue Web Bluetooth -toimintoa"
},
"short": "BT: {{deviceName}}",
"long": "Bluetooth-laite",
"device": "Laite",
"selectDevice": "Valitse laite",
"selected": "Bluetooth-laite valittu",
"notSelected": "Ei laitetta valittuna",
"helperText": "Käyttää Meshtasticin Bluetooth-palvelua laitteiden etsintään."
},
"serialConnection": {
"namePlaceholder": "Sarjaliitännällä yhdistetty laite",
"helperText": "Portin valitseminen antaa sovellukselle luvan avata sen yhteyden muodostamista varten.",
"supported": {
"title": "Verkkoselaimen sarjaliitäntä tuettu"
},
"notSupported": {
"title": "Verkkoselaimen sarjaliitäntä ei ole tuettu",
"description": "Selaimesi tai laitteesi ei tue Web Serial -toimintoa"
},
"portSelected": {
"title": "Sarjaportti valittu",
"description": "Porttioikeudet myönnetty."
},
"port": "Portti",
"selectPort": "Valitse portti",
"deviceName": "USB {{vendorId}}:{{productId}}",
"notSelected": "Ei porttia valittuna"
},
"httpConnection": {
"namePlaceholder": "HTTP-yhteydellä toimiva laite",
"inputPlaceholder": "192.168.1.10 tai meshtastic.local",
"heading": "URL tai IP",
"useHttps": "Käytä HTTTPS",
"invalidUrl": {
"title": "Virheellinen URL-osoite",
"description": "Anna kelvollinen HTTP- tai HTTPS-osoite."
},
"connectionTest": {
"description": "Testaa yhteys ennen tallennusta varmistaaksesi, että laite on tavoitettavissa.",
"button": {
"loading": "Testataan...",
"label": "Testaa yhteys"
},
"reachable": "Yhteys toimii",
"notReachable": "Yhteys ei toimi",
"success": {
"title": "Yhteystesti onnistui",
"description": "Laite vaikuttaa olevan tavoitettavissa."
},
"failure": {
"title": "Yhteystesti epäonnistui",
"description": "Laitetta ei voitu tavoittaa. Tarkista URL-osoite ja yritä uudelleen."
}
}
}
},
"nodeDetails": {
"message": "Viesti",
"requestPosition": "Pyydä sijaintia",
"traceRoute": "Reitinselvitys",
"airTxUtilization": "Ilmatien TX käyttöaste",
"allRawMetrics": "Kaikki raakatiedot:",
"batteryLevel": "Akun varaus",
"channelUtilization": "Kanavan käyttöaste",
"details": "Tiedot:",
"deviceMetrics": "Laitteen mittausloki:",
"hardware": "Laitteisto: ",
"lastHeard": "Viimeksi kuultu: ",
"nodeHexPrefix": "Laitteen Hex: ",
"nodeNumber": "Laitteen numero: ",
"position": "Sijainti:",
"role": "Rooli: ",
"uptime": "Käyttöaika: ",
"voltage": "Jännite",
"title": "Tiedot laitteelle {{identifier}}",
"ignoreNode": "Älä huomioi laitetta",
"removeNode": "Poista laite",
"unignoreNode": "Poista laitteen ohitus käytöstä",
"security": "Turvallisuus:",
"publicKey": "Julkinen avain: ",
"messageable": "Viestittävissä: ",
"KeyManuallyVerifiedTrue": "Julkinen avain on vahvistettu manuaalisesti",
"KeyManuallyVerifiedFalse": "Julkista avainta ei ole vahvistettu manuaalisesti"
},
"pkiBackup": {
"loseKeysWarning": "Jos menetät avaimesi, sinun täytyy palauttaa laite tehdasasetuksiin.",
"secureBackup": "On tärkeää varmuuskopioida julkiset ja yksityiset avaimet ja säilyttää niiden varmuuskopioita turvallisesti!",
"footer": "=== AVAIMIEN LOPPU ===",
"header": "=== MESHTASTIC AVAIMET {{longName}} ({{shortName}}) LAITTEELLE ===",
"privateKey": "Yksityinen avain:",
"publicKey": "Julkinen avain:",
"fileName": "meshtastic_avaimet_{{longName}}_{{shortName}}.txt",
"title": "Varmuuskopioi avaimet"
},
"pkiBackupReminder": {
"description": "Suosittelemme avaintietojen säännöllistä varmuuskopiointia. Haluatko varmuuskopioida nyt?",
"title": "Varmuuskopion Muistutus",
"remindLaterPrefix": "Muistuta minua",
"remindNever": "Älä muistuta minua koskaan",
"backupNow": "Varmuuskopioi nyt"
},
"pkiRegenerate": {
"description": "Haluatko varmasti luoda avainparin uudelleen?",
"title": "Luo avainpari uudelleen"
},
"qr": {
"addChannels": "Lisää kanavia",
"replaceChannels": "Korvaa kanavia",
"description": "Nykyinen LoRa-kokoonpano tullaan myös jakamaan.",
"sharableUrl": "Jaettava URL",
"title": "Generoi QR-koodi"
},
"reboot": {
"title": "Käynnistä laite uudelleen",
"description": "Käynnistä laite uudelleen heti tai ajasta sen uudelleenkäynnistys. Halutessasi voit valita käynnistyksen OTA-tilaan (Over-the-Air ohjelmistopäivitystilaan).",
"ota": "Käynnistä uudelleen OTA-tilaan",
"enterDelay": "Aseta viive",
"scheduled": "Uudelleenkäynnistys on ajastettu",
"schedule": "Ajasta uudelleen käynnistys",
"now": "Uudelleen käynnistä nyt",
"cancel": "Peruuta ajastettu uudelleen käynnistys"
},
"refreshKeys": {
"description": {
"acceptNewKeys": "Tämä poistaa laitteen laitteesta ja pyytää uusia avaimia.",
"keyMismatchReasonSuffix": ". Tämä johtuu siitä, että etälaitteen nykyinen julkinen avain ei vastaa aiemmin tallennettua avainta tälle laitteelle.",
"unableToSendDmPrefix": "Laitteesi ei pysty lähettämään suoraa viestiä laitteelle: "
},
"acceptNewKeys": "Hyväksy uudet avaimet",
"title": "Avaimet eivät täsmää - {{identifier}}"
},
"removeNode": {
"description": "Haluatko varmasti poistaa tämän laitteen?",
"title": "Poista laite?"
},
"shutdown": {
"title": "Ajasta sammutus",
"description": "Sammuta yhdistetty laite x minuutin päästä."
},
"traceRoute": {
"routeToDestination": "Reitin määränpää:",
"routeBack": "Reitti takaisin:"
},
"tracerouteResponse": {
"title": "Reitinselvitys: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Kyllä, tiedän mitä teen",
"conjunction": " ja blogikirjoitukset ",
"postamble": " ja ymmärrän roolin muuttamisen vaikutukset.",
"preamble": "Olen lukenut ",
"choosingRightDeviceRole": "Valitse laitteelle oikea rooli",
"deviceRoleDocumentation": "Roolien dokumentaatio laitteelle",
"title": "Oletko varma?"
},
"managedMode": {
"confirmUnderstanding": "Kyllä, tiedän mitä teen",
"title": "Oletko varma?",
"description": "Hallintatilan käyttöönotto estää asiakassovelluksia (mukaan lukien verkkoselain) tekemästä muutoksia laitteen asetuksiin. Kun hallintatila on käytössä, laitteen asetuksia voidaan muuttaa ainoastaan etähallintaviesteillä (Remote Admin). Tämä asetus ei ole pakollinen etähallintaan."
},
"clientNotification": {
"title": "Sovellusilmoitukset",
"TraceRoute can only be sent once every 30 seconds": "Reitinselvityksen voi tehdä kerran 30:ssä sekunnissa",
"Compromised keys were detected and regenerated.": "Turvallisuudeltaan vaarantuneet avaimet havaittiin ja ne generoitiin uudestaan."
},
"resetNodeDb": {
"title": "Nollaa laitteen tietokanta",
"description": "Tämä poistaa kaikki laitteet tietokannasta ja tyhjentää kaiken viestihistorian päätelaitteen sovelluksesta. Tätä toimintoa ei voi perua. Haluatko varmasti jatkaa?",
"confirm": "Nollaa laitteen tietokanta",
"failedTitle": "Tietokannan nollaamisessa tapahtui virhe. Yritä uudelleen."
},
"clearAllStores": {
"title": "Tyhjennä kaikki paikallisesta tallennustilasta",
"description": "Tämä poistaa kaiken paikallisesti tallennetun tiedon, mukaan lukien viestihistorian ja laitetietokannat kaikilta aiemmin yhdistetyiltä laitteilta. Toiminnon jälkeen sinun on muodostettava yhteys omaan laitteeseesi uudelleen. Tätä toimintoa ei voi perua. Haluatko varmasti jatkaa?",
"confirm": "Tyhjennä kaikki paikallisesta tallennustilasta",
"failedTitle": "Paikallisen tallennustilan tyhjentämisessä tapahtui virhe. Yritä uudelleen."
},
"factoryResetDevice": {
"title": "Palauta tehdasasetukset",
"description": "Tämä palauttaa yhdistetyn laitteen tehdasasetuksiin ja poistaa kaikki laitteen asetukset, tiedot, laitteet ja viestit, jotka on tallennettu asiakasohjelmaan. Tätä toimintoa ei voi perua. Haluatko varmasti jatkaa?",
"confirm": "Palauta tehdasasetukset",
"failedTitle": "Tehdasasetusten palauttamisessa tapahtui virhe. Yritä uudelleen."
},
"factoryResetConfig": {
"title": "Tehdasasetusten palautusasetukset",
"description": "Tämä palauttaa yhdistetyn laitteen asetukset tehdasasetuksiin ja poistaa kaikki laitteen nykyiset asetukset. Tätä toimintoa ei voi perua. Haluatko varmasti jatkaa?",
"confirm": "Tehdasasetusten palautusasetukset",
"failedTitle": "Tehdasasetusten palauttamisessa tapahtui virhe. Yritä uudelleen."
}
}