From 30cc457827ab111354846b499a20697dd31c1e54 Mon Sep 17 00:00:00 2001
From: DevBot NetBird <91386968+netbirddev@users.noreply.github.com>
Date: Tue, 6 Oct 2026 18:15:44 +0200
Subject: [PATCH] New translations common.json (French)
[ci skip]
---
client/ui/i18n/locales/fr/common.json | 1389 ++++++++++++++++---------
1 file changed, 926 insertions(+), 463 deletions(-)
diff --git a/client/ui/i18n/locales/fr/common.json b/client/ui/i18n/locales/fr/common.json
index f9961d864..256c54857 100644
--- a/client/ui/i18n/locales/fr/common.json
+++ b/client/ui/i18n/locales/fr/common.json
@@ -1,555 +1,739 @@
{
"tray.tooltip": {
- "message": "NetBird"
+ "message": "NetBird",
+ "description": "Hover tooltip on the system-tray / menu-bar icon. Brand name — do not translate."
},
"tray.status.disconnected": {
- "message": "Déconnecté"
+ "message": "Déconnecté",
+ "description": "Connection status surfaced through the tray icon: the client is not connected to the network."
},
"tray.status.daemonUnavailable": {
- "message": "Non démarré"
+ "message": "Non démarré",
+ "description": "Tray status: the background NetBird service (daemon) is not running."
},
"tray.status.error": {
- "message": "Erreur"
+ "message": "Erreur",
+ "description": "Tray status: the client is in an error state."
},
"tray.status.connected": {
- "message": "Connecté"
+ "message": "Connecté",
+ "description": "Tray status: connected to the NetBird network."
},
"tray.status.connecting": {
- "message": "Connexion"
+ "message": "Connexion",
+ "description": "Tray status: a connection is being established."
},
"tray.status.needsLogin": {
- "message": "Connexion requise"
+ "message": "Connexion requise",
+ "description": "Tray status: the user must sign in before connecting."
},
"tray.status.loginFailed": {
- "message": "Échec de la connexion"
+ "message": "Échec de la connexion",
+ "description": "Tray status: the last sign-in attempt failed."
},
"tray.status.sessionExpired": {
- "message": "Session expirée"
+ "message": "Session expirée",
+ "description": "Tray status: the authenticated session expired; the user must sign in again."
},
"tray.session.expiresIn": {
- "message": "La session expire dans {remaining}"
+ "message": "La session expire dans {remaining}",
+ "description": "Tray row showing time left before the session expires. {remaining} is a human-readable duration such as '5 minutes', built from the tray.session.unit.* strings. Keep {remaining} unchanged."
},
"tray.session.unit.lessThanMinute": {
- "message": "moins d’une minute"
+ "message": "moins d’une minute",
+ "description": "Duration fragment substituted into {remaining} (see tray.session.expiresIn). Used when under one minute remains."
},
"tray.session.unit.minute": {
- "message": "1 minute"
+ "message": "1 minute",
+ "description": "Duration fragment for exactly one minute, substituted into {remaining}."
},
"tray.session.unit.minutes": {
- "message": "{count} minutes"
+ "message": "{count} minutes",
+ "description": "Duration fragment for several minutes, substituted into {remaining}. {count} is the number of minutes; keep {count}."
},
"tray.session.unit.hour": {
- "message": "1 heure"
+ "message": "1 heure",
+ "description": "Duration fragment for exactly one hour, substituted into {remaining}."
},
"tray.session.unit.hours": {
- "message": "{count} heures"
+ "message": "{count} heures",
+ "description": "Duration fragment for several hours. {count} is the number of hours; keep {count}."
},
"tray.session.unit.day": {
- "message": "1 jour"
+ "message": "1 jour",
+ "description": "Duration fragment for exactly one day, substituted into {remaining}."
},
"tray.session.unit.days": {
- "message": "{count} jours"
+ "message": "{count} jours",
+ "description": "Duration fragment for several days. {count} is the number of days; keep {count}."
},
"tray.menu.open": {
- "message": "Ouvrir NetBird"
+ "message": "Ouvrir NetBird",
+ "description": "Tray menu item that opens the main NetBird window. Keep short."
},
"tray.menu.connect": {
- "message": "Se connecter"
+ "message": "Se connecter",
+ "description": "Tray menu item that connects to the network. Keep short."
},
"tray.menu.disconnect": {
- "message": "Se déconnecter"
+ "message": "Se déconnecter",
+ "description": "Tray menu item that disconnects from the network. Keep short."
},
"tray.menu.exitNode": {
- "message": "Nœud de sortie"
+ "message": "Nœud de sortie",
+ "description": "Tray submenu title for choosing an exit node (route all traffic through another peer)."
},
"tray.menu.networks": {
- "message": "Ressources"
+ "message": "Ressources",
+ "description": "Tray submenu title listing network resources the user can reach. Labelled 'Resources' in the UI even though the key says networks."
},
"tray.menu.profiles": {
- "message": "Profils"
+ "message": "Profils",
+ "description": "Tray submenu title listing connection profiles."
},
"tray.menu.manageProfiles": {
- "message": "Gérer les profils"
+ "message": "Gérer les profils",
+ "description": "Tray menu item that opens Settings → Profiles."
},
"tray.menu.settings": {
- "message": "Paramètres..."
+ "message": "Paramètres...",
+ "description": "Tray menu item that opens the Settings window. The trailing '...' signals that a window opens; keep it."
},
"tray.menu.debugBundle": {
- "message": "Créer un lot de diagnostic"
+ "message": "Créer un lot de diagnostic",
+ "description": "Tray menu item that generates a diagnostic log bundle for support."
},
"tray.menu.about": {
- "message": "Aide et assistance"
+ "message": "Aide et assistance",
+ "description": "Tray submenu title for help and support links."
},
"tray.menu.github": {
- "message": "GitHub"
+ "message": "GitHub",
+ "description": "Tray menu link to the GitHub repository. Brand name — do not translate."
},
"tray.menu.documentation": {
- "message": "Documentation"
+ "message": "Documentation",
+ "description": "Tray menu link to the online documentation."
},
"tray.menu.troubleshoot": {
- "message": "Dépannage"
+ "message": "Dépannage",
+ "description": "Tray menu link to troubleshooting help."
},
"tray.menu.downloadLatest": {
- "message": "Télécharger la dernière version"
+ "message": "Télécharger la dernière version",
+ "description": "Tray menu item to download the latest available version."
},
"tray.menu.installVersion": {
- "message": "Installer la version {version}"
+ "message": "Installer la version {version}",
+ "description": "Tray menu item to install a specific update. {version} is a version number like 0.30.1; keep {version}."
},
"tray.menu.guiVersion": {
- "message": "GUI : {version}"
+ "message": "GUI : {version}",
+ "description": "Tray menu row showing the installed UI version. 'GUI' = the graphical app. {version} is a version number; keep it."
},
"tray.menu.daemonVersion": {
- "message": "Daemon : {version}"
+ "message": "Daemon : {version}",
+ "description": "Tray menu row showing the background-service version. 'Daemon' = the background NetBird service. {version} is a version number; keep it."
},
"tray.menu.versionUnknown": {
- "message": "—"
+ "message": "—",
+ "description": "Placeholder shown in version rows when the version can't be determined. It is an em dash — leave as-is."
},
"tray.menu.quit": {
- "message": "Quitter NetBird"
+ "message": "Quitter NetBird",
+ "description": "Tray menu item that fully exits the app and removes the tray icon. Keep short."
},
"notify.daemonOutdated.title": {
- "message": "Le service NetBird est obsolète"
+ "message": "Le service NetBird est obsolète",
+ "description": "Title of the OS desktop notification shown when the running daemon is too old for this UI."
},
"notify.daemonOutdated.body": {
- "message": "Mettez à jour le service NetBird pour utiliser cette application."
+ "message": "Mettez à jour le service NetBird pour utiliser cette application.",
+ "description": "Body of the desktop notification telling the user to upgrade the daemon."
},
"notify.update.title": {
- "message": "Mise à jour de NetBird disponible"
+ "message": "Mise à jour de NetBird disponible",
+ "description": "Title of the OS desktop notification shown when an app update is available."
},
"notify.update.body": {
- "message": "NetBird {version} est disponible."
+ "message": "NetBird {version} est disponible.",
+ "description": "Body of the update-available desktop notification. {version} is the new version number; keep it."
},
"notify.update.enforcedSuffix": {
- "message": " Votre administrateur impose cette mise à jour."
+ "message": " Votre administrateur impose cette mise à jour.",
+ "description": "Sentence appended to the update notification body when the admin has made the update mandatory. Note the leading space — keep it."
},
"notify.error.title": {
- "message": "Erreur"
+ "message": "Erreur",
+ "description": "Title of a generic error desktop notification."
},
"notify.error.connect": {
- "message": "Échec de la connexion"
+ "message": "Échec de la connexion",
+ "description": "Error notification body shown when connecting failed."
},
"notify.error.disconnect": {
- "message": "Échec de la déconnexion"
+ "message": "Échec de la déconnexion",
+ "description": "Error notification body shown when disconnecting failed."
},
"notify.error.switchProfile": {
- "message": "Échec du passage à {profile}"
+ "message": "Échec du passage à {profile}",
+ "description": "Error notification shown when switching profiles failed. {profile} is the target profile name; keep it."
},
"notify.error.exitNode": {
- "message": "Échec de la mise à jour du nœud de sortie {name}"
+ "message": "Échec de la mise à jour du nœud de sortie {name}",
+ "description": "Error notification shown when updating the exit node failed. {name} is the exit node name; keep it."
},
"notify.sessionExpired.title": {
- "message": "Session NetBird expirée"
+ "message": "Session NetBird expirée",
+ "description": "Title of the desktop notification shown when the session has expired."
},
"notify.sessionExpired.body": {
- "message": "Votre session NetBird a expiré. Veuillez vous reconnecter."
+ "message": "Votre session NetBird a expiré. Veuillez vous reconnecter.",
+ "description": "Body of the session-expired desktop notification."
},
"notify.sessionWarning.title": {
- "message": "La session expire bientôt"
+ "message": "La session expire bientôt",
+ "description": "Title of the desktop notification warning that the session will expire soon."
},
"notify.sessionWarning.body": {
- "message": "Votre session NetBird expire dans {remaining}. Cliquez sur Prolonger pour la renouveler."
+ "message": "Votre session NetBird expire dans {remaining}. Cliquez sur Prolonger pour la renouveler.",
+ "description": "Body of the session-expiry warning notification. {remaining} is a human-readable duration (see tray.session.unit.*); keep it. 'Extend now' refers to the action button notify.sessionWarning.extend."
},
"notify.sessionWarning.bodyGeneric": {
- "message": "Votre session NetBird est sur le point d’expirer. Cliquez sur Prolonger pour la renouveler."
+ "message": "Votre session NetBird est sur le point d’expirer. Cliquez sur Prolonger pour la renouveler.",
+ "description": "Generic session-expiry warning body used when the exact remaining time isn't known."
},
"notify.sessionWarning.extend": {
- "message": "Prolonger"
+ "message": "Prolonger",
+ "description": "Action button on the session-expiry notification that renews the session. Keep short."
},
"notify.sessionWarning.dismiss": {
- "message": "Ignorer"
+ "message": "Ignorer",
+ "description": "Action button on the session-expiry notification that dismisses it. Keep short."
},
"notify.sessionWarning.failed": {
- "message": "Échec de la prolongation de la session NetBird"
+ "message": "Échec de la prolongation de la session NetBird",
+ "description": "Notification shown when renewing the session failed."
},
"notify.sessionWarning.successTitle": {
- "message": "Session NetBird prolongée"
+ "message": "Session NetBird prolongée",
+ "description": "Title of the notification confirming the session was renewed."
},
"notify.sessionWarning.successBody": {
- "message": "Votre session a été renouvelée."
+ "message": "Votre session a été renouvelée.",
+ "description": "Body of the notification confirming the session was renewed."
},
"notify.sessionDeadlineRejected.title": {
- "message": "Échéance de session rejetée"
+ "message": "Échéance de session rejetée",
+ "description": "Title of the notification shown when the server sent an invalid session deadline."
},
"notify.sessionDeadlineRejected.body": {
- "message": "Le serveur a envoyé une échéance de session invalide. Veuillez vous reconnecter."
+ "message": "Le serveur a envoyé une échéance de session invalide. Veuillez vous reconnecter.",
+ "description": "Body explaining the server sent an invalid session deadline and the user must sign in again."
},
"notify.mdm.policyApplied.title": {
- "message": "Paramètres NetBird mis à jour"
+ "message": "Paramètres NetBird mis à jour",
+ "description": "Title of the desktop notification shown when an MDM (IT-managed) policy changed the daemon configuration at runtime."
},
"notify.mdm.policyApplied.body": {
- "message": "Votre configuration NetBird a été mise à jour par votre politique informatique."
+ "message": "Votre configuration NetBird a été mise à jour par votre politique informatique.",
+ "description": "Body of the MDM policy-applied notification, telling the user their settings were changed by their organization's device-management policy."
},
"common.cancel": {
- "message": "Annuler"
+ "message": "Annuler",
+ "description": "Generic Cancel button label, reused across dialogs. Keep short."
},
"common.save": {
- "message": "Enregistrer"
+ "message": "Enregistrer",
+ "description": "Generic Save button label. Keep short."
},
"common.saveChanges": {
- "message": "Enregistrer les modifications"
+ "message": "Enregistrer les modifications",
+ "description": "Button label to save edited settings. Keep short."
},
"common.saving": {
- "message": "Enregistrement…"
+ "message": "Enregistrement…",
+ "description": "Button label / status shown while a save is in progress. Ends with an ellipsis."
},
"common.close": {
- "message": "Fermer"
+ "message": "Fermer",
+ "description": "Generic Close button label. Keep short."
},
"common.copy": {
- "message": "Copier"
+ "message": "Copier",
+ "description": "Generic Copy button label (copy to clipboard). Keep short."
},
"common.togglePasswordVisibility": {
- "message": "Afficher ou masquer le mot de passe"
+ "message": "Afficher ou masquer le mot de passe",
+ "description": "Accessibility label for the show/hide button inside a password field."
},
"common.increase": {
- "message": "Augmenter"
+ "message": "Augmenter",
+ "description": "Accessibility label for the increment (+) button on a numeric stepper input."
},
"common.decrease": {
- "message": "Diminuer"
+ "message": "Diminuer",
+ "description": "Accessibility label for the decrement (−) button on a numeric stepper input."
},
"common.delete": {
- "message": "Supprimer"
+ "message": "Supprimer",
+ "description": "Generic Delete button label. Keep short."
},
"common.create": {
- "message": "Créer"
+ "message": "Créer",
+ "description": "Generic Create button label. Keep short."
},
"common.add": {
- "message": "Ajouter"
+ "message": "Ajouter",
+ "description": "Generic Add button label. Keep short."
},
"common.remove": {
- "message": "Retirer"
+ "message": "Retirer",
+ "description": "Generic Remove button label. Keep short."
},
"common.refresh": {
- "message": "Actualiser"
+ "message": "Actualiser",
+ "description": "Generic Refresh button label. Keep short."
},
"common.loading": {
- "message": "Chargement…"
+ "message": "Chargement…",
+ "description": "Generic loading indicator text. Ends with an ellipsis."
},
"common.netbird": {
- "message": "NetBird"
+ "message": "NetBird",
+ "description": "The product name. Brand — do not translate."
},
"common.noResults.title": {
- "message": "Aucun résultat trouvé"
+ "message": "Aucun résultat trouvé",
+ "description": "Title of the empty state shown when a search or filter returns nothing."
},
"common.noResults.description": {
- "message": "Nous n’avons trouvé aucun résultat. Essayez un autre terme de recherche ou modifiez vos filtres."
+ "message": "Nous n’avons trouvé aucun résultat. Essayez un autre terme de recherche ou modifiez vos filtres.",
+ "description": "Body of the no-results empty state, suggesting a different search term or filters."
},
"notConnected.title": {
- "message": "Déconnecté"
+ "message": "Déconnecté",
+ "description": "Title of the placeholder shown on data screens while disconnected."
},
"notConnected.description": {
- "message": "Connectez-vous d’abord à NetBird pour consulter les informations détaillées sur vos pairs, vos ressources réseau et vos nœuds de sortie."
+ "message": "Connectez-vous d’abord à NetBird pour consulter les informations détaillées sur vos pairs, vos ressources réseau et vos nœuds de sortie.",
+ "description": "Body explaining the user must connect to NetBird first to see peer, resource, and exit-node details."
},
"connect.status.disconnected": {
- "message": "Déconnecté"
+ "message": "Déconnecté",
+ "description": "Label on the main-window connection toggle: not connected."
},
"connect.status.connecting": {
- "message": "Connexion..."
+ "message": "Connexion...",
+ "description": "Connection toggle label while connecting. Ends with an ellipsis."
},
"connect.status.connected": {
- "message": "Connecté"
+ "message": "Connecté",
+ "description": "Connection toggle label when connected."
},
"connect.status.disconnecting": {
- "message": "Déconnexion..."
+ "message": "Déconnexion...",
+ "description": "Connection toggle label while disconnecting. Ends with an ellipsis."
},
"connect.status.daemonUnavailable": {
- "message": "Daemon indisponible"
+ "message": "Daemon indisponible",
+ "description": "Connection toggle label when the background service is unavailable. 'Daemon' = background service."
},
"connect.status.loginRequired": {
- "message": "Connexion requise"
+ "message": "Connexion requise",
+ "description": "Connection toggle label when sign-in is required before connecting."
},
"connect.error.loginTitle": {
- "message": "Échec de la connexion"
+ "message": "Échec de la connexion",
+ "description": "Error-dialog title shown when sign-in fails. The action-named '… Failed' style is intentional — keep it."
},
"connect.error.connectTitle": {
- "message": "Échec de la connexion"
+ "message": "Échec de la connexion",
+ "description": "Error-dialog title shown when connecting fails."
},
"connect.error.disconnectTitle": {
- "message": "Échec de la déconnexion"
+ "message": "Échec de la déconnexion",
+ "description": "Error-dialog title shown when disconnecting fails."
},
"nav.peers.title": {
- "message": "Pairs"
+ "message": "Pairs",
+ "description": "Navigation label for the Peers section (other devices in the network)."
},
"nav.peers.description": {
- "message": "{connected} sur {total} connectés"
+ "message": "{connected} sur {total} connectés",
+ "description": "Sub-label under Peers showing how many are connected. {connected} and {total} are numbers; keep both."
},
"nav.resources.title": {
- "message": "Ressources"
+ "message": "Ressources",
+ "description": "Navigation label for the Resources section (routed networks)."
},
"nav.resources.description": {
- "message": "{active} sur {total} actives"
+ "message": "{active} sur {total} actives",
+ "description": "Sub-label under Resources showing how many are active. {active} and {total} are numbers; keep both."
},
"nav.exitNode.title": {
- "message": "Nœuds de sortie"
+ "message": "Nœuds de sortie",
+ "description": "Navigation label for the Exit Nodes section."
},
"nav.exitNode.none": {
- "message": "Inactif"
+ "message": "Inactif",
+ "description": "Sub-label under Exit Nodes when no exit node is in use."
},
"nav.exitNode.using": {
- "message": "Via {name}"
+ "message": "Via {name}",
+ "description": "Sub-label under Exit Nodes when one is active. {name} is the exit node's name; keep it."
},
"header.openSettings": {
- "message": "Ouvrir les paramètres"
+ "message": "Ouvrir les paramètres",
+ "description": "Accessibility label / tooltip for the gear icon that opens Settings."
},
"header.togglePanel": {
- "message": "Afficher ou masquer le panneau latéral"
+ "message": "Afficher ou masquer le panneau latéral",
+ "description": "Accessibility label / tooltip for the button that shows or hides the side panel."
},
"profile.selector.loading": {
- "message": "Chargement..."
+ "message": "Chargement...",
+ "description": "Shown in the profile picker while profiles load. Ends with an ellipsis."
},
"profile.selector.noProfile": {
- "message": "Aucun profil"
+ "message": "Aucun profil",
+ "description": "Shown in the profile picker when no profile is selected."
},
"profile.selector.searchPlaceholder": {
- "message": "Rechercher un profil par nom..."
+ "message": "Rechercher un profil par nom...",
+ "description": "Placeholder text in the profile picker's search field."
},
"profile.selector.emptyTitle": {
- "message": "Aucun profil trouvé"
+ "message": "Aucun profil trouvé",
+ "description": "Title shown in the profile picker when a search matches no profiles."
},
"profile.selector.emptyDescription": {
- "message": "Essayez un autre terme de recherche ou créez un nouveau profil."
+ "message": "Essayez un autre terme de recherche ou créez un nouveau profil.",
+ "description": "Body shown when no profiles match the search, suggesting a different term or creating one."
},
"profile.selector.newProfile": {
- "message": "Nouveau profil"
+ "message": "Nouveau profil",
+ "description": "Button in the profile picker to create a new profile. Keep short."
},
"profile.selector.moreOptions": {
- "message": "Plus d’options"
+ "message": "Plus d’options",
+ "description": "Accessibility label for the per-profile kebab (⋯) menu."
},
"profile.selector.deregister": {
- "message": "Désinscrire"
+ "message": "Désinscrire",
+ "description": "Per-profile menu action: deregister (sign out of the profile but keep it)."
},
"profile.selector.delete": {
- "message": "Supprimer"
+ "message": "Supprimer",
+ "description": "Per-profile menu action: delete the profile."
},
"profile.selector.switchTo": {
- "message": "Basculer vers ce profil"
+ "message": "Basculer vers ce profil",
+ "description": "Tooltip / label for the action that switches to a profile."
},
"profile.selector.edit": {
- "message": "Modifier"
+ "message": "Modifier",
+ "description": "Per-profile menu action: open the edit dialog to rename or change the management server."
},
"profile.edit.title": {
- "message": "Modifier le profil"
+ "message": "Modifier le profil",
+ "description": "Title of the dialog for editing an existing profile."
},
"profile.edit.submit": {
- "message": "Enregistrer les modifications"
+ "message": "Enregistrer les modifications",
+ "description": "Submit button on the edit-profile dialog. Keep short."
},
"profile.dialog.title": {
- "message": "Saisir le nom du profil"
+ "message": "Saisir le nom du profil",
+ "description": "Title of the dialog for naming a new profile."
},
"profile.dialog.nameLabel": {
- "message": "Nom du profil"
+ "message": "Nom du profil",
+ "description": "Field label for the profile name."
},
"profile.dialog.description": {
- "message": "Choisissez un nom facilement identifiable pour votre profil."
+ "message": "Choisissez un nom facilement identifiable pour votre profil.",
+ "description": "Helper text under the profile-name field."
},
"profile.dialog.placeholder": {
- "message": "ex. travail"
+ "message": "ex. travail",
+ "description": "Example placeholder shown in the profile-name field. 'Work' is a sample value; translate it to a natural example."
},
"profile.dialog.submit": {
- "message": "Ajouter un profil"
+ "message": "Ajouter un profil",
+ "description": "Submit button on the add-profile dialog. Keep short."
},
"profile.dialog.required": {
- "message": "Veuillez saisir un nom de profil, ex. travail, domicile"
+ "message": "Veuillez saisir un nom de profil, ex. travail, domicile",
+ "description": "Validation message shown when the profile name is empty. The examples (work, home) may be localized."
},
"profile.dialog.managementHelp": {
- "message": "Utilisez NetBird Cloud ou votre propre serveur."
+ "message": "Utilisez NetBird Cloud ou votre propre serveur.",
+ "description": "Helper text noting the profile can use NetBird Cloud or a self-hosted server."
},
"profile.dialog.urlUnreachable": {
- "message": "Impossible de joindre ce serveur. Vérifiez l’URL, ou ajoutez le profil quand même si vous êtes sûr qu’elle est correcte."
+ "message": "Impossible de joindre ce serveur. Vérifiez l’URL, ou ajoutez le profil quand même si vous êtes sûr qu’elle est correcte.",
+ "description": "Soft warning when the entered server URL couldn't be reached; the user may add the profile anyway."
},
"header.menu.settings": {
- "message": "Paramètres..."
+ "message": "Paramètres...",
+ "description": "'More' menu item in the header that opens Settings. The trailing '...' signals a window opens."
},
"header.menu.defaultView": {
- "message": "Vue par défaut"
+ "message": "Vue par défaut",
+ "description": "'More' menu item that switches the main window to the compact default view."
},
"header.menu.advancedView": {
- "message": "Vue avancée"
+ "message": "Vue avancée",
+ "description": "'More' menu item that switches the main window to the wider advanced view."
},
"header.menu.updateAvailable": {
- "message": "Mise à jour disponible"
+ "message": "Mise à jour disponible",
+ "description": "'More' menu item / badge shown when an update is available."
},
"header.menu.open": {
- "message": "Ouvrir le menu"
+ "message": "Ouvrir le menu",
+ "description": "Accessibility label for the header's more (⋮) button that opens the menu."
},
"header.profile.switch": {
- "message": "Changer de profil"
+ "message": "Changer de profil",
+ "description": "Accessibility label for the header's profile selector button."
},
"connect.toggle.label": {
- "message": "Activer/désactiver la connexion NetBird"
+ "message": "Activer/désactiver la connexion NetBird",
+ "description": "Accessibility label for the large connect/disconnect toggle on the main page."
},
"connect.localIp.label": {
- "message": "Adresses IP locales"
+ "message": "Adresses IP locales",
+ "description": "Accessibility label for the local IP selector that toggles between IPv4 and IPv6 on the main page."
},
"common.search": {
- "message": "Rechercher"
+ "message": "Rechercher",
+ "description": "Accessibility label for a generic search input."
},
"common.filter": {
- "message": "Filtrer"
+ "message": "Filtrer",
+ "description": "Accessibility label for a generic filter control."
},
"exitNodes.dropdown.trigger": {
- "message": "Sélectionner un nœud de sortie"
+ "message": "Sélectionner un nœud de sortie",
+ "description": "Accessibility label for the exit-node picker button at the bottom of the main page."
},
"peers.row.label": {
- "message": "Ouvrir les détails pour {name}, {status}"
+ "message": "Ouvrir les détails pour {name}, {status}",
+ "description": "Accessibility label for a peer row in the list. {name} is the peer name and {status} is the connection status; keep both placeholders."
},
"peers.dialog.title": {
- "message": "Détails du pair"
+ "message": "Détails du pair",
+ "description": "Accessibility title (announced to screen readers) for the peer details dialog/panel."
},
"networks.row.toggle": {
- "message": "Activer/désactiver {name}"
+ "message": "Activer/désactiver {name}",
+ "description": "Accessibility label for the row-wide toggle on a network/resource. {name} is the resource id; keep the placeholder."
},
"networks.bulk.label": {
- "message": "Activer/désactiver toutes les ressources visibles"
+ "message": "Activer/désactiver toutes les ressources visibles",
+ "description": "Accessibility label for the bulk enable/disable button at the bottom of the resources list."
},
"profile.switch.title": {
- "message": "Basculer vers le profil « {name} » ?"
+ "message": "Basculer vers le profil « {name} » ?",
+ "description": "Confirmation-dialog title for switching profiles. {name} is the target profile name, shown in quotes; keep {name} and the surrounding quotes."
},
"profile.switch.message": {
- "message": "Voulez-vous vraiment changer de profil ?\nVotre profil actuel sera déconnecté."
+ "message": "Voulez-vous vraiment changer de profil ?\nVotre profil actuel sera déconnecté.",
+ "description": "Confirmation body for switching profiles. Contains a line break (\\n) — keep it."
},
"profile.switch.confirm": {
- "message": "Confirmer"
+ "message": "Confirmer",
+ "description": "Confirm button on the switch-profile dialog. Keep short."
},
"profile.deregister.title": {
- "message": "Désinscrire le profil « {name} » ?"
+ "message": "Désinscrire le profil « {name} » ?",
+ "description": "Confirmation-dialog title for deregistering a profile. {name} is the profile name; keep it and the quotes."
},
"profile.deregister.message": {
- "message": "Voulez-vous vraiment désinscrire ce profil ?\nVous devrez vous reconnecter pour l’utiliser."
+ "message": "Voulez-vous vraiment désinscrire ce profil ?\nVous devrez vous reconnecter pour l’utiliser.",
+ "description": "Confirmation body for deregistering; warns the user must sign in again. Contains a line break (\\n) — keep it."
},
"profile.deregister.confirm": {
- "message": "Désinscrire"
+ "message": "Désinscrire",
+ "description": "Confirm button on the deregister dialog. Keep short."
},
"profile.delete.title": {
- "message": "Supprimer le profil « {name} » ?"
+ "message": "Supprimer le profil « {name} » ?",
+ "description": "Confirmation-dialog title for deleting a profile. {name} is the profile name; keep it and the quotes."
},
"profile.delete.message": {
- "message": "Voulez-vous vraiment supprimer ce profil ?\nCette action est irréversible."
+ "message": "Voulez-vous vraiment supprimer ce profil ?\nCette action est irréversible.",
+ "description": "Confirmation body for deleting; warns the action can't be undone. Contains a line break (\\n) — keep it."
},
"profile.delete.disabledActive": {
- "message": "Les profils actifs ne peuvent pas être supprimés. Basculez vers un autre profil avant de supprimer celui-ci."
+ "message": "Les profils actifs ne peuvent pas être supprimés. Basculez vers un autre profil avant de supprimer celui-ci.",
+ "description": "Tooltip explaining the active profile can't be deleted until the user switches away."
},
"profile.delete.disabledDefault": {
- "message": "Le profil par défaut ne peut pas être supprimé."
+ "message": "Le profil par défaut ne peut pas être supprimé.",
+ "description": "Tooltip explaining the default profile can't be deleted."
},
"profile.error.switchTitle": {
- "message": "Échec du changement de profil"
+ "message": "Échec du changement de profil",
+ "description": "Error-dialog title when switching profiles fails."
},
"profile.error.deregisterTitle": {
- "message": "Échec de la désinscription du profil"
+ "message": "Échec de la désinscription du profil",
+ "description": "Error-dialog title when deregistering a profile fails."
},
"profile.error.deleteTitle": {
- "message": "Échec de la suppression du profil"
+ "message": "Échec de la suppression du profil",
+ "description": "Error-dialog title when deleting a profile fails."
},
"profile.error.createTitle": {
- "message": "Échec de la création du profil"
+ "message": "Échec de la création du profil",
+ "description": "Error-dialog title when creating a profile fails."
},
"profile.error.editTitle": {
- "message": "Échec de la modification du profil"
+ "message": "Échec de la modification du profil",
+ "description": "Error-dialog title when editing a profile (rename or management URL change) fails."
},
"profile.error.loadTitle": {
- "message": "Échec du chargement des profils"
+ "message": "Échec du chargement des profils",
+ "description": "Error-dialog title when loading profiles fails."
},
"profile.dropdown.activeProfile": {
- "message": "Profil actif"
+ "message": "Profil actif",
+ "description": "Section heading in the header profile dropdown for the current profile."
},
"profile.dropdown.switchProfile": {
- "message": "Changer de profil"
+ "message": "Changer de profil",
+ "description": "Section heading / action in the profile dropdown to switch profiles."
},
"profile.dropdown.noEmail": {
- "message": "Autre"
+ "message": "Autre",
+ "description": "Label shown for a profile that has no associated email address."
},
"profile.dropdown.addProfile": {
- "message": "Ajouter un profil"
+ "message": "Ajouter un profil",
+ "description": "Profile dropdown action to add a profile."
},
"profile.dropdown.manageProfiles": {
- "message": "Gérer les profils"
+ "message": "Gérer les profils",
+ "description": "Profile dropdown action that opens Settings → Profiles."
},
"profile.dropdown.settings": {
- "message": "Paramètres"
+ "message": "Paramètres",
+ "description": "Profile dropdown action that opens Settings."
},
"settings.profiles.section.profiles": {
- "message": "Profils"
+ "message": "Profils",
+ "description": "Section heading on the Profiles settings tab."
},
"settings.profiles.intro": {
- "message": "Conservez plusieurs identités NetBird côte à côte, par exemple des comptes professionnels et personnels, ou différents serveurs de gestion. Ajoutez, désinscrivez ou supprimez des profils ci-dessous."
+ "message": "Conservez plusieurs identités NetBird côte à côte, par exemple des comptes professionnels et personnels, ou différents serveurs de gestion. Ajoutez, désinscrivez ou supprimez des profils ci-dessous.",
+ "description": "Intro paragraph on the Profiles settings tab explaining what profiles are for."
},
"settings.profiles.addProfile": {
- "message": "Ajouter un profil"
+ "message": "Ajouter un profil",
+ "description": "Button on the Profiles settings tab to add a profile."
},
"settings.profiles.active": {
- "message": "Actif"
+ "message": "Actif",
+ "description": "Badge marking the currently active profile in the profiles table."
},
"settings.profiles.emptyTitle": {
- "message": "Aucun profil"
+ "message": "Aucun profil",
+ "description": "Title of the empty state when there are no profiles."
},
"settings.profiles.emptyDescription": {
- "message": "Créez un profil pour vous connecter à un serveur de gestion NetBird."
+ "message": "Créez un profil pour vous connecter à un serveur de gestion NetBird.",
+ "description": "Body of the no-profiles empty state."
},
"settings.error.loadTitle": {
- "message": "Échec du chargement des paramètres"
+ "message": "Échec du chargement des paramètres",
+ "description": "Error-dialog title when loading settings fails."
},
"settings.error.saveTitle": {
- "message": "Échec de l’enregistrement des paramètres"
+ "message": "Échec de l’enregistrement des paramètres",
+ "description": "Error-dialog title when saving settings fails."
},
"settings.error.debugBundleTitle": {
- "message": "Échec du lot de diagnostic"
+ "message": "Échec du lot de diagnostic",
+ "description": "Error-dialog title when creating the debug bundle fails."
},
"settings.nav.label": {
- "message": "Sections des paramètres"
+ "message": "Sections des paramètres",
+ "description": "Accessibility label for the Settings page's side navigation (list of section tabs)."
},
"settings.tabs.general": {
- "message": "Général"
+ "message": "Général",
+ "description": "Settings tab label: General. Keep short."
},
"settings.tabs.network": {
- "message": "Réseau"
+ "message": "Réseau",
+ "description": "Settings tab label: Network. Keep short."
},
"settings.tabs.security": {
- "message": "Sécurité"
+ "message": "Sécurité",
+ "description": "Settings tab label: Security. Keep short."
},
"settings.tabs.profiles": {
- "message": "Profils"
+ "message": "Profils",
+ "description": "Settings tab label: Profiles. Keep short."
},
"settings.tabs.ssh": {
- "message": "SSH"
+ "message": "SSH",
+ "description": "Settings tab label: SSH. Acronym — keep as-is."
},
"settings.tabs.advanced": {
- "message": "Avancé"
+ "message": "Avancé",
+ "description": "Settings tab label: Advanced. Keep short."
},
"settings.tabs.troubleshooting": {
- "message": "Dépannage"
+ "message": "Dépannage",
+ "description": "Settings tab label: Troubleshoot. Keep short."
},
"settings.tabs.about": {
- "message": "À propos"
+ "message": "À propos",
+ "description": "Settings tab label: About. Keep short."
},
"settings.tabs.updateAvailable": {
- "message": "Mise à jour disponible"
+ "message": "Mise à jour disponible",
+ "description": "Settings tab label / badge shown when an update is available."
},
"settings.general.section.general": {
- "message": "Général"
+ "message": "Général",
+ "description": "Section heading on the General settings tab."
},
"settings.general.section.connection": {
- "message": "Connexion"
+ "message": "Connexion",
+ "description": "Section heading for connection-related options on the General tab."
},
"settings.general.connectOnStartup.label": {
- "message": "Se connecter au démarrage"
+ "message": "Se connecter au démarrage",
+ "description": "Toggle label: connect automatically when the service starts."
},
"settings.general.connectOnStartup.help": {
- "message": "Établir automatiquement une connexion au démarrage du service."
+ "message": "Établir automatiquement une connexion au démarrage du service.",
+ "description": "Helper text for the connect-on-startup toggle."
},
"settings.general.notifications.label": {
- "message": "Notifications du bureau"
+ "message": "Notifications du bureau",
+ "description": "Toggle label: enable desktop notifications."
},
"settings.general.notifications.help": {
- "message": "Afficher des notifications du bureau pour les nouvelles mises à jour et les événements de connexion."
+ "message": "Afficher des notifications du bureau pour les nouvelles mises à jour et les événements de connexion.",
+ "description": "Helper text for the desktop-notifications toggle."
},
"settings.general.autostart.label": {
- "message": "Lancer l’interface NetBird à l’ouverture de session"
+ "message": "Lancer l’interface NetBird à l’ouverture de session",
+ "description": "Toggle label: launch the NetBird UI at login."
},
"settings.general.autostart.help": {
- "message": "Démarrer automatiquement l’interface NetBird à l’ouverture de votre session. Cela n’affecte que l’interface graphique, pas le service en arrière-plan."
+ "message": "Démarrer automatiquement l’interface NetBird à l’ouverture de votre session. Cela n’affecte que l’interface graphique, pas le service en arrière-plan.",
+ "description": "Helper text clarifying autostart affects only the UI, not the background service."
},
"settings.general.autostart.errorTitle": {
- "message": "Échec de la modification du démarrage automatique"
+ "message": "Échec de la modification du démarrage automatique",
+ "description": "Error-dialog title when changing the autostart setting fails."
},
"settings.general.keepConnectedOnQuit.label": {
"message": "Rester connecté après la fermeture",
@@ -560,840 +744,1119 @@
"description": "Helper text for the stay-connected-after-quitting toggle."
},
"settings.general.language.label": {
- "message": "Langue d’affichage"
+ "message": "Langue d’affichage",
+ "description": "Label for the display-language picker."
},
"settings.general.language.help": {
- "message": "Choisissez la langue de l’interface NetBird."
+ "message": "Choisissez la langue de l’interface NetBird.",
+ "description": "Helper text for the language picker."
},
"settings.general.language.search": {
- "message": "Rechercher une langue…"
+ "message": "Rechercher une langue…",
+ "description": "Placeholder in the language picker's search field."
},
"settings.general.language.empty": {
- "message": "Aucune langue ne correspond."
+ "message": "Aucune langue ne correspond.",
+ "description": "Shown when no languages match the search."
},
"settings.general.theme.label": {
- "message": "Thème"
+ "message": "Thème",
+ "description": "Label for the appearance/theme picker."
},
"settings.general.theme.help": {
- "message": "Choisissez le thème clair ou sombre, ou suivez l'apparence du système."
+ "message": "Choisissez le thème clair ou sombre, ou suivez l'apparence du système.",
+ "description": "Helper text for the theme picker."
},
"settings.general.theme.system": {
- "message": "Système"
+ "message": "Système",
+ "description": "Theme option: follow the OS appearance."
},
"settings.general.theme.light": {
- "message": "Clair"
+ "message": "Clair",
+ "description": "Theme option: light appearance."
},
"settings.general.theme.dark": {
- "message": "Sombre"
+ "message": "Sombre",
+ "description": "Theme option: dark appearance."
},
"settings.general.management.label": {
- "message": "Serveur de gestion"
+ "message": "Serveur de gestion",
+ "description": "Label for the management-server selector."
},
"settings.general.management.help": {
- "message": "Connectez-vous à NetBird Cloud ou à votre propre serveur de gestion auto-hébergé. Les modifications reconnecteront le client."
+ "message": "Connectez-vous à NetBird Cloud ou à votre propre serveur de gestion auto-hébergé. Les modifications reconnecteront le client.",
+ "description": "Helper text explaining Cloud vs self-hosted management server; warns that changes reconnect the client."
},
"settings.general.management.cloud": {
- "message": "Cloud"
+ "message": "Cloud",
+ "description": "Option label for using NetBird Cloud as the management server."
},
"settings.general.management.selfHosted": {
- "message": "Auto-hébergé"
+ "message": "Auto-hébergé",
+ "description": "Option label for using a self-hosted management server. 'Self-hosted' is a common technical term."
},
"settings.general.management.urlPlaceholder": {
- "message": "https://netbird.selfhosted.com:443"
+ "message": "https://netbird.selfhosted.com:443",
+ "description": "Example URL placeholder for the self-hosted server field. It is a sample URL — do not translate the URL itself."
},
"settings.general.management.urlError": {
- "message": "Veuillez saisir une URL valide, ex. https://netbird.selfhosted.com:443"
+ "message": "Veuillez saisir une URL valide, ex. https://netbird.selfhosted.com:443",
+ "description": "Validation message for an invalid management-server URL. The example URL stays as-is."
},
"settings.general.management.urlUnreachable": {
- "message": "Impossible de joindre ce serveur. Vérifiez l’URL, ou enregistrez quand même si vous êtes sûr qu’elle est correcte."
+ "message": "Impossible de joindre ce serveur. Vérifiez l’URL, ou enregistrez quand même si vous êtes sûr qu’elle est correcte.",
+ "description": "Soft warning when the management URL couldn't be reached; the user may save anyway."
},
"settings.general.management.switchCloudTitle": {
- "message": "Basculer vers NetBird Cloud ?"
+ "message": "Basculer vers NetBird Cloud ?",
+ "description": "Confirmation-dialog title for switching to NetBird Cloud."
},
"settings.general.management.switchCloudMessage": {
- "message": "Cela déconnecte votre serveur auto-hébergé.\nVous devrez peut-être vous reconnecter."
+ "message": "Cela déconnecte votre serveur auto-hébergé.\nVous devrez peut-être vous reconnecter.",
+ "description": "Confirmation body warning the self-hosted server will be disconnected. Contains a line break (\\n) — keep it."
},
"settings.general.management.switchCloudConfirm": {
- "message": "Basculer vers Cloud"
+ "message": "Basculer vers Cloud",
+ "description": "Confirm button for switching to Cloud. Keep short."
},
"settings.network.section.connectivity": {
- "message": "Connectivité"
+ "message": "Connectivité",
+ "description": "Section heading for connectivity options on the Network tab."
},
"settings.network.section.routingDns": {
- "message": "Routage et DNS"
+ "message": "Routage et DNS",
+ "description": "Section heading for routing and DNS options. 'DNS' is an acronym — keep it."
},
"settings.network.monitor.label": {
- "message": "Reconnecter en cas de changement de réseau"
+ "message": "Reconnecter en cas de changement de réseau",
+ "description": "Toggle label: reconnect automatically on network change."
},
"settings.network.monitor.help": {
- "message": "Surveiller le réseau et se reconnecter automatiquement lors de changements tels qu’un basculement Wi-Fi, une modification Ethernet ou une reprise après la mise en veille."
+ "message": "Surveiller le réseau et se reconnecter automatiquement lors de changements tels qu’un basculement Wi-Fi, une modification Ethernet ou une reprise après la mise en veille.",
+ "description": "Helper text for the network-change reconnect toggle."
},
"settings.network.dns.label": {
- "message": "Activer le DNS"
+ "message": "Activer le DNS",
+ "description": "Toggle label: enable DNS. 'DNS' — keep acronym."
},
"settings.network.dns.help": {
- "message": "Appliquer les paramètres DNS gérés par NetBird au résolveur de l’hôte."
+ "message": "Appliquer les paramètres DNS gérés par NetBird au résolveur de l’hôte.",
+ "description": "Helper text for the enable-DNS toggle."
},
"settings.network.clientRoutes.label": {
- "message": "Activer les routes client"
+ "message": "Activer les routes client",
+ "description": "Toggle label: enable client routes."
},
"settings.network.clientRoutes.help": {
- "message": "Accepter les routes d’autres pairs pour atteindre leurs réseaux."
+ "message": "Accepter les routes d’autres pairs pour atteindre leurs réseaux.",
+ "description": "Helper text for client routes (accept routes from other peers)."
},
"settings.network.serverRoutes.label": {
- "message": "Activer les routes serveur"
+ "message": "Activer les routes serveur",
+ "description": "Toggle label: enable server routes."
},
"settings.network.serverRoutes.help": {
- "message": "Annoncer les routes locales de cet hôte aux autres pairs."
+ "message": "Annoncer les routes locales de cet hôte aux autres pairs.",
+ "description": "Helper text for server routes (advertise this host's local routes to other peers)."
},
"settings.network.ipv6.label": {
- "message": "Activer IPv6"
+ "message": "Activer IPv6",
+ "description": "Toggle label: enable IPv6. 'IPv6' — keep as-is."
},
"settings.network.ipv6.help": {
- "message": "Utiliser l’adressage IPv6 pour le réseau overlay NetBird."
+ "message": "Utiliser l’adressage IPv6 pour le réseau overlay NetBird.",
+ "description": "Helper text for the IPv6 toggle."
},
"settings.security.section.firewall": {
- "message": "Pare-feu"
+ "message": "Pare-feu",
+ "description": "Section heading: Firewall."
},
"settings.security.section.encryption": {
- "message": "Chiffrement"
+ "message": "Chiffrement",
+ "description": "Section heading: Encryption."
},
"settings.security.blockInbound.label": {
- "message": "Bloquer le trafic entrant"
+ "message": "Bloquer le trafic entrant",
+ "description": "Toggle label: block inbound traffic."
},
"settings.security.blockInbound.help": {
- "message": "Rejeter les connexions non sollicitées des pairs vers cet appareil et les réseaux qu’il route. Le trafic sortant n’est pas affecté."
+ "message": "Rejeter les connexions non sollicitées des pairs vers cet appareil et les réseaux qu’il route. Le trafic sortant n’est pas affecté.",
+ "description": "Helper text for blocking inbound traffic."
},
"settings.security.blockLan.label": {
- "message": "Bloquer l’accès au LAN"
+ "message": "Bloquer l’accès au LAN",
+ "description": "Toggle label: block LAN access. 'LAN' — keep acronym."
},
"settings.security.blockLan.help": {
- "message": "Empêcher les pairs d’atteindre votre réseau local ou ses appareils lorsque cet appareil route leur trafic."
+ "message": "Empêcher les pairs d’atteindre votre réseau local ou ses appareils lorsque cet appareil route leur trafic.",
+ "description": "Helper text for blocking LAN access."
},
"settings.security.rosenpass.label": {
- "message": "Activer la résistance quantique"
+ "message": "Activer la résistance quantique",
+ "description": "Toggle label: enable quantum-resistance."
},
"settings.security.rosenpass.help": {
- "message": "Ajouter un échange de clés post-quantique via Rosenpass au-dessus de WireGuard®."
+ "message": "Ajouter un échange de clés post-quantique via Rosenpass au-dessus de WireGuard®.",
+ "description": "Helper text: adds a post-quantum key exchange via Rosenpass on top of WireGuard®. 'Rosenpass' and 'WireGuard®' are product names — do not translate; keep the ® symbol."
},
"settings.security.rosenpassPermissive.label": {
- "message": "Activer le mode permissif"
+ "message": "Activer le mode permissif",
+ "description": "Toggle label: enable permissive mode (for quantum-resistance)."
},
"settings.security.rosenpassPermissive.help": {
- "message": "Autoriser les connexions vers des pairs sans prise en charge de la résistance quantique."
+ "message": "Autoriser les connexions vers des pairs sans prise en charge de la résistance quantique.",
+ "description": "Helper text for permissive mode (allow peers without quantum-resistance support)."
},
"settings.ssh.section.server": {
- "message": "Serveur"
+ "message": "Serveur",
+ "description": "Section heading: Server (SSH settings)."
},
"settings.ssh.section.capabilities": {
- "message": "Fonctionnalités"
+ "message": "Fonctionnalités",
+ "description": "Section heading: Capabilities (SSH features)."
},
"settings.ssh.section.authentication": {
- "message": "Authentification"
+ "message": "Authentification",
+ "description": "Section heading: Authentication (SSH)."
},
"settings.ssh.server.label": {
- "message": "Activer le serveur SSH"
+ "message": "Activer le serveur SSH",
+ "description": "Toggle label: enable the SSH server."
},
"settings.ssh.server.help": {
- "message": "Exécuter le serveur SSH NetBird sur cet hôte afin que d’autres pairs puissent s’y connecter."
+ "message": "Exécuter le serveur SSH NetBird sur cet hôte afin que d’autres pairs puissent s’y connecter.",
+ "description": "Helper text for the SSH server toggle."
},
"settings.ssh.root.label": {
- "message": "Autoriser la connexion en root"
+ "message": "Autoriser la connexion en root",
+ "description": "Toggle label: allow root login over SSH. 'root' is the Unix superuser account — keep as-is."
},
"settings.ssh.root.help": {
- "message": "Permettre aux pairs de se connecter en tant qu’utilisateur root. Désactivez pour exiger un compte non privilégié."
+ "message": "Permettre aux pairs de se connecter en tant qu’utilisateur root. Désactivez pour exiger un compte non privilégié.",
+ "description": "Helper text for allowing root login."
},
"settings.ssh.sftp.label": {
- "message": "Autoriser SFTP"
+ "message": "Autoriser SFTP",
+ "description": "Toggle label: allow SFTP. 'SFTP' — keep acronym."
},
"settings.ssh.sftp.help": {
- "message": "Transférer des fichiers en toute sécurité à l’aide de clients SFTP ou SCP natifs."
+ "message": "Transférer des fichiers en toute sécurité à l’aide de clients SFTP ou SCP natifs.",
+ "description": "Helper text about SFTP/SCP file transfer. Keep the acronyms."
},
"settings.ssh.localForward.label": {
- "message": "Redirection de port locale"
+ "message": "Redirection de port locale",
+ "description": "Toggle label: local port forwarding."
},
"settings.ssh.localForward.help": {
- "message": "Permettre aux pairs connectés de tunneliser des ports locaux vers des services accessibles depuis cet hôte."
+ "message": "Permettre aux pairs connectés de tunneliser des ports locaux vers des services accessibles depuis cet hôte.",
+ "description": "Helper text for local port forwarding."
},
"settings.ssh.remoteForward.label": {
- "message": "Redirection de port distante"
+ "message": "Redirection de port distante",
+ "description": "Toggle label: remote port forwarding."
},
"settings.ssh.remoteForward.help": {
- "message": "Permettre aux pairs connectés d’exposer des ports de cet hôte vers leur propre machine."
+ "message": "Permettre aux pairs connectés d’exposer des ports de cet hôte vers leur propre machine.",
+ "description": "Helper text for remote port forwarding."
},
"settings.ssh.jwt.label": {
- "message": "Activer l’authentification JWT"
+ "message": "Activer l’authentification JWT",
+ "description": "Toggle label: enable JWT authentication. 'JWT' — keep acronym."
},
"settings.ssh.jwt.help": {
- "message": "Vérifier chaque session SSH auprès de votre IdP pour l’identité de l’utilisateur et l’audit. Désactivez pour vous appuyer uniquement sur les politiques ACL réseau, utile lorsqu’aucun IdP n’est disponible."
+ "message": "Vérifier chaque session SSH auprès de votre IdP pour l’identité de l’utilisateur et l’audit. Désactivez pour vous appuyer uniquement sur les politiques ACL réseau, utile lorsqu’aucun IdP n’est disponible.",
+ "description": "Helper text for JWT auth. 'IdP' (identity provider) and 'ACL' are acronyms — keep them."
},
"settings.ssh.jwtTtl.label": {
- "message": "TTL du cache JWT"
+ "message": "TTL du cache JWT",
+ "description": "Label for the JWT cache time-to-live field. 'JWT' and 'TTL' — keep acronyms."
},
"settings.ssh.jwtTtl.help": {
- "message": "Durée pendant laquelle ce client met en cache un JWT avant de redemander lors des connexions SSH sortantes. Définissez 0 pour désactiver la mise en cache et vous authentifier à chaque connexion."
+ "message": "Durée pendant laquelle ce client met en cache un JWT avant de redemander lors des connexions SSH sortantes. Définissez 0 pour désactiver la mise en cache et vous authentifier à chaque connexion.",
+ "description": "Helper text for the JWT cache TTL; mentions setting 0 to disable caching."
},
"settings.ssh.jwtTtl.suffix": {
- "message": "s"
+ "message": "s",
+ "description": "Unit suffix shown after the JWT TTL number field. The '(s)' marks an optional plural."
},
"settings.advanced.section.interface": {
- "message": "Interface"
+ "message": "Interface",
+ "description": "Section heading: Interface (network-interface settings)."
},
"settings.advanced.section.security": {
- "message": "Sécurité"
+ "message": "Sécurité",
+ "description": "Section heading: Security (advanced)."
},
"settings.advanced.interfaceName.label": {
- "message": "Nom"
+ "message": "Nom",
+ "description": "Field label for the WireGuard interface name."
},
"settings.advanced.interfaceName.error": {
- "message": "Utilisez 1 à 15 lettres, chiffres, points, tirets ou traits de soulignement."
+ "message": "Utilisez 1 à 15 lettres, chiffres, points, tirets ou traits de soulignement.",
+ "description": "Validation message for the interface name (allowed characters)."
},
"settings.advanced.interfaceName.errorMac": {
- "message": "Doit commencer par « utun » suivi d’un nombre (ex. utun100)."
+ "message": "Doit commencer par « utun » suivi d’un nombre (ex. utun100).",
+ "description": "Validation message specific to macOS, where the name must start with 'utun' followed by a number. Keep 'utun' and the example."
},
"settings.advanced.port.label": {
- "message": "Port"
+ "message": "Port",
+ "description": "Field label: Port."
},
"settings.advanced.port.error": {
- "message": "Saisissez un port compris entre {min} et {max}."
+ "message": "Saisissez un port compris entre {min} et {max}.",
+ "description": "Validation message for the port range. {min} and {max} are numbers; keep them."
},
"settings.advanced.port.help": {
- "message": "Si la valeur est 0, un port libre aléatoire sera utilisé."
+ "message": "Si la valeur est 0, un port libre aléatoire sera utilisé.",
+ "description": "Helper text: 0 means a random free port is used."
},
"settings.advanced.mtu.label": {
- "message": "MTU"
+ "message": "MTU",
+ "description": "Field label: MTU. 'MTU' — keep acronym."
},
"settings.advanced.mtu.error": {
- "message": "Saisissez une valeur MTU comprise entre {min} et {max}."
+ "message": "Saisissez une valeur MTU comprise entre {min} et {max}.",
+ "description": "Validation message for the MTU range. {min} and {max} are numbers; keep them."
},
"settings.advanced.psk.label": {
- "message": "Clé pré-partagée"
+ "message": "Clé pré-partagée",
+ "description": "Field label: Pre-shared Key."
},
"settings.advanced.psk.help": {
- "message": "PSK WireGuard facultative pour un chiffrement symétrique supplémentaire. Différente d’une clé d’installation NetBird. Vous ne communiquerez qu’avec les pairs utilisant la même clé pré-partagée."
+ "message": "PSK WireGuard facultative pour un chiffrement symétrique supplémentaire. Différente d’une clé d’installation NetBird. Vous ne communiquerez qu’avec les pairs utilisant la même clé pré-partagée.",
+ "description": "Helper text for the WireGuard PSK. 'WireGuard', 'PSK', and 'NetBird Setup Key' are product/technical terms — keep them."
},
"settings.troubleshooting.section.title": {
- "message": "Lot de diagnostic"
+ "message": "Lot de diagnostic",
+ "description": "Section heading: Debug bundle."
},
"settings.troubleshooting.anonymize.label": {
- "message": "Anonymiser les informations sensibles"
+ "message": "Anonymiser les informations sensibles",
+ "description": "Label for the anonymization level dropdown (None, Default, Strict)."
},
"settings.troubleshooting.anonymize.help": {
- "message": "Masque les adresses IP, les domaines et d'autres valeurs sensibles."
+ "message": "Masque les adresses IP, les domaines et d'autres valeurs sensibles.",
+ "description": "Helper text under the anonymization dropdown. The level details live in the info tooltip."
},
"settings.troubleshooting.anonymize.info": {
- "message": "Le mode par défaut garde les adresses IPv4 internes et les noms des pairs lisibles pour le support. Le mode strict anonymise en plus les adresses IP privées (RFC 1918), CGNAT et de lien local, les noms des pairs et les clés publiques WireGuard. Les valeurs récurrentes reçoivent le même espace réservé, les pairs restent donc distinguables. Utilisez le mode strict lorsque vous partagez le lot de diagnostic en dehors de votre organisation."
+ "message": "Le mode par défaut garde les adresses IPv4 internes et les noms des pairs lisibles pour le support. Le mode strict anonymise en plus les adresses IP privées (RFC 1918), CGNAT et de lien local, les noms des pairs et les clés publiques WireGuard. Les valeurs récurrentes reçoivent le même espace réservé, les pairs restent donc distinguables. Utilisez le mode strict lorsque vous partagez le lot de diagnostic en dehors de votre organisation.",
+ "description": "Info tooltip explaining the anonymization levels. 'RFC 1918', 'CGNAT', 'link-local', and 'WireGuard' are technical terms — keep them."
},
"settings.troubleshooting.anonymize.none": {
- "message": "Aucune"
+ "message": "Aucune",
+ "description": "Dropdown option: no anonymization."
},
"settings.troubleshooting.anonymize.default": {
- "message": "Par défaut"
+ "message": "Par défaut",
+ "description": "Dropdown option: default anonymization level."
},
"settings.troubleshooting.anonymize.strict": {
- "message": "Strict"
+ "message": "Strict",
+ "description": "Dropdown option: strict anonymization level."
},
"settings.troubleshooting.systemInfo.label": {
- "message": "Inclure les informations système"
+ "message": "Inclure les informations système",
+ "description": "Toggle label: include system information in the bundle."
},
"settings.troubleshooting.systemInfo.help": {
- "message": "Inclure l’OS, le noyau, les interfaces réseau et les tables de routage."
+ "message": "Inclure l’OS, le noyau, les interfaces réseau et les tables de routage.",
+ "description": "Helper text listing the system info included (OS, kernel, interfaces, routing tables)."
},
"settings.troubleshooting.upload.label": {
- "message": "Envoyer le lot aux serveurs NetBird"
+ "message": "Envoyer le lot aux serveurs NetBird",
+ "description": "Toggle label: upload the bundle to NetBird servers."
},
"settings.troubleshooting.upload.help": {
- "message": "Renvoie une clé d’envoi à partager avec l’assistance NetBird."
+ "message": "Renvoie une clé d’envoi à partager avec l’assistance NetBird.",
+ "description": "Helper text for uploading the bundle."
},
"settings.troubleshooting.trace.label": {
- "message": "Activer les journaux trace"
+ "message": "Activer les journaux trace",
+ "description": "Toggle label: raise daemon log level to TRACE while the bundle is built. 'TRACE' is a log level."
},
"settings.troubleshooting.trace.help": {
- "message": "Élève le niveau de journalisation à TRACE, puis le rétablit ensuite."
+ "message": "Élève le niveau de journalisation à TRACE, puis le rétablit ensuite.",
+ "description": "Helper text for the trace toggle. 'TRACE' is a log level — keep as-is."
},
"settings.troubleshooting.capture.label": {
- "message": "Session de capture"
+ "message": "Session de capture",
+ "description": "Toggle label: open a capture session — reconnect NetBird, wait a duration, optionally record packets."
},
"settings.troubleshooting.capture.help": {
- "message": "Se reconnecte et attend pour que vous puissiez reproduire le problème."
+ "message": "Se reconnecte et attend pour que vous puissiez reproduire le problème.",
+ "description": "Helper text for the master Capture Session toggle."
},
"settings.troubleshooting.packets.label": {
- "message": "Capturer les paquets réseau"
+ "message": "Capturer les paquets réseau",
+ "description": "Toggle label: capture packets to a .pcap during the capture session."
},
"settings.troubleshooting.packets.help": {
- "message": "Enregistre un .pcap du trafic réseau pendant la session de capture."
+ "message": "Enregistre un .pcap du trafic réseau pendant la session de capture.",
+ "description": "Helper text for the packet recording toggle. '.pcap' is a file extension — keep it."
},
"settings.troubleshooting.duration.label": {
- "message": "Durée de capture"
+ "message": "Durée de capture",
+ "description": "Label for the trace-capture duration field."
},
"settings.troubleshooting.duration.help": {
- "message": "Durée d’exécution de la session de capture."
+ "message": "Durée d’exécution de la session de capture.",
+ "description": "Helper text for the capture duration."
},
"settings.troubleshooting.duration.suffix": {
- "message": "min"
+ "message": "min",
+ "description": "Unit suffix after the duration field. The '(s)' marks an optional plural."
},
"settings.troubleshooting.create": {
- "message": "Créer le lot"
+ "message": "Créer le lot",
+ "description": "Button to create the debug bundle. Keep short."
},
"settings.troubleshooting.progress.description": {
- "message": "Collecte des journaux, des détails système et de l’état de connexion. Cela prend généralement un instant — gardez cette fenêtre ouverte jusqu’à la fin."
+ "message": "Collecte des journaux, des détails système et de l’état de connexion. Cela prend généralement un instant — gardez cette fenêtre ouverte jusqu’à la fin.",
+ "description": "Status text shown while the debug bundle is being collected; reassures the user they can keep using NetBird or close Settings meanwhile."
},
"settings.troubleshooting.cancelling": {
- "message": "Annulation…"
+ "message": "Annulation…",
+ "description": "Status shown while cancelling bundle creation. Ends with an ellipsis."
},
"settings.troubleshooting.done.uploadedTitle": {
- "message": "Lot de diagnostic envoyé avec succès !"
+ "message": "Lot de diagnostic envoyé avec succès !",
+ "description": "Success title after the bundle was uploaded."
},
"settings.troubleshooting.done.savedTitle": {
- "message": "Lot enregistré"
+ "message": "Lot enregistré",
+ "description": "Title shown when the bundle was saved locally (not uploaded)."
},
"settings.troubleshooting.done.uploadedDescription": {
- "message": "Partagez la clé d’envoi ci-dessous avec l’assistance NetBird. Une copie locale a également été enregistrée sur votre appareil."
+ "message": "Partagez la clé d’envoi ci-dessous avec l’assistance NetBird. Une copie locale a également été enregistrée sur votre appareil.",
+ "description": "Body after upload, telling the user to share the upload key with support. '…' wraps the inline link to the NetBird support docs — keep the tags exactly and wrap the phrase that means 'NetBird support'."
},
"settings.troubleshooting.done.savedDescription": {
- "message": "Votre lot de diagnostic a été enregistré localement."
+ "message": "Votre lot de diagnostic a été enregistré localement.",
+ "description": "Body shown when the bundle was only saved locally."
},
"settings.troubleshooting.done.copyKey": {
- "message": "Copier la clé"
+ "message": "Copier la clé",
+ "description": "Button to copy the upload key. Keep short."
},
"settings.troubleshooting.done.openFolder": {
- "message": "Ouvrir le dossier"
+ "message": "Ouvrir le dossier",
+ "description": "Button to open the folder containing the bundle. Keep short."
},
"settings.troubleshooting.done.openFileLocation": {
- "message": "Ouvrir l’emplacement du fichier"
+ "message": "Ouvrir l’emplacement du fichier",
+ "description": "Button to reveal the bundle file in the OS file manager."
},
"settings.troubleshooting.uploadFailedWithReason": {
- "message": "Échec de l’envoi : {reason} Le lot reste enregistré localement."
+ "message": "Échec de l’envoi : {reason} Le lot reste enregistré localement.",
+ "description": "Shown when upload failed but the bundle was saved locally. {reason} is the server error text; keep it."
},
"settings.troubleshooting.uploadFailed": {
- "message": "Échec de l’envoi. Le lot reste enregistré localement."
+ "message": "Échec de l’envoi. Le lot reste enregistré localement.",
+ "description": "Shown when upload failed (no specific reason) but the bundle was saved locally."
},
"settings.troubleshooting.stage.reconnecting": {
- "message": "Reconnexion de NetBird…"
+ "message": "Reconnexion de NetBird…",
+ "description": "Progress stage: reconnecting NetBird. Ends with an ellipsis."
},
"settings.troubleshooting.stage.capturing": {
- "message": "Capture des journaux de débogage"
+ "message": "Capture des journaux de débogage",
+ "description": "Progress stage: capturing logs. {elapsed} and {total} are time values (e.g. 0:30 / 2:00); keep both."
},
"settings.troubleshooting.stage.bundling": {
- "message": "Génération du lot de diagnostic…"
+ "message": "Génération du lot de diagnostic…",
+ "description": "Progress stage: generating the debug bundle. Ends with an ellipsis."
},
"settings.troubleshooting.stage.uploading": {
- "message": "Envoi vers NetBird…"
+ "message": "Envoi vers NetBird…",
+ "description": "Progress stage: uploading to NetBird. Ends with an ellipsis."
},
"settings.troubleshooting.stage.cancelling": {
- "message": "Annulation…"
+ "message": "Annulation…",
+ "description": "Progress stage: cancelling. Ends with an ellipsis."
},
"settings.about.client": {
- "message": "Client NetBird v{version}"
+ "message": "Client NetBird v{version}",
+ "description": "About tab: client product name and version. {version} is a version number; keep it. 'NetBird Client' — keep brand."
},
"settings.about.clientName": {
- "message": "Client NetBird"
+ "message": "Client NetBird",
+ "description": "About tab: the client product name shown when no version is available. Brand — do not translate."
},
"settings.about.development": {
- "message": "[Développement]"
+ "message": "[Développement]",
+ "description": "Badge shown next to the version on development builds. Keep the square brackets."
},
"settings.about.gui": {
- "message": "GUI v{version}"
+ "message": "GUI v{version}",
+ "description": "About tab: UI component name and version. {version} is a version number; keep it. 'GUI' = the graphical app."
},
"settings.about.guiName": {
- "message": "GUI"
+ "message": "GUI",
+ "description": "About tab: the UI component name shown without a version. 'GUI' = the graphical app."
},
"settings.about.copyright": {
- "message": "© {year} NetBird. Tous droits réservés."
+ "message": "© {year} NetBird. Tous droits réservés.",
+ "description": "Copyright line. {year} is the current year; keep it. 'NetBird' — brand."
},
"settings.about.links.imprint": {
- "message": "Mentions légales"
+ "message": "Mentions légales",
+ "description": "Footer link: Imprint (legal notice / Impressum)."
},
"settings.about.links.privacy": {
- "message": "Confidentialité"
+ "message": "Confidentialité",
+ "description": "Footer link: Privacy policy."
},
"settings.about.links.cla": {
- "message": "CLA"
+ "message": "CLA",
+ "description": "Footer link: CLA (Contributor License Agreement). Acronym — keep as-is."
},
"settings.about.links.terms": {
- "message": "Conditions d’utilisation"
+ "message": "Conditions d’utilisation",
+ "description": "Footer link: Terms of Service."
},
"settings.about.community.github": {
- "message": "GitHub"
+ "message": "GitHub",
+ "description": "Community link: GitHub. Brand — do not translate."
},
"settings.about.community.slack": {
- "message": "Slack"
+ "message": "Slack",
+ "description": "Community link: Slack. Brand — do not translate."
},
"settings.about.community.forum": {
- "message": "Forum"
+ "message": "Forum",
+ "description": "Community link: Forum."
},
"settings.about.community.documentation": {
- "message": "Documentation"
+ "message": "Documentation",
+ "description": "Community link: Documentation."
},
"settings.about.community.feedback": {
- "message": "Retour d’expérience"
+ "message": "Retour d’expérience",
+ "description": "Community link: Feedback."
},
"update.banner.message": {
- "message": "NetBird {version} est prêt à être installé."
+ "message": "NetBird {version} est prêt à être installé.",
+ "description": "Update banner text when a new version is ready to install. {version} is the version number; keep it."
},
"update.banner.later": {
- "message": "Plus tard"
+ "message": "Plus tard",
+ "description": "Banner button to postpone the update. Keep short."
},
"update.banner.installNow": {
- "message": "Installer maintenant"
+ "message": "Installer maintenant",
+ "description": "Banner button to install the update now. Keep short."
},
"update.card.versionAvailableDownload": {
- "message": "La version {version} est disponible au téléchargement."
+ "message": "La version {version} est disponible au téléchargement.",
+ "description": "Update card text when a version is available to download. {version} is the version number; keep it."
},
"update.card.versionAvailableInstall": {
- "message": "La version {version} est disponible à l’installation."
+ "message": "La version {version} est disponible à l’installation.",
+ "description": "Update card text when a version is available to install. {version} is the version number; keep it."
},
"update.card.whatsNew": {
- "message": "Quoi de neuf ?"
+ "message": "Quoi de neuf ?",
+ "description": "Link / label that opens the release notes."
},
"update.card.installNow": {
- "message": "Installer maintenant"
+ "message": "Installer maintenant",
+ "description": "Update card button: install now. Keep short."
},
"update.card.getInstaller": {
- "message": "Télécharger"
+ "message": "Télécharger",
+ "description": "Update card button: download the installer."
},
"update.card.autoCheckInterval": {
- "message": "NetBird vérifie les mises à jour en arrière-plan."
+ "message": "NetBird vérifie les mises à jour en arrière-plan.",
+ "description": "Note that NetBird checks for updates in the background."
},
"update.card.changelog": {
- "message": "Journal des modifications"
+ "message": "Journal des modifications",
+ "description": "Link / label: Changelog."
},
"update.card.onLatestVersion": {
- "message": "Vous utilisez la dernière version"
+ "message": "Vous utilisez la dernière version",
+ "description": "Shown when the client is already up to date."
},
"update.header.tooltip": {
- "message": "Mise à jour disponible"
+ "message": "Mise à jour disponible",
+ "description": "Tooltip on the header update badge."
},
"update.overlay.updatingVersion": {
- "message": "Mise à jour de NetBird vers v{version}"
+ "message": "Mise à jour de NetBird vers v{version}",
+ "description": "Heading in the install-progress window while updating to a specific version. {version} is the version number; keep it. The 'v' prefix is part of the version display."
},
"update.overlay.updating": {
- "message": "Mise à jour de NetBird"
+ "message": "Mise à jour de NetBird",
+ "description": "Heading in the install-progress window while updating when the target version isn't known."
},
"update.overlay.description": {
- "message": "Une version plus récente est disponible et en cours d’installation. NetBird redémarrera automatiquement une fois la mise à jour terminée."
+ "message": "Une version plus récente est disponible et en cours d’installation. NetBird redémarrera automatiquement une fois la mise à jour terminée.",
+ "description": "Install-progress window body explaining NetBird will restart automatically after the update."
},
"update.overlay.error.timeoutTitle": {
- "message": "La mise à jour prend trop de temps"
+ "message": "La mise à jour prend trop de temps",
+ "description": "Install-progress window error title: the update took too long."
},
"update.overlay.error.timeoutDescription": {
- "message": "L’installation de {target} a pris trop de temps et ne s’est pas terminée."
+ "message": "L’installation de {target} a pris trop de temps et ne s’est pas terminée.",
+ "description": "Install-progress window error body for a timeout. {target} is the target-version label (see update.overlay.error.targetVersion / targetFallback); keep it."
},
"update.overlay.error.canceledTitle": {
- "message": "La mise à jour a été interrompue"
+ "message": "La mise à jour a été interrompue",
+ "description": "Install-progress window error title: the update was stopped / canceled."
},
"update.overlay.error.canceledDescription": {
- "message": "La mise à jour vers {target} a été annulée avant de se terminer."
+ "message": "La mise à jour vers {target} a été annulée avant de se terminer.",
+ "description": "Install-progress window error body for a canceled update. {target} is the target-version label; keep it."
},
"update.overlay.error.failTitle": {
- "message": "Impossible d’installer la mise à jour"
+ "message": "Impossible d’installer la mise à jour",
+ "description": "Install-progress window error title: the update couldn't be installed."
},
"update.overlay.error.failDescription": {
- "message": "Impossible d’installer {target}."
+ "message": "Impossible d’installer {target}.",
+ "description": "Install-progress window error body for a failed install. {target} is the target-version label; keep it."
},
"update.overlay.error.unknownMessage": {
- "message": "erreur inconnue"
+ "message": "erreur inconnue",
+ "description": "Fallback text for an unspecified error, used inside other messages."
},
"update.overlay.error.targetVersion": {
- "message": "v{version}"
+ "message": "v{version}",
+ "description": "The target-version label substituted into {target}. {version} is a number; keep the 'v' prefix."
},
"update.overlay.error.targetFallback": {
- "message": "la nouvelle version"
+ "message": "la nouvelle version",
+ "description": "Fallback target label used when the version isn't known, substituted into {target}."
},
"update.error.loadStateTitle": {
- "message": "Échec du chargement de l’état de mise à jour"
+ "message": "Échec du chargement de l’état de mise à jour",
+ "description": "Error-dialog title when loading update state fails."
},
"update.error.triggerTitle": {
- "message": "Échec du démarrage de la mise à jour"
+ "message": "Échec du démarrage de la mise à jour",
+ "description": "Error-dialog title when starting the update fails."
},
"update.page.versionLine": {
- "message": "Mise à jour du client vers : {version}."
+ "message": "Mise à jour du client vers : {version}.",
+ "description": "Install-progress window text naming the target version. {version} is the version number; keep it."
},
"update.page.versionLineGeneric": {
- "message": "Mise à jour du client."
+ "message": "Mise à jour du client.",
+ "description": "Install-progress text used when the target version isn't known."
},
"update.page.outdated": {
- "message": "La version de votre client est antérieure à la version de mise à jour automatique définie dans Management."
+ "message": "La version de votre client est antérieure à la version de mise à jour automatique définie dans Management.",
+ "description": "Note that the client is older than the auto-update version set in Management. 'Management' = the NetBird management server / console."
},
"update.page.status.running": {
- "message": "Mise à jour en cours"
+ "message": "Mise à jour en cours",
+ "description": "Install status: updating."
},
"update.page.status.timeout": {
- "message": "La mise à jour a expiré. Veuillez réessayer."
+ "message": "La mise à jour a expiré. Veuillez réessayer.",
+ "description": "Install status: timed out; asks the user to retry."
},
"update.page.status.canceled": {
- "message": "Mise à jour annulée."
+ "message": "Mise à jour annulée.",
+ "description": "Install status: canceled."
},
"update.page.status.failed": {
- "message": "Échec de la mise à jour : {message}"
+ "message": "Échec de la mise à jour : {message}",
+ "description": "Install status: failed. {message} is the error detail; keep it."
},
"update.page.status.unknownError": {
- "message": "erreur de mise à jour inconnue"
+ "message": "erreur de mise à jour inconnue",
+ "description": "Fallback text for an unknown update error, used inside update.page.status.failed."
},
"update.page.failedTitle": {
- "message": "Échec de la mise à jour"
+ "message": "Échec de la mise à jour",
+ "description": "Heading shown when the install failed."
},
"update.page.timeoutMessage": {
- "message": "La mise à jour a expiré."
+ "message": "La mise à jour a expiré.",
+ "description": "Message shown when the install timed out."
},
"update.page.dontClose": {
- "message": "Veuillez ne pas fermer cette fenêtre."
+ "message": "Veuillez ne pas fermer cette fenêtre.",
+ "description": "Warning asking the user not to close the install window."
},
"update.page.updating": {
- "message": "Mise à jour…"
+ "message": "Mise à jour…",
+ "description": "Short status: updating. Ends with an ellipsis."
},
"update.page.complete": {
- "message": "Mise à jour terminée"
+ "message": "Mise à jour terminée",
+ "description": "Short status: update complete."
},
"update.page.failed": {
- "message": "Échec de la mise à jour"
+ "message": "Échec de la mise à jour",
+ "description": "Short status: update failed."
},
"window.title.settings": {
- "message": "Paramètres"
+ "message": "Paramètres",
+ "description": "OS window-chrome title for the Settings window. The app prefixes it with 'NetBird - '."
},
"window.title.signIn": {
- "message": "Connexion"
+ "message": "Connexion",
+ "description": "OS window-chrome title for the sign-in window."
},
"window.title.sessionExpiration": {
- "message": "Expiration de session"
+ "message": "Expiration de session",
+ "description": "OS window-chrome title for the session-expiration window."
},
"window.title.updating": {
- "message": "Mise à jour"
+ "message": "Mise à jour",
+ "description": "OS window-chrome title for the update / install window."
},
"window.title.welcome": {
- "message": "Bienvenue dans NetBird"
+ "message": "Bienvenue dans NetBird",
+ "description": "OS window-chrome title for the first-launch welcome window. 'NetBird' — brand."
},
"window.title.error": {
- "message": "Erreur"
+ "message": "Erreur",
+ "description": "OS window-chrome title for the error window."
},
"welcome.title": {
- "message": "Cherchez NetBird dans votre barre d’état système"
+ "message": "Cherchez NetBird dans votre barre d’état système",
+ "description": "Heading on the first onboarding step, pointing the user to the tray icon. Shown on Windows and Linux; macOS uses welcome.titleMac."
},
"welcome.titleMac": {
- "message": "Cherchez NetBird dans votre barre des menus"
+ "message": "Cherchez NetBird dans votre barre des menus",
+ "description": "Heading on the first onboarding step on macOS, pointing the user to the menu bar icon. Use your language's Apple term for the macOS menu bar."
},
"welcome.description": {
- "message": "NetBird se trouve dans votre barre d’état système. Cliquez sur l’icône pour vous connecter, changer de profil ou ouvrir les paramètres."
+ "message": "NetBird se trouve dans votre barre d’état système. Cliquez sur l’icône pour vous connecter, changer de profil ou ouvrir les paramètres.",
+ "description": "Body of the first onboarding step explaining the tray icon. Shown on Windows and Linux; macOS uses welcome.descriptionMac."
},
"welcome.descriptionMac": {
- "message": "NetBird se trouve dans votre barre des menus. Cliquez sur l’icône pour vous connecter, changer de profil ou ouvrir les paramètres."
+ "message": "NetBird se trouve dans votre barre des menus. Cliquez sur l’icône pour vous connecter, changer de profil ou ouvrir les paramètres.",
+ "description": "Body of the first onboarding step on macOS explaining the menu bar icon. Use your language's Apple term for the macOS menu bar."
},
"welcome.continue": {
- "message": "Continuer"
+ "message": "Continuer",
+ "description": "Primary button to advance the onboarding. Keep short."
},
"welcome.back": {
- "message": "Retour"
+ "message": "Retour",
+ "description": "Button to go back a step in onboarding. Keep short."
},
"welcome.management.title": {
- "message": "Configurer NetBird"
+ "message": "Configurer NetBird",
+ "description": "Heading on the onboarding step for choosing a management server."
},
"welcome.management.description": {
- "message": "Cliquez sur Continuer pour commencer, ou choisissez Auto-hébergé si vous disposez de votre propre serveur NetBird."
+ "message": "Cliquez sur Continuer pour commencer, ou choisissez Auto-hébergé si vous disposez de votre propre serveur NetBird.",
+ "description": "Body of the management step; mentions choosing Self-hosted if the user runs their own server."
},
"welcome.management.cloud.title": {
- "message": "NetBird Cloud"
+ "message": "NetBird Cloud",
+ "description": "Option title: NetBird Cloud. Brand — do not translate 'NetBird Cloud'."
},
"welcome.management.cloud.description": {
- "message": "Utilisez notre service hébergé. Aucune configuration requise."
+ "message": "Utilisez notre service hébergé. Aucune configuration requise.",
+ "description": "Option body for NetBird Cloud (hosted service, no setup required)."
},
"welcome.management.selfHosted.title": {
- "message": "Auto-hébergé"
+ "message": "Auto-hébergé",
+ "description": "Option title: Self-hosted."
},
"welcome.management.selfHosted.description": {
- "message": "Connectez-vous à votre propre serveur de gestion."
+ "message": "Connectez-vous à votre propre serveur de gestion.",
+ "description": "Option body for connecting to your own management server."
},
"welcome.management.urlLabel": {
- "message": "URL du serveur de gestion"
+ "message": "URL du serveur de gestion",
+ "description": "Field label for the management-server URL."
},
"welcome.management.urlPlaceholder": {
- "message": "https://netbird.selfhosted.com:443"
+ "message": "https://netbird.selfhosted.com:443",
+ "description": "Example URL placeholder. Sample URL — do not translate it."
},
"welcome.management.urlInvalid": {
- "message": "Veuillez saisir une URL valide, ex. https://netbird.selfhosted.com:443"
+ "message": "Veuillez saisir une URL valide, ex. https://netbird.selfhosted.com:443",
+ "description": "Validation message for an invalid URL. The example URL stays as-is."
},
"welcome.management.urlUnreachable": {
- "message": "Impossible de joindre ce serveur. Vérifiez l’URL ou votre réseau, puis continuez si vous êtes sûr qu’elle est correcte."
+ "message": "Impossible de joindre ce serveur. Vérifiez l’URL ou votre réseau, puis continuez si vous êtes sûr qu’elle est correcte.",
+ "description": "Soft warning when the server couldn't be reached during onboarding; the user may continue anyway."
},
"welcome.management.checking": {
- "message": "Vérification…"
+ "message": "Vérification…",
+ "description": "Status shown while checking the server URL. Ends with an ellipsis."
},
"browserLogin.title": {
- "message": "Continuez dans votre navigateur pour terminer la connexion"
+ "message": "Continuez dans votre navigateur pour terminer la connexion",
+ "description": "Heading telling the user to finish signing in via their browser."
},
"browserLogin.notSeeing": {
- "message": "Vous ne voyez pas l’onglet du navigateur ?"
+ "message": "Vous ne voyez pas l’onglet du navigateur ?",
+ "description": "Prompt asking whether the user doesn't see the opened browser tab."
},
"browserLogin.tryAgain": {
- "message": "Réessayer"
+ "message": "Réessayer",
+ "description": "Button to re-open the browser sign-in page. Keep short."
},
"browserLogin.openFailedTitle": {
- "message": "Échec de l’ouverture du navigateur"
+ "message": "Échec de l’ouverture du navigateur",
+ "description": "Error-dialog title when the browser couldn't be opened."
},
"sessionExpiration.title": {
- "message": "La session expire bientôt"
+ "message": "La session expire bientôt",
+ "description": "Heading warning the session will expire soon."
},
"sessionExpiration.titleLater": {
- "message": "Votre session va expirer"
+ "message": "Votre session va expirer",
+ "description": "Alternate, less-urgent heading: the session will expire."
},
"sessionExpiration.description": {
- "message": "Cet appareil sera bientôt déconnecté. Renouvelez via une connexion dans le navigateur."
+ "message": "Cet appareil sera bientôt déconnecté. Renouvelez via une connexion dans le navigateur.",
+ "description": "Body warning the device will disconnect soon; renew via a browser sign-in."
},
"sessionExpiration.descriptionLater": {
- "message": "Une connexion dans le navigateur maintient cet appareil connecté à votre réseau."
+ "message": "Une connexion dans le navigateur maintient cet appareil connecté à votre réseau.",
+ "description": "Body for the less-urgent variant; a browser sign-in keeps the device connected."
},
"sessionExpiration.stay": {
- "message": "Renouveler la session"
+ "message": "Renouveler la session",
+ "description": "Button to renew the session (keep connected). Keep short."
},
"sessionExpiration.authenticate": {
- "message": "S’authentifier"
+ "message": "S’authentifier",
+ "description": "Button to authenticate / sign in. Keep short."
},
"sessionExpiration.logout": {
- "message": "Se déconnecter"
+ "message": "Se déconnecter",
+ "description": "Button to log out. Keep short."
},
"sessionExpiration.expired": {
- "message": "Session expirée"
+ "message": "Session expirée",
+ "description": "Heading shown once the session has actually expired."
},
"sessionExpiration.expiredDescription": {
- "message": "Appareil déconnecté. Authentifiez-vous via une connexion dans le navigateur pour vous reconnecter."
+ "message": "Appareil déconnecté. Authentifiez-vous via une connexion dans le navigateur pour vous reconnecter.",
+ "description": "Body shown after expiry; authenticate via a browser sign-in to reconnect."
},
"sessionExpiration.close": {
- "message": "Fermer"
+ "message": "Fermer",
+ "description": "Close button on the session window. Keep short."
},
"sessionExpiration.extendFailedTitle": {
- "message": "Échec de la prolongation de la session"
+ "message": "Échec de la prolongation de la session",
+ "description": "Error-dialog title when extending the session fails."
},
"sessionExpiration.logoutFailedTitle": {
- "message": "Échec de la déconnexion"
+ "message": "Échec de la déconnexion",
+ "description": "Error-dialog title when logging out fails."
},
"peers.search.placeholder": {
- "message": "Rechercher par nom ou IP"
+ "message": "Rechercher par nom ou IP",
+ "description": "Placeholder in the peers search field."
},
"peers.filter.all": {
- "message": "Tous"
+ "message": "Tous",
+ "description": "Peers filter option: All. Keep short."
},
"peers.filter.online": {
- "message": "En ligne"
+ "message": "En ligne",
+ "description": "Peers filter option: Online. Keep short."
},
"peers.filter.offline": {
- "message": "Hors ligne"
+ "message": "Hors ligne",
+ "description": "Peers filter option: Offline. Keep short."
},
"peers.empty.title": {
- "message": "Aucun pair disponible"
+ "message": "Aucun pair disponible",
+ "description": "Title of the empty state when no peers are available."
},
"peers.empty.description": {
- "message": "Soit vous n’avez aucun pair disponible, soit vous n’y avez pas accès."
+ "message": "Soit vous n’avez aucun pair disponible, soit vous n’y avez pas accès.",
+ "description": "Body of the no-peers empty state."
},
"peers.details.domain": {
- "message": "Domaine"
+ "message": "Domaine",
+ "description": "Peer detail label: Domain."
},
"peers.details.netbirdIp": {
- "message": "IP NetBird"
+ "message": "IP NetBird",
+ "description": "Peer detail label: NetBird IP address. 'NetBird' — brand; 'IP' — keep acronym."
},
"peers.details.netbirdIpv6": {
- "message": "IPv6 NetBird"
+ "message": "IPv6 NetBird",
+ "description": "Peer detail label: NetBird IPv6 address. Keep 'NetBird' and 'IPv6'."
},
"peers.details.publicKey": {
- "message": "Clé publique"
+ "message": "Clé publique",
+ "description": "Peer detail label: WireGuard public key."
},
"peers.details.connection": {
- "message": "Connexion"
+ "message": "Connexion",
+ "description": "Peer detail label: Connection."
},
"peers.details.latency": {
- "message": "Latence"
+ "message": "Latence",
+ "description": "Peer detail label: Latency."
},
"peers.details.lastHandshake": {
- "message": "Dernier handshake"
+ "message": "Dernier handshake",
+ "description": "Peer detail label: time of the last WireGuard handshake."
},
"peers.details.statusSince": {
- "message": "Dernière mise à jour de connexion"
+ "message": "Dernière mise à jour de connexion",
+ "description": "Peer detail label: time since the last connection-status update."
},
"peers.details.bytes": {
- "message": "Octets"
+ "message": "Octets",
+ "description": "Peer detail label: Bytes (data transferred)."
},
"peers.details.bytesSent": {
- "message": "Envoyés"
+ "message": "Envoyés",
+ "description": "Peer detail label: bytes sent."
},
"peers.details.bytesReceived": {
- "message": "Reçus"
+ "message": "Reçus",
+ "description": "Peer detail label: bytes received."
},
"peers.details.localIce": {
- "message": "ICE local"
+ "message": "ICE local",
+ "description": "Peer detail label: local ICE candidate. 'ICE' — keep acronym."
},
"peers.details.remoteIce": {
- "message": "ICE distant"
+ "message": "ICE distant",
+ "description": "Peer detail label: remote ICE candidate. 'ICE' — keep acronym."
},
"peers.details.never": {
- "message": "Jamais"
+ "message": "Jamais",
+ "description": "Value shown when an event has never happened (e.g. last handshake = Never)."
},
"peers.details.justNow": {
- "message": "À l’instant"
+ "message": "À l’instant",
+ "description": "Relative-time value meaning a moment ago."
},
"peers.details.refresh": {
- "message": "Actualiser"
+ "message": "Actualiser",
+ "description": "Button to refresh peer details. Keep short."
},
"peers.status.connected": {
- "message": "Connecté"
+ "message": "Connecté",
+ "description": "Peer status: connected."
},
"peers.status.connecting": {
- "message": "Connexion"
+ "message": "Connexion",
+ "description": "Peer status: connecting."
},
"peers.status.disconnected": {
- "message": "Déconnecté"
+ "message": "Déconnecté",
+ "description": "Peer status: disconnected."
},
"peers.details.relayAddress": {
- "message": "Relais"
+ "message": "Relais",
+ "description": "Peer detail label: Relay (relay-server address)."
},
"peers.details.networks": {
- "message": "Ressources"
+ "message": "Ressources",
+ "description": "Peer detail label for the peer's network resources. Labelled 'Resources' in the UI."
},
"peers.details.relayed": {
- "message": "Relayée"
+ "message": "Relayée",
+ "description": "Connection-type value: the connection is relayed (not direct). Technical term."
},
"peers.details.p2p": {
- "message": "P2P"
+ "message": "P2P",
+ "description": "Connection-type value: peer-to-peer (direct). 'P2P' — keep as-is."
},
"peers.details.rosenpass": {
- "message": "Rosenpass activé"
+ "message": "Rosenpass activé",
+ "description": "Peer detail indicating Rosenpass (quantum-resistance) is enabled. 'Rosenpass' — product name, do not translate."
},
"networks.search.placeholder": {
- "message": "Rechercher par réseau ou domaine"
+ "message": "Rechercher par réseau ou domaine",
+ "description": "Placeholder in the resources search field."
},
"networks.filter.all": {
- "message": "Toutes"
+ "message": "Toutes",
+ "description": "Resources filter: All. Keep short."
},
"networks.filter.active": {
- "message": "Actives"
+ "message": "Actives",
+ "description": "Resources filter: Active. Keep short."
},
"networks.filter.overlapping": {
- "message": "Chevauchantes"
+ "message": "Chevauchantes",
+ "description": "Resources filter: Overlapping (overlapping IP ranges). Keep short."
},
"networks.empty.title": {
- "message": "Aucune ressource disponible"
+ "message": "Aucune ressource disponible",
+ "description": "Title of the empty state when no resources are available."
},
"networks.empty.description": {
- "message": "Soit vous n’avez aucune ressource réseau disponible, soit vous n’y avez pas accès."
+ "message": "Soit vous n’avez aucune ressource réseau disponible, soit vous n’y avez pas accès.",
+ "description": "Body of the no-resources empty state."
},
"networks.selected": {
- "message": "Sélectionnée"
+ "message": "Sélectionnée",
+ "description": "Label / badge: the resource is selected (enabled)."
},
"networks.unselected": {
- "message": "Non sélectionnée"
+ "message": "Non sélectionnée",
+ "description": "Label / badge: the resource is not selected."
},
"networks.ips.heading": {
- "message": "IP résolues"
+ "message": "IP résolues",
+ "description": "Heading for the list of a resource's resolved IP addresses."
},
"networks.bulk.selectionCount": {
- "message": "{selected} sur {total} actives"
+ "message": "{selected} sur {total} actives",
+ "description": "Header showing how many resources are active. {selected} and {total} are numbers; keep both."
},
"networks.bulk.enableAll": {
- "message": "Tout activer"
+ "message": "Tout activer",
+ "description": "Button to enable all resources. Keep short."
},
"networks.bulk.disableAll": {
- "message": "Tout désactiver"
+ "message": "Tout désactiver",
+ "description": "Button to disable all resources. Keep short."
},
"exitNodes.search.placeholder": {
- "message": "Rechercher des nœuds de sortie"
+ "message": "Rechercher des nœuds de sortie",
+ "description": "Placeholder in the exit-nodes search field."
},
"exitNodes.none": {
- "message": "Aucun"
+ "message": "Aucun",
+ "description": "Option meaning no exit node. Keep short."
},
"exitNodes.empty.title": {
- "message": "Aucun nœud de sortie disponible"
+ "message": "Aucun nœud de sortie disponible",
+ "description": "Title of the empty state when no exit nodes are available."
},
"exitNodes.empty.description": {
- "message": "Aucun nœud de sortie n’a été partagé avec ce pair."
+ "message": "Aucun nœud de sortie n’a été partagé avec ce pair.",
+ "description": "Body of the no-exit-nodes empty state."
},
"exitNodes.card.title": {
- "message": "Nœud de sortie"
+ "message": "Nœud de sortie",
+ "description": "Card heading: Exit Node."
},
"exitNodes.card.statusActive": {
- "message": "Actif"
+ "message": "Actif",
+ "description": "Exit node card status: Active."
},
"exitNodes.card.statusInactive": {
- "message": "Inactif"
+ "message": "Inactif",
+ "description": "Exit node card status: Inactive."
},
"exitNodes.dropdown.noneTitle": {
- "message": "Aucun"
+ "message": "Aucun",
+ "description": "Dropdown option title: None (no exit node)."
},
"exitNodes.dropdown.noneDescription": {
- "message": "Connexion directe sans nœud de sortie"
+ "message": "Connexion directe sans nœud de sortie",
+ "description": "Dropdown option body for None: direct connection without an exit node."
},
"quickActions.connect": {
- "message": "Se connecter"
+ "message": "Se connecter",
+ "description": "Quick-action button: Connect. Keep short."
},
"quickActions.disconnect": {
- "message": "Se déconnecter"
+ "message": "Se déconnecter",
+ "description": "Quick-action button: Disconnect. Keep short."
},
"daemon.unavailable.title": {
- "message": "Le service NetBird n’est pas en cours d’exécution"
+ "message": "Le service NetBird n’est pas en cours d’exécution",
+ "description": "Title of the overlay shown when the NetBird background service isn't running."
},
"daemon.unavailable.description": {
- "message": "L’application se reconnectera automatiquement une fois le service en cours d’exécution."
+ "message": "L’application se reconnectera automatiquement une fois le service en cours d’exécution.",
+ "description": "Body reassuring the user the app will reconnect once the service is running."
},
"daemon.unavailable.docsLink": {
- "message": "Documentation"
+ "message": "Documentation",
+ "description": "Documentation link on the daemon-unavailable overlay."
},
"daemon.outdated.title": {
- "message": "Le Client NetBird est obsolète"
+ "message": "Le Client NetBird est obsolète",
+ "description": "Title of the overlay shown when the NetBird client (daemon) is too old to drive this UI."
},
"daemon.outdated.description": {
- "message": "La nouvelle GUI n'est pas compatible avec votre ancien client. Mettez à jour votre client pour utiliser la nouvelle application."
+ "message": "La nouvelle GUI n'est pas compatible avec votre ancien client. Mettez à jour votre client pour utiliser la nouvelle application.",
+ "description": "Body of the daemon-outdated overlay explaining that the GUI is newer than the client and the client must be updated."
},
"daemon.outdated.download": {
- "message": "Télécharger la dernière version"
+ "message": "Télécharger la dernière version",
+ "description": "Button on the daemon-outdated overlay that opens the download page for the latest release."
},
"error.jwt_clock_skew": {
- "message": "Échec de la connexion : l’horloge de cet appareil n’est pas synchronisée avec le serveur. Veuillez synchroniser l’horloge de votre système et réessayer."
+ "message": "Échec de la connexion : l’horloge de cet appareil n’est pas synchronisée avec le serveur. Veuillez synchroniser l’horloge de votre système et réessayer.",
+ "description": "Sign-in error shown to the user: the device clock is out of sync with the server."
},
"error.jwt_expired": {
- "message": "Votre jeton de connexion a expiré. Veuillez vous reconnecter."
+ "message": "Votre jeton de connexion a expiré. Veuillez vous reconnecter.",
+ "description": "Sign-in error: the sign-in token expired; sign in again."
},
"error.jwt_signature_invalid": {
- "message": "Échec de la connexion : la signature du jeton est invalide. Veuillez contacter votre administrateur."
+ "message": "Échec de la connexion : la signature du jeton est invalide. Veuillez contacter votre administrateur.",
+ "description": "Sign-in error: the token signature is invalid; contact the administrator."
},
"error.session_expired": {
- "message": "Votre session a expiré. Veuillez vous reconnecter."
+ "message": "Votre session a expiré. Veuillez vous reconnecter.",
+ "description": "Error: the session expired; sign in again."
},
"error.invalid_setup_key": {
- "message": "La clé d’installation est manquante ou invalide."
+ "message": "La clé d’installation est manquante ou invalide.",
+ "description": "Error: the setup key is missing or invalid. 'setup key' is a NetBird term."
},
"error.permission_denied": {
- "message": "La connexion a été rejetée par le serveur."
+ "message": "La connexion a été rejetée par le serveur.",
+ "description": "Error: the server rejected the sign-in."
},
"error.daemon_unreachable": {
- "message": "Le daemon NetBird ne répond pas. Veuillez vérifier que le service est en cours d’exécution."
+ "message": "Le daemon NetBird ne répond pas. Veuillez vérifier que le service est en cours d’exécution.",
+ "description": "Error: the NetBird background service isn't responding. 'daemon' = the background service."
},
"error.settings_locked": {
- "message": "Les paramètres ne peuvent pas être modifiés sur cet appareil : un administrateur les a verrouillés."
+ "message": "Les paramètres ne peuvent pas être modifiés sur cet appareil : un administrateur les a verrouillés.",
+ "description": "Error: the local daemon was started with update-settings disabled, so it refuses configuration changes."
},
"error.settings_managed_by_mdm": {
- "message": "Ce paramètre est géré par votre organisation et ne peut pas être modifié."
+ "message": "Ce paramètre est géré par votre organisation et ne peut pas être modifié.",
+ "description": "Error: the setting is enforced by an MDM policy. 'MDM' = mobile device management, the organization's device-management system."
},
"error.unknown": {
- "message": "L’opération a échoué."
+ "message": "L’opération a échoué.",
+ "description": "Generic fallback error message used when no specific error applies."
},
"error.elevation_unavailable": {
- "message": "NetBird n’a pas pu demander à ce système les privilèges nécessaires. Exécutez plutôt ceci :"
+ "message": "NetBird n’a pas pu demander à ce système les privilèges nécessaires. Exécutez plutôt ceci :",
+ "description": "Error: this computer has no way to prompt for elevated privileges. Followed by a copyable command that applies the setting from a terminal."
},
"error.elevation_failed": {
- "message": "La modification n’a pas pu être appliquée avec des privilèges élevés. Exécutez plutôt ceci :"
+ "message": "La modification n’a pas pu être appliquée avec des privilèges élevés. Exécutez plutôt ceci :",
+ "description": "Error: the authorization succeeded but applying the setting afterwards failed. Followed by a copyable command that applies the setting from a terminal."
},
"settings.ssh.privilege.actorRoot": {
- "message": "les privilèges root"
+ "message": "les privilèges root",
+ "description": "Fills {actor} in the settings.ssh.privilege.* messages on Linux, macOS and BSD, where the daemon requires the root account. 'root' is an account name and stays as it is; add the word for privileges or rights around it if the sentence needs one to read naturally."
},
"settings.ssh.privilege.actorAdministrator": {
- "message": "les privilèges administrateur"
+ "message": "les privilèges administrateur",
+ "description": "Fills {actor} in the settings.ssh.privilege.* messages on Windows, where the daemon requires an elevated administrator. The Windows term for the rights an account is asked to elevate to."
},
"settings.ssh.privilege.hint": {
- "message": "Nécessite {actor}. Exécutez plutôt ceci :"
+ "message": "Nécessite {actor}. Exécutez plutôt ceci :",
+ "description": "Help text under an SSH setting the user cannot change: it needs elevated privileges. {actor} is 'root' on Linux/macOS or 'administrator privileges' on Windows. Followed by a copyable command."
},
"settings.ssh.privilege.oneWay": {
- "message": "Vous pouvez le désactiver, mais le réactiver nécessite {actor}."
+ "message": "Vous pouvez le désactiver, mais le réactiver nécessite {actor}.",
+ "description": "Help text under an SSH setting that is already on: an unprivileged user may switch it off freely, and switching it on again is what needs the privileges. No command follows, since the direction they can take is theirs to take. {actor} is 'root' on Linux/macOS or 'administrator privileges' on Windows."
},
"settings.ssh.privilege.oneWayInverted": {
- "message": "Vous pouvez l’activer, mais le désactiver de nouveau nécessite {actor}."
+ "message": "Vous pouvez l’activer, mais le désactiver de nouveau nécessite {actor}.",
+ "description": "Same as settings.ssh.privilege.oneWay, for the SSH authentication setting once it has been switched off: switching it off again is what needs the privileges."
},
"settings.ssh.privilege.authorizePending": {
- "message": "En attente de l’autorisation…"
+ "message": "En attente de l’autorisation…",
+ "description": "Replaces the help text under a guarded SSH setting while the authorization prompt is open, which can take a few seconds to appear. Keep the trailing ellipsis."
}
}