chore(typo): retire tous les tirets cadratins/demi-cadratins + garde CI
Some checks failed
CI / Build & test (Node 24) (push) Has been cancelled
CI / Pack & boot smoke (Node 22) (push) Has been cancelled
CI / No em/en dashes (push) Has been cancelled
CI / Build & test (Node 22) (push) Has been cancelled
Deploy site (production) / build-and-deploy (push) Successful in 20s
Some checks failed
CI / Build & test (Node 24) (push) Has been cancelled
CI / Pack & boot smoke (Node 22) (push) Has been cancelled
CI / No em/en dashes (push) Has been cancelled
CI / Build & test (Node 22) (push) Has been cancelled
Deploy site (production) / build-and-deploy (push) Successful in 20s
Remplace les 547 tirets cadratins (U+2014) et demi-cadratins (U+2013) des fichiers versionnés par la ponctuation contextuelle adaptée (point médian, deux-points, virgule, parenthèses ; tiret simple pour les plages), sur 122 fichiers (appli, vitrine, doc, tests, workflows, scripts). Ajoute le job CI « lint-dashes » (git grep -P) qui échoue si un tiret cadratin/demi-cadratin réapparaît, hors logo binaire et captures brutes du terminal (fidélité des fixtures de détection de dialogue).
This commit is contained in:
@@ -21,13 +21,13 @@ export default {
|
||||
submit: 'Sign in',
|
||||
submitting: 'Signing in…',
|
||||
invalidToken: 'Invalid token',
|
||||
rateLimited: 'Too many attempts — please wait before retrying',
|
||||
rateLimited: 'Too many attempts. Please wait before retrying',
|
||||
genericError: 'Sign-in failed ({status})',
|
||||
},
|
||||
sessions: {
|
||||
title: 'Sessions',
|
||||
refresh: 'Refresh',
|
||||
empty: 'No sessions yet — start one below.',
|
||||
empty: 'No sessions yet. Start one below.',
|
||||
newSession: 'New session',
|
||||
cwdLabel: 'Working directory',
|
||||
cwdPlaceholder: '/absolute/path/to/project',
|
||||
@@ -91,10 +91,10 @@ export default {
|
||||
namePlaceholder: 'e.g. Payments stack',
|
||||
colorLabel: 'Color',
|
||||
reposLabel: 'Repositories',
|
||||
empty: 'No group yet — create one above.',
|
||||
empty: 'No group yet. Create one above.',
|
||||
noRepos: 'No repository selected.',
|
||||
noReposInGroup: 'No repository in this group yet — add some below.',
|
||||
noReposRegistered: 'No repository registered yet — add some from the dashboard first.',
|
||||
noReposInGroup: 'No repository in this group yet. Add some below.',
|
||||
noReposRegistered: 'No repository registered yet. Add some from the dashboard first.',
|
||||
open: 'Open',
|
||||
edit: 'Edit repositories',
|
||||
editDone: 'Done',
|
||||
@@ -108,13 +108,13 @@ export default {
|
||||
viewList: 'Repos',
|
||||
viewGrid: 'Terminals',
|
||||
gridEmpty: 'No active session in this group.',
|
||||
gridCapped: 'Showing {shown} of {total} sessions — close some terminals to see the rest.',
|
||||
gridCapped: 'Showing {shown} of {total} sessions. Close some terminals to see the rest.',
|
||||
newFeature: 'New group session',
|
||||
spanBadge: 'group · {n} repo | group · {n} repos',
|
||||
},
|
||||
crossRepo: {
|
||||
title: 'New group session',
|
||||
intro: 'Launch one Claude session that spans every repo in this group — a single conversation across all of them.',
|
||||
intro: 'Launch one Claude session that spans every repo in this group: a single conversation across all of them.',
|
||||
modeLabel: 'Directories',
|
||||
modeFeature: 'New branch in each repo',
|
||||
modeMain: 'Main checkouts',
|
||||
@@ -140,7 +140,7 @@ export default {
|
||||
remove: 'Remove',
|
||||
pathLabel: 'Repository path',
|
||||
pathPlaceholder: '/absolute/path/to/repo',
|
||||
empty: 'No repository registered yet — add one above, or scan for repos.',
|
||||
empty: 'No repository registered yet. Add one above, or scan for repos.',
|
||||
invalid: 'unavailable',
|
||||
scan: 'Scan',
|
||||
scanResult: 'No new repository found | 1 new repository added | {n} new repositories added',
|
||||
@@ -209,7 +209,7 @@ export default {
|
||||
files: 'Files',
|
||||
changes: 'Changes',
|
||||
noChanges: 'No changes',
|
||||
changesTruncated: 'Too many changes — list truncated.',
|
||||
changesTruncated: 'Too many changes. List truncated.',
|
||||
terminal: 'Terminal',
|
||||
editor: 'Editor',
|
||||
diff: 'Diff',
|
||||
@@ -226,7 +226,7 @@ export default {
|
||||
overwrite: 'Overwrite',
|
||||
},
|
||||
diff: {
|
||||
binary: 'Binary file — no text diff.',
|
||||
binary: 'Binary file. No text diff.',
|
||||
tooLarge: 'Diff too large to display.',
|
||||
noChanges: 'No changes in this file.',
|
||||
},
|
||||
@@ -304,7 +304,7 @@ export default {
|
||||
observer: 'observer (read-only)',
|
||||
sessionEnded: 'Session ended',
|
||||
back: 'Sessions',
|
||||
notAttachable: 'This session runs outside Arboretum — fork it to interact, or resume it once it has stopped.',
|
||||
notAttachable: 'This session runs outside Arboretum. Fork it to interact, or resume it once it has stopped.',
|
||||
fullscreen: 'Fullscreen',
|
||||
exitFullscreen: 'Exit fullscreen',
|
||||
maximize: 'Maximize',
|
||||
@@ -316,7 +316,7 @@ export default {
|
||||
push: {
|
||||
enable: 'Enable notifications',
|
||||
disable: 'Notifications on',
|
||||
denied: 'Notification permission denied — enable it in your browser settings.',
|
||||
denied: 'Notification permission denied. Enable it in your browser settings.',
|
||||
unsupported: 'Push needs HTTPS (e.g. Tailscale Serve); on iOS, install the app to your home screen first.',
|
||||
},
|
||||
fs: {
|
||||
@@ -329,7 +329,7 @@ export default {
|
||||
repoBadge: 'repo',
|
||||
},
|
||||
ws: {
|
||||
reconnecting: 'Connection lost — reconnecting…',
|
||||
reconnecting: 'Connection lost. Reconnecting…',
|
||||
},
|
||||
nav: {
|
||||
worktrees: 'Worktrees',
|
||||
@@ -473,7 +473,7 @@ export default {
|
||||
preferencesHint: 'These apply to this browser only.',
|
||||
language: 'Language',
|
||||
notifications: 'Notifications',
|
||||
notificationsEnabled: 'Enabled — you will be notified when a session needs input.',
|
||||
notificationsEnabled: 'Enabled. You will be notified when a session needs input.',
|
||||
notificationsDisabled: 'Disabled.',
|
||||
enableNotifications: 'Enable notifications',
|
||||
disableNotifications: 'Disable notifications',
|
||||
@@ -488,7 +488,7 @@ export default {
|
||||
newTokenPlaceholder: 'e.g. phone, laptop',
|
||||
createToken: 'Create token',
|
||||
tokenCreated: 'Token created',
|
||||
copyTokenHint: 'Copy this token now — for security it will never be shown again.',
|
||||
copyTokenHint: 'Copy this token now. For security it will never be shown again.',
|
||||
copy: 'Copy',
|
||||
copied: 'Copied',
|
||||
current: 'current',
|
||||
@@ -498,7 +498,7 @@ export default {
|
||||
revoke: 'Revoke',
|
||||
confirmRevoke: 'Confirm revoke',
|
||||
tokenRevoked: 'Token revoked',
|
||||
lastTokenError: 'You cannot revoke the last active token — create another one first.',
|
||||
lastTokenError: 'You cannot revoke the last active token. Create another one first.',
|
||||
save: 'Save',
|
||||
saved: 'Saved',
|
||||
// Sécurité & conformité
|
||||
@@ -513,21 +513,21 @@ export default {
|
||||
discovery: 'Repository discovery',
|
||||
discoveryHint: 'Arboretum scans these folders for git repositories and registers them automatically. Hidden repos are kept and never re-added.',
|
||||
scanRoots: 'Scan folders',
|
||||
scanRootsEmpty: 'No folder configured — your home directory is used by default.',
|
||||
scanRootsEmpty: 'No folder configured. Your home directory is used by default.',
|
||||
addRoot: 'Add folder',
|
||||
removeRoot: 'Remove',
|
||||
scanInterval: 'Re-scan interval (minutes)',
|
||||
scanIntervalHint: '0 disables periodic scanning. Changes apply on the next daemon restart.',
|
||||
// Sessions (rétention / archivage auto)
|
||||
sessions: 'Sessions',
|
||||
sessionsHint: 'Finished sessions older than the retention window are automatically archived (hidden from the list by default). Nothing is deleted — archived sessions stay resumable and forkable.',
|
||||
sessionsHint: 'Finished sessions older than the retention window are automatically archived (hidden from the list by default). Nothing is deleted. Archived sessions stay resumable and forkable.',
|
||||
retentionDays: 'Auto-archive after (days)',
|
||||
retentionDaysHint: '0 never archives. Archived sessions are hidden by default; toggle "Show archived" in the sessions list to see them.',
|
||||
// Claude CLI
|
||||
claudeCli: 'Claude CLI',
|
||||
claudeCliHint: 'Where Arboretum finds the `claude` binary and its data. Handy when the daemon runs as a service with a minimal PATH that does not include ~/.local/bin.',
|
||||
claudeBinStatusOk: 'Detected',
|
||||
claudeBinStatusNotFound: 'Not found — sessions cannot start until this is resolved.',
|
||||
claudeBinStatusNotFound: 'Not found. Sessions cannot start until this is resolved.',
|
||||
claudeBinStatusBadPath: 'The configured path is not an executable file.',
|
||||
claudeBinSourceConfigured: 'configured',
|
||||
claudeBinSourcePath: 'PATH',
|
||||
@@ -539,7 +539,7 @@ export default {
|
||||
claudeHomePlaceholder: 'e.g. /home/you/.claude',
|
||||
// Serveur (lecture seule)
|
||||
server: 'Server',
|
||||
serverHint: 'Set at startup via CLI flags — changing them requires restarting the daemon.',
|
||||
serverHint: 'Set at startup via CLI flags. Changing them requires restarting the daemon.',
|
||||
version: 'Version',
|
||||
port: 'Port',
|
||||
bind: 'Bind address',
|
||||
|
||||
@@ -23,13 +23,13 @@ const fr: typeof en = {
|
||||
submit: 'Se connecter',
|
||||
submitting: 'Connexion…',
|
||||
invalidToken: 'Jeton invalide',
|
||||
rateLimited: 'Trop de tentatives — patientez avant de réessayer',
|
||||
rateLimited: 'Trop de tentatives. Patientez avant de réessayer',
|
||||
genericError: 'Échec de la connexion ({status})',
|
||||
},
|
||||
sessions: {
|
||||
title: 'Sessions',
|
||||
refresh: 'Rafraîchir',
|
||||
empty: 'Aucune session — démarrez-en une ci-dessous.',
|
||||
empty: 'Aucune session. Démarrez-en une ci-dessous.',
|
||||
newSession: 'Nouvelle session',
|
||||
cwdLabel: 'Répertoire de travail',
|
||||
cwdPlaceholder: '/chemin/absolu/du/projet',
|
||||
@@ -93,10 +93,10 @@ const fr: typeof en = {
|
||||
namePlaceholder: 'ex. Stack paiements',
|
||||
colorLabel: 'Couleur',
|
||||
reposLabel: 'Dépôts',
|
||||
empty: 'Aucun groupe — créez-en un ci-dessus.',
|
||||
empty: 'Aucun groupe. Créez-en un ci-dessus.',
|
||||
noRepos: 'Aucun dépôt sélectionné.',
|
||||
noReposInGroup: 'Aucun dépôt dans ce groupe — ajoutez-en ci-dessous.',
|
||||
noReposRegistered: 'Aucun dépôt enregistré — ajoutez-en d’abord depuis le tableau de bord.',
|
||||
noReposInGroup: 'Aucun dépôt dans ce groupe. Ajoutez-en ci-dessous.',
|
||||
noReposRegistered: 'Aucun dépôt enregistré. Ajoutez-en d’abord depuis le tableau de bord.',
|
||||
open: 'Ouvrir',
|
||||
edit: 'Modifier les dépôts',
|
||||
editDone: 'Terminé',
|
||||
@@ -110,13 +110,13 @@ const fr: typeof en = {
|
||||
viewList: 'Dépôts',
|
||||
viewGrid: 'Terminaux',
|
||||
gridEmpty: 'Aucune session active dans ce groupe.',
|
||||
gridCapped: '{shown} sessions affichées sur {total} — fermez des terminaux pour voir le reste.',
|
||||
gridCapped: '{shown} sessions affichées sur {total}. Fermez des terminaux pour voir le reste.',
|
||||
newFeature: 'Nouvelle session de groupe',
|
||||
spanBadge: 'groupe · {n} dépôt | groupe · {n} dépôts',
|
||||
},
|
||||
crossRepo: {
|
||||
title: 'Nouvelle session de groupe',
|
||||
intro: 'Lance UNE session Claude couvrant tous les dépôts du groupe — une seule conversation reliant l’ensemble.',
|
||||
intro: 'Lance UNE session Claude couvrant tous les dépôts du groupe : une seule conversation reliant l’ensemble.',
|
||||
modeLabel: 'Répertoires',
|
||||
modeFeature: 'Nouvelle branche dans chaque dépôt',
|
||||
modeMain: 'Checkouts principaux',
|
||||
@@ -142,7 +142,7 @@ const fr: typeof en = {
|
||||
remove: 'Retirer',
|
||||
pathLabel: 'Chemin du dépôt',
|
||||
pathPlaceholder: '/chemin/absolu/du/repo',
|
||||
empty: 'Aucun dépôt enregistré — ajoutez-en un ci-dessus, ou lancez un scan.',
|
||||
empty: 'Aucun dépôt enregistré. Ajoutez-en un ci-dessus, ou lancez un scan.',
|
||||
invalid: 'indisponible',
|
||||
scan: 'Scanner',
|
||||
scanResult: 'Aucun nouveau dépôt trouvé | 1 nouveau dépôt ajouté | {n} nouveaux dépôts ajoutés',
|
||||
@@ -211,7 +211,7 @@ const fr: typeof en = {
|
||||
files: 'Fichiers',
|
||||
changes: 'Changements',
|
||||
noChanges: 'Aucun changement',
|
||||
changesTruncated: 'Trop de changements — liste tronquée.',
|
||||
changesTruncated: 'Trop de changements. Liste tronquée.',
|
||||
terminal: 'Terminal',
|
||||
editor: 'Éditeur',
|
||||
diff: 'Diff',
|
||||
@@ -228,7 +228,7 @@ const fr: typeof en = {
|
||||
overwrite: 'Écraser',
|
||||
},
|
||||
diff: {
|
||||
binary: 'Fichier binaire — pas de diff texte.',
|
||||
binary: 'Fichier binaire. Pas de diff texte.',
|
||||
tooLarge: 'Diff trop volumineux à afficher.',
|
||||
noChanges: 'Aucun changement dans ce fichier.',
|
||||
},
|
||||
@@ -307,7 +307,7 @@ const fr: typeof en = {
|
||||
sessionEnded: 'Session terminée',
|
||||
back: 'Sessions',
|
||||
notAttachable:
|
||||
'Cette session tourne hors d’Arboretum — dupliquez-la pour interagir, ou reprenez-la une fois arrêtée.',
|
||||
'Cette session tourne hors d’Arboretum. Dupliquez-la pour interagir, ou reprenez-la une fois arrêtée.',
|
||||
fullscreen: 'Plein écran',
|
||||
exitFullscreen: 'Quitter le plein écran',
|
||||
maximize: 'Agrandir',
|
||||
@@ -319,7 +319,7 @@ const fr: typeof en = {
|
||||
push: {
|
||||
enable: 'Activer les notifications',
|
||||
disable: 'Notifications activées',
|
||||
denied: 'Permission de notification refusée — activez-la dans les réglages du navigateur.',
|
||||
denied: 'Permission de notification refusée. Activez-la dans les réglages du navigateur.',
|
||||
unsupported: 'Le push nécessite HTTPS (ex. Tailscale Serve) ; sur iOS, installez d’abord l’app sur l’écran d’accueil.',
|
||||
},
|
||||
fs: {
|
||||
@@ -332,7 +332,7 @@ const fr: typeof en = {
|
||||
repoBadge: 'dépôt',
|
||||
},
|
||||
ws: {
|
||||
reconnecting: 'Connexion perdue — reconnexion…',
|
||||
reconnecting: 'Connexion perdue. Reconnexion…',
|
||||
},
|
||||
nav: {
|
||||
worktrees: 'Worktrees',
|
||||
@@ -476,7 +476,7 @@ const fr: typeof en = {
|
||||
preferencesHint: 'Ces réglages ne s’appliquent qu’à ce navigateur.',
|
||||
language: 'Langue',
|
||||
notifications: 'Notifications',
|
||||
notificationsEnabled: 'Activées — vous serez notifié lorsqu’une session attend une réponse.',
|
||||
notificationsEnabled: 'Activées. Vous serez notifié lorsqu’une session attend une réponse.',
|
||||
notificationsDisabled: 'Désactivées.',
|
||||
enableNotifications: 'Activer les notifications',
|
||||
disableNotifications: 'Désactiver les notifications',
|
||||
@@ -491,7 +491,7 @@ const fr: typeof en = {
|
||||
newTokenPlaceholder: 'ex. téléphone, portable',
|
||||
createToken: 'Créer un jeton',
|
||||
tokenCreated: 'Jeton créé',
|
||||
copyTokenHint: 'Copiez ce jeton maintenant — par sécurité il ne sera plus jamais affiché.',
|
||||
copyTokenHint: 'Copiez ce jeton maintenant. Par sécurité il ne sera plus jamais affiché.',
|
||||
copy: 'Copier',
|
||||
copied: 'Copié',
|
||||
current: 'courant',
|
||||
@@ -501,7 +501,7 @@ const fr: typeof en = {
|
||||
revoke: 'Révoquer',
|
||||
confirmRevoke: 'Confirmer la révocation',
|
||||
tokenRevoked: 'Jeton révoqué',
|
||||
lastTokenError: 'Impossible de révoquer le dernier jeton actif — créez-en un autre d’abord.',
|
||||
lastTokenError: 'Impossible de révoquer le dernier jeton actif. Créez-en un autre d’abord.',
|
||||
save: 'Enregistrer',
|
||||
saved: 'Enregistré',
|
||||
// Sécurité & conformité
|
||||
@@ -516,21 +516,21 @@ const fr: typeof en = {
|
||||
discovery: 'Découverte des dépôts',
|
||||
discoveryHint: 'Arboretum scanne ces dossiers à la recherche de dépôts git et les enregistre automatiquement. Les dépôts masqués sont conservés et jamais ré-ajoutés.',
|
||||
scanRoots: 'Dossiers à scanner',
|
||||
scanRootsEmpty: 'Aucun dossier configuré — votre dossier personnel est utilisé par défaut.',
|
||||
scanRootsEmpty: 'Aucun dossier configuré. Votre dossier personnel est utilisé par défaut.',
|
||||
addRoot: 'Ajouter un dossier',
|
||||
removeRoot: 'Retirer',
|
||||
scanInterval: 'Intervalle de re-scan (minutes)',
|
||||
scanIntervalHint: '0 désactive le scan périodique. Les changements prennent effet au prochain redémarrage du daemon.',
|
||||
// Sessions (rétention / archivage auto)
|
||||
sessions: 'Sessions',
|
||||
sessionsHint: 'Les sessions terminées plus anciennes que la fenêtre de rétention sont archivées automatiquement (masquées de la liste par défaut). Rien n’est supprimé — une session archivée reste reprenable et forkable.',
|
||||
sessionsHint: 'Les sessions terminées plus anciennes que la fenêtre de rétention sont archivées automatiquement (masquées de la liste par défaut). Rien n’est supprimé. Une session archivée reste reprenable et forkable.',
|
||||
retentionDays: 'Auto-archiver après (jours)',
|
||||
retentionDaysHint: '0 n’archive jamais. Les sessions archivées sont masquées par défaut ; activez « Afficher les archivées » dans la liste pour les voir.',
|
||||
// Claude CLI
|
||||
claudeCli: 'CLI Claude',
|
||||
claudeCliHint: 'Où Arboretum trouve le binaire `claude` et ses données. Utile quand le daemon tourne en service avec un PATH minimal qui n’inclut pas ~/.local/bin.',
|
||||
claudeBinStatusOk: 'Détecté',
|
||||
claudeBinStatusNotFound: 'Introuvable — impossible de lancer une session tant que ce n’est pas résolu.',
|
||||
claudeBinStatusNotFound: 'Introuvable. Impossible de lancer une session tant que ce n’est pas résolu.',
|
||||
claudeBinStatusBadPath: 'Le chemin configuré n’est pas un fichier exécutable.',
|
||||
claudeBinSourceConfigured: 'configuré',
|
||||
claudeBinSourcePath: 'PATH',
|
||||
@@ -542,7 +542,7 @@ const fr: typeof en = {
|
||||
claudeHomePlaceholder: 'ex. /home/vous/.claude',
|
||||
// Serveur (lecture seule)
|
||||
server: 'Serveur',
|
||||
serverHint: 'Définis au démarrage via des flags CLI — les modifier nécessite de redémarrer le daemon.',
|
||||
serverHint: 'Définis au démarrage via des flags CLI. Les modifier nécessite de redémarrer le daemon.',
|
||||
version: 'Version',
|
||||
port: 'Port',
|
||||
bind: 'Adresse de liaison',
|
||||
|
||||
Reference in New Issue
Block a user