Files
meshtastic-web/apps/web/public/i18n/locales/fr-FR/ui.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

231 lines
6.2 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"navigation": {
"title": "Navigation",
"messages": "Messages",
"map": "Carte",
"settings": "Réglages",
"channels": "Canaux",
"radioConfig": "Configuration radio",
"deviceConfig": "Configuration de l'appareil",
"moduleConfig": "Configuration du module",
"manageConnections": "Manage Connections",
"nodes": "Noeuds"
},
"app": {
"title": "Meshtastic",
"logo": "Logo Meshtastic"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Ouvrir la barre latérale",
"close": "Fermer la barre latérale"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "Micrologiciel",
"version": "v{{version}}",
"buildDate": "Date de compilation : {{date}}"
}
}
},
"batteryStatus": {
"charging": "{{level}}% en charge",
"pluggedIn": "Branché",
"title": "Batterie"
},
"search": {
"nodes": "Recherche de nœuds...",
"channels": "Rechercher des canaux...",
"commandPalette": "Rechercher des commandes..."
},
"toast": {
"positionRequestSent": {
"title": "Requête de position envoyée."
},
"requestingPosition": {
"title": "Requête de position en cours, veuillez patienter..."
},
"sendingTraceroute": {
"title": "Envoi du traceroute en cours, veuillez patienter..."
},
"tracerouteSent": {
"title": "Traceroute envoyé."
},
"savedChannel": {
"title": "Canal enregistré : {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "La discussion utilise un chiffrement PKI."
},
"pskEncryption": {
"title": "La discussion utilise un chiffrement PSK."
}
},
"configSaveError": {
"title": "Erreur lors de l’enregistrement",
"description": "Une erreur est survenue lors de l’enregistrement de la configuration."
},
"validationError": {
"title": "Des erreurs de configuration existent",
"description": "Veuillez corriger les erreurs de configuration avant d’enregistrer."
},
"saveSuccess": {
"title": "Configuration enregistrée",
"description": "Le changement de configuration {{case}} a été enregistré."
},
"saveAllSuccess": {
"title": "Saved",
"description": "All configuration changes have been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} des favoris.",
"action": {
"added": "Ajouté",
"removed": "Supprimé",
"to": "à",
"from": "de"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} de la liste d’ignorés",
"action": {
"added": "Ajouté",
"removed": "Supprimé",
"to": "à",
"from": "de"
}
}
},
"notifications": {
"copied": {
"label": "Copié !"
},
"copyToClipboard": {
"label": "Copier dans le presse-papiers"
},
"hidePassword": {
"label": "Masquer le mot de passe"
},
"showPassword": {
"label": "Afficher le mot de passe"
},
"deliveryStatus": {
"delivered": "Distribué",
"failed": "Échec de l'envoi",
"waiting": "En attente . . .",
"unknown": "Inconnu"
}
},
"general": {
"label": "Général"
},
"hardware": {
"label": "Matériel"
},
"metrics": {
"label": "Métriques"
},
"role": {
"label": "Rôle"
},
"filter": {
"label": "Filtre"
},
"advanced": {
"label": "Avancé"
},
"clearInput": {
"label": "Effacer la saisie"
},
"resetFilters": {
"label": "Réinitialiser les filtres"
},
"nodeName": {
"label": "Nom/numéro de nœud",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Utilisation du temps d’antenne (%)",
"short": "Airtime Util. (%)"
},
"batteryLevel": {
"label": "Niveau de batterie (%)",
"labelText": "Niveau de batterie (%) : {{value}}"
},
"batteryVoltage": {
"label": "Tension de batterie (V)",
"title": "Tension"
},
"channelUtilization": {
"label": "Utilisation du canal (%)",
"short": "Channel Util. (%)"
},
"hops": {
"direct": "Direk",
"label": "Nombre de sauts",
"text": "Nombre de sauts : {{value}}"
},
"lastHeard": {
"label": "Dernière écoute",
"labelText": "Dernier signal reçu : {{value}}",
"nowLabel": "Maintenant"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favoris"
},
"hide": {
"label": "Masquer"
},
"showOnly": {
"label": "Montrer seulement"
},
"viaMqtt": {
"label": "Connecté via MQTT"
},
"hopsUnknown": {
"label": "Nombre de sauts inconnu"
},
"showUnheard": {
"label": "Jamais entendu"
},
"language": {
"label": "Langue",
"changeLanguage": "Changer la langue"
},
"theme": {
"dark": "Sombre",
"light": "Clair",
"system": "Automatique",
"changeTheme": "Changer le schéma de couleurs"
},
"errorPage": {
"title": "C'est un peu embarrassant...",
"description1": "Nous sommes vraiment désolés mais une erreur est survenue dans le client web qui l'a fait planter. <br /> Ce n'est pas censé se produire, et nous travaillons dur pour le corriger.",
"description2": "La meilleure façon d'éviter que cela ne se reproduise à vous ou à qui que ce soit d'autre consiste à nous signaler le problème.",
"reportInstructions": "Veuillez inclure les informations suivantes dans votre rapport :",
"reportSteps": {
"step1": "Ce que vous faisiez lorsque l'erreur s'est produite",
"step2": "Ce que vous vous attendiez à se produire",
"step3": "Ce qui s'est réellement passé",
"step4": "Toute autre information pertinente"
},
"reportLink": "Vous pouvez signaler le problème à notre <0>GitHub</0>",
"connectionsLink": "Return to the <0>connections</0>",
"detailsSummary": "Détails de l'erreur",
"errorMessageLabel": "Message d'erreur :",
"stackTraceLabel": "État de la pile :",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Propulsé par <0>▲ Vercel</0> | Meshtastic® est une marque déposée de Meshtastic LLC. | <1>Informations légales</1>",
"commitSha": "SHA : {{sha}}"
}
}