Files
meshtastic-web/apps/web/public/i18n/locales/de-DE/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": "Diese Aktion wird den Nachrichtenverlauf löschen. Dies kann nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie fortfahren möchten?",
"title": "Alle Nachrichten löschen"
},
"import": {
"description": "Die aktuelle LoRa Einstellung wird überschrieben.",
"error": {
"invalidUrl": "Ungültige Meshtastic URL"
},
"channelPrefix": "Kanal: ",
"primary": "Primär ",
"doNotImport": "Nicht importieren",
"channelName": "Name",
"channelSlot": "Position",
"channelSetUrl": "Kanalsammlung / QR-Code URL",
"useLoraConfig": "LoRa Konfiguration importieren",
"presetDescription": "Die aktuelle LoRa Konfiguration wird ersetzt.",
"title": "Kanalsammlung importieren"
},
"locationResponse": {
"title": "Standort: {{identifier}}",
"altitude": "Höhe: ",
"coordinates": "Koordinaten: ",
"noCoordinates": "Keine Koordinaten"
},
"pkiRegenerateDialog": {
"title": "Vorab verteilten Schlüssel (PSK) neu erstellen?",
"description": "Sind Sie sicher, dass Sie den vorab verteilten Schlüssel neu erstellen möchten?",
"regenerate": "Neu erstellen"
},
"addConnection": {
"title": "Verbindung hinzufügen",
"description": "Wählen Sie einen Verbindungstyp aus und geben Sie die Details ein",
"validation": {
"requiresWebBluetooth": "Dieser Verbindungstyp erfordert <0>Bluetooth</0> im Browser. Bitte verwenden Sie einen unterstützten Browser, wie Chrome oder Edge.",
"requiresWebSerial": "Dieser Verbindungstyp erfordert <0>Serielle Schnittstelle</0> im Browser. Bitte verwenden Sie einen unterstützten Browser, wie Chrome oder Edge.",
"requiresSecureContext": "Diese Anwendung erfordert einen <0>sicheren Kontext</0>. Bitte verbinden Sie sich über HTTPS oder localhost.",
"additionallyRequiresSecureContext": "Zusätzlich erfordert es einen <0>sicheren Kontext</0>. Bitte verbinden Sie sich über HTTPS oder localhost."
},
"bluetoothConnection": {
"namePlaceholder": "Mein Bluetooth Knoten",
"supported": {
"title": "Web Bluetooth wird unterstützt"
},
"notSupported": {
"title": "Web Bluetooth wird nicht unterstützt",
"description": "Ihr Browser oder Ihr Gerät unterstützt kein Bluetooth im Web"
},
"short": "BT: {{deviceName}}",
"long": "Bluetooth Gerät",
"device": "Gerät",
"selectDevice": "Gerät auswählen",
"selected": "Bluetooth Gerät ausgewählt",
"notSelected": "Kein Gerät ausgewählt",
"helperText": "Verwendet den Meshtastic Bluetooth Dienst zur Erkennung."
},
"serialConnection": {
"namePlaceholder": "Mein serieller Knoten",
"helperText": "Die Auswahl eines Anschlusses erteilt der App die Berechtigung, diesen zu öffnen und eine Verbindung herzustellen.",
"supported": {
"title": "Web Seriell unterstützt"
},
"notSupported": {
"title": "Web Seriell nicht unterstützt",
"description": "Ihr Browser oder Ihr Gerät unterstützt kein Web Seriell"
},
"portSelected": {
"title": "Serieller Anschluss ausgewählt",
"description": "Anschlussberechtigungen gewährt."
},
"port": "Anschluss",
"selectPort": "Anschluss auswählen",
"deviceName": "USB {{vendorId}}:{{productId}}",
"notSelected": "Kein Anschluss ausgewählt"
},
"httpConnection": {
"namePlaceholder": "Mein HTTP Knoten",
"inputPlaceholder": "192.168.1.10 oder meshtastic.local",
"heading": "URL oder IP",
"useHttps": "HTTPS verwenden",
"invalidUrl": {
"title": "Ungültige URL",
"description": "Bitte geben Sie eine gültige HTTP oder HTTPS URL ein."
},
"connectionTest": {
"description": "Testen Sie die Verbindung, bevor Sie speichern um zu überprüfen, dass das Gerät erreichbar ist.",
"button": {
"loading": "Wird getestet...",
"label": "Verbindung testen"
},
"reachable": "Erreichbar",
"notReachable": "Nicht erreichbar",
"success": {
"title": "Verbindungstest erfolgreich",
"description": "Das Gerät scheint erreichbar zu sein."
},
"failure": {
"title": "Verbindungstest fehlgeschlagen",
"description": "Das Gerät konnte nicht erreicht werden. Überprüfen Sie die URL und versuchen Sie es erneut."
}
}
}
},
"nodeDetails": {
"message": "Nachricht",
"requestPosition": "Standort anfordern",
"traceRoute": "Route verfolgen",
"airTxUtilization": "Auslastung Sendezeit",
"allRawMetrics": "Alle Rohdaten",
"batteryLevel": "Akkustand",
"channelUtilization": "Kanalauslastung",
"details": "Details:",
"deviceMetrics": "Gerätekennzahlen:",
"hardware": "Hardware: ",
"lastHeard": "Zuletzt gehört: ",
"nodeHexPrefix": "Knoten ID:",
"nodeNumber": "Knotennummer: ",
"position": "Standort:",
"role": "Rolle: ",
"uptime": "Laufzeit: ",
"voltage": "Spannung",
"title": "Knotendetails für {{identifier}}",
"ignoreNode": "Knoten ignorieren",
"removeNode": "Knoten entfernen",
"unignoreNode": "Knoten akzeptieren",
"security": "Sicherheit:",
"publicKey": "Öffentlicher Schlüssel:",
"messageable": "Ansprechbar:",
"KeyManuallyVerifiedTrue": "Öffentlicher Schlüssel wurde manuell geprüft",
"KeyManuallyVerifiedFalse": "Öffentlicher Schlüssel ist nicht manuell geprüft"
},
"pkiBackup": {
"loseKeysWarning": "Wenn Sie Ihre Schlüssel verlieren, müssen Sie Ihr Gerät zurücksetzen.",
"secureBackup": "Es ist wichtig, dass Sie Ihre öffentlichen und privaten Schlüssel sichern und diese sicher speichern!",
"footer": "=== END OF KEYS ===",
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
"privateKey": "Privater Schlüssel:",
"publicKey": "Öffentlicher Schlüssel:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Schlüssel sichern"
},
"pkiBackupReminder": {
"description": "Wir empfehlen die regelmäßige Sicherung Ihrer Schlüsseldaten. Möchten Sie jetzt sicheren?",
"title": "Erinnerungen für Sicherungen",
"remindLaterPrefix": "Erinnerung in:",
"remindNever": "Nie erinnern",
"backupNow": "Jetzt sichern"
},
"pkiRegenerate": {
"description": "Sind Sie sicher, dass Sie Schlüsselpaar neu erstellen möchten?",
"title": "Schlüsselpaar neu erstellen"
},
"qr": {
"addChannels": "Kanäle hinzufügen",
"replaceChannels": "Kanäle ersetzen",
"description": "Die aktuelle LoRa Einstellung wird ebenfalls geteilt.",
"sharableUrl": "Teilbare URL",
"title": "QR Code Erzeugen"
},
"reboot": {
"title": "Gerät neustarten",
"description": "Starten Sie jetzt neu oder planen Sie einen Neustart des verbundenen Knotens. Optional können Sie einen Neustart in den OTA (Over-the-Air) Modus wählen.",
"ota": "Neustart in den OTA Modus",
"enterDelay": "Verzögerung eingeben",
"scheduled": "Neustart wurde geplant",
"schedule": "Neustart planen",
"now": "Jetzt neustarten",
"cancel": "Geplanten Neustart abbrechen"
},
"refreshKeys": {
"description": {
"acceptNewKeys": "Dies entfernt den Knoten vom Gerät und fordert neue Schlüssel an.",
"keyMismatchReasonSuffix": ". Dies liegt daran, dass der aktuelle öffentliche Schlüssel des entfernten Knotens nicht mit dem zuvor gespeicherten Schlüssel für diesen Knoten übereinstimmt.",
"unableToSendDmPrefix": "Ihr Knoten kann keine Direktnachricht an folgenden Knoten senden: "
},
"acceptNewKeys": "Neue Schlüssel akzeptieren",
"title": "Schlüsselfehler - {{identifier}}"
},
"removeNode": {
"description": "Sind Sie sicher, dass Sie diesen Knoten entfernen möchten?",
"title": "Knoten entfernen?"
},
"shutdown": {
"title": "Herunterfahren planen",
"description": "Schaltet den verbundenen Knoten nach x Minuten aus."
},
"traceRoute": {
"routeToDestination": "Route zum Ziel:",
"routeBack": "Route zurück:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Ja, ich weiß, was ich tue!",
"conjunction": " und der Blog-Beitrag über ",
"postamble": " und verstehen die Auswirkungen einer Veränderung der Rolle.",
"preamble": "Ich habe die",
"choosingRightDeviceRole": "Wahl der richtigen Geräterolle",
"deviceRoleDocumentation": "Dokumentation der Geräterolle",
"title": "Sind Sie sicher?"
},
"managedMode": {
"confirmUnderstanding": "Ja, ich weiß, was ich tue!",
"title": "Sind Sie sicher?",
"description": "Das Aktivieren des verwalteten Modus blockiert das Schreiben der Einstellungen in das Funkgerät durch alle Anwendungen (einschließlich der Webanwendung). Einmal aktiviert, können die Einstellungen nur durch administrative Nachrichten geändert werden. Diese Einstellung ist für die Fernverwaltung von abgesetzten Knoten nicht erforderlich."
},
"clientNotification": {
"title": "Warnmeldung",
"TraceRoute can only be sent once every 30 seconds": "TraceRoute kann nur einmal alle 30 Sekunden versendet werden.",
"Compromised keys were detected and regenerated.": "Kompromittierte Schlüssel wurden erkannt und neu generiert."
},
"resetNodeDb": {
"title": "Knotendatenbank zurücksetzen",
"description": "Dadurch werden alle Knoten aus der Knotendatenbank des verbundenen Geräts und der gesamte Nachrichtenverlauf im Client gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden. Möchten Sie wirklich fortfahren?",
"confirm": "Knotendatenbank zurücksetzen",
"failedTitle": "Beim Zurücksetzen der Knoten-Datenbank ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut."
},
"clearAllStores": {
"title": "Lösche den gesamten lokalen Speicher",
"description": "Dadurch werden alle lokal gespeicherten Daten gelöscht, einschließlich des Nachrichtenverlaufs und der Knotendatenbanken aller zuvor verbundenen Geräte. Nach Abschluss des Vorgangs müssen Sie die Verbindung zu Ihrem Knoten erneut herstellen. Dieser Vorgang kann nicht rückgängig gemacht werden. Möchten Sie wirklich fortfahren?",
"confirm": "Lösche den gesamten lokalen Speicher",
"failedTitle": "Beim Löschen des lokalen Speichers ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut."
},
"factoryResetDevice": {
"title": "Gerät auf Werkseinstellungen zurücksetzen",
"description": "Dadurch wird das verbundene Gerät auf die Werkseinstellungen zurückgesetzt. Alle Konfigurationen und Daten auf dem Gerät sowie alle im Client gespeicherten Knoten und Nachrichten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden. Möchten Sie wirklich fortfahren?",
"confirm": "Gerät auf Werkseinstellungen zurücksetzen",
"failedTitle": "Beim Zurücksetzen auf die Werkseinstellungen ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut."
},
"factoryResetConfig": {
"title": "Auf Werkseinstellungen zurücksetzen",
"description": "Dadurch wird die Konfiguration des verbundenen Geräts auf die Werkseinstellungen zurückgesetzt und alle Konfigurationen auf dem Gerät gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden. Möchten Sie wirklich fortfahren?",
"confirm": "Auf Werkseinstellungen zurücksetzen",
"failedTitle": "Beim Zurücksetzen auf die Werkseinstellungen ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut."
}
}