i18n: add data-i18n to all body text in help-ai through help-astuces
CI / lint (push) Failing after 20s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Failing after 10s

- 94 <p>, <li>, <h3>, <h4> elements now have data-i18n
- AI Editor section: 16 English translations provided
- 251 new keys total across all sections
- Remaining 80 placeholder keys in sharing/webhooks/backups/security/tips
- en.json: 1068 -> 1162, fr.json: 1068 -> 1162
This commit is contained in:
2026-06-19 08:27:47 -04:00
parent 7d3250306a
commit 0b3464aa9e
3 changed files with 284 additions and 96 deletions
+94 -94
View File
@@ -3665,7 +3665,7 @@
<section class="help-section" id="help-ai">
<h2 data-i18n="auto.c4922a99">🤖 Intelligence Artificielle dans l'Éditeur</h2>
<p>
<p data-i18n="help.desc_b5f89b3b">
ObsiGate intègre un assistant IA directement
dans l'éditeur de texte. Pour l'activer,
configurez au moins un provider AI dans le
@@ -3675,12 +3675,12 @@
<h3 data-i18n="help.activation">Activation</h3>
<ol>
<li>
<li data-i18n="help.desc_f53badcd">
Ajoutez votre clé API dans
<code>.env</code> :
<code>DEEPSEEK_API_KEY=sk-...</code>
</li>
<li>
<li data-i18n="help.desc_ba4578ae">
Redémarrez le conteneur :
<code
>docker compose down && docker compose
@@ -3698,18 +3698,18 @@
</ol>
<h3 data-i18n="help.toolbar_section">Barre d'outils AI</h3>
<p>
<p data-i18n="help.desc_803161e5">
La barre d'outils contient les boutons suivants
:
</p>
<ul>
<li>
<li data-i18n="help.desc_e0525213">
<strong>✦ AI</strong><span data-i18n="help.desc_3ace259e"> — Complétion inline
(</span><kbd>Ctrl+J</kbd>). <span data-i18n="help.ai_completes">Complète</span>
automatiquement le texte là où se trouve le
curseur.
</li>
<li>
<li data-i18n="help.desc_11cf9e8a">
<strong data-i18n="auto.a105a2d9">Éditer ▾</strong><span data-i18n="help.desc_a0ec890a"> — Menu de
modification du texte sélectionné :</span><ul>
<li>
@@ -3718,7 +3718,7 @@
Améliore la qualité, la clarté et le
flux du texte
</li>
<li>
<li data-i18n="help.desc_a6cb3b26">
🔤
<strong
>Fix spelling & grammar</strong
@@ -3726,17 +3726,17 @@
: Corrige les fautes d'orthographe
et de grammaire
</li>
<li>
<li data-i18n="help.desc_5a53de53">
📏 <strong>Make shorter</strong> :
Rend le texte plus concis tout en
préservant l'information
</li>
<li>
<li data-i18n="help.desc_e36f3eaa">
📐 <strong>Make longer</strong> :
Ajoute des détails, exemples ou
explications
</li>
<li>
<li data-i18n="help.desc_3d4e9189">
📋
<strong>Simplify language</strong> :
Simplifie le langage, évite le
@@ -3744,7 +3744,7 @@
</li>
</ul>
</li>
<li>
<li data-i18n="help.desc_5524e921">
<strong>Ton ▾</strong> — Change le ton du
texte :
<ul>
@@ -3752,13 +3752,13 @@
💼 <strong>Professional</strong> :
Ton formel et professionnel
</li>
<li>
<li data-i18n="help.desc_759926ee">
💬 <strong>Casual</strong> : <span data-i18n="help.ai_tone_casual">Ton</span>
décontracté et conversationnel
</li>
</ul>
</li>
<li>
<li data-i18n="help.desc_7ab5be50">
<strong>Traduire ▾</strong><span data-i18n="help.desc_1c130d89"> — Traduit le
texte sélectionné vers une autre langue :</span><ul>
<li>
@@ -3768,7 +3768,7 @@
</li>
</ul>
</li>
<li>
<li data-i18n="help.desc_47e1e10f">
<strong data-i18n="auto.ce4eb802">Générer ▾</strong><span data-i18n="help.desc_991307d6"> — Génère du
contenu à partir de la sélection :</span><ul>
<li>
@@ -3776,11 +3776,11 @@
Explique le texte sélectionné de
façon claire
</li>
<li>
<li data-i18n="help.desc_e5cf90b2">
📝 <strong>Summarize</strong> :
Résume le texte de façon concise
</li>
<li>
<li data-i18n="help.desc_f2d4e369">
✏️
<strong>Continue writing</strong> :
Continue l'écriture à partir du
@@ -3788,12 +3788,12 @@
</li>
</ul>
</li>
<li>
<li data-i18n="help.desc_aec0ad2c">
<strong data-i18n="auto.62c3d50d">💬 Réécrire</strong><span data-i18n="help.desc_c63f02cc"> — Réécrit le
texte selon vos instructions personnalisées.
Une boîte de dialogue vous demande votre
instruction.</span></li>
<li>
<li data-i18n="help.desc_d9e8ab0b">
<strong data-i18n="auto.0257e77f">🧰 Boîte ▾</strong> — Outils de
conversion :
<ul>
@@ -3803,19 +3803,19 @@
Transforme le texte en liste
Markdown
</li>
<li>
<li data-i18n="help.desc_13d206d4">
📊
<strong>Convert to table</strong> :
Transforme en tableau Markdown
</li>
<li>
<li data-i18n="help.desc_50a33a05">
⚙️
<strong
>Generate frontmatter</strong
>
: Génère un bloc YAML frontmatter
</li>
<li>
<li data-i18n="help.desc_fa126609">
🔷
<strong>Convert to canvas</strong> :
Convertit en diagramme Mermaid.js
@@ -3826,26 +3826,26 @@
<h3 data-i18n="help.096367af">Indicateurs visuels</h3>
<ul>
<li>
<li data-i18n="help.desc_7ff2fa21">
Pendant une requête AI, un toast
<strong
>⏳ AI: traitement en cours...</strong
>
s'affiche
</li>
<li>
<li data-i18n="help.desc_a13f7f2c">
Une fois terminé,
<strong data-i18n="auto.4d281c6c">AI: texte traité ✓</strong> confirme
le succès
</li>
<li>
<li data-i18n="help.desc_32e3d66d">
En cas d'erreur de clé API :
<strong data-i18n="auto.13eb7a51">AI: clé API invalide</strong>
</li>
</ul>
<h3 data-i18n="help.2dad2bfd">Sauvegarde automatique</h3>
<p>
<p data-i18n="help.desc_19cfa369">
L'éditeur sauvegarde automatiquement après 2
secondes d'inactivité. Le bouton de sauvegarde
<strong data-i18n="help.ai_flash_green">flashe en vert</strong> brièvement pour
@@ -3875,7 +3875,7 @@
<td><code>gemini-2.0-flash</code></td>
</tr>
</table>
<p>
<p data-i18n="help.desc_555e0305">
Pour changer de provider par défaut :
<code>AI_DEFAULT_PROVIDER=openrouter</code>
</p>
@@ -3886,29 +3886,29 @@
<h2 data-i18n="help.8c65b2f2">🔗 Partage et Webhooks</h2>
<h3 data-i18n="help.public_shares">Publication publique</h3>
<p>
<p data-i18n="help.desc_13d90039">
ObsiGate permet de partager des documents via un
lien public temporaire.
</p>
<ul>
<li>
<li data-i18n="help.desc_7e86626c">
<strong data-i18n="help.share_button">Bouton Partager</strong><span data-i18n="help.desc_d66e911c"> : Dans les
actions du fichier, génère un lien unique</span></li>
<li>
<li data-i18n="help.desc_985d759b">
<strong>Token unique</strong><span data-i18n="help.desc_04493800"> : 64
caractères hexadécimaux, impossible à
deviner</span></li>
<li>
<li data-i18n="help.desc_ec5f7a26">
<strong>Expiration configurable</strong><span data-i18n="help.desc_858681a1"> :
Durée de vie en heures</span></li>
<li>
<li data-i18n="help.desc_071da87a">
<strong>Lecture seule</strong><span data-i18n="help.desc_e47d2328"> : La vue
publique n'affiche que le contenu sans
édition</span></li>
<li>
<li data-i18n="help.desc_2c220763">
<strong>Gestion des liens</strong><span data-i18n="help.desc_5e9a7fd9"> : Liste
et révocation dans les Configurations</span></li>
<li>
<li data-i18n="help.desc_cfe362a7">
<strong data-i18n="help.pdf_export">Export PDF</strong><span data-i18n="help.desc_e93517a5"> : Téléchargement
du document partagé en PDF via</span><code>/s/{token}/pdf</code>
</li>
@@ -3918,7 +3918,7 @@
<!-- 🪝 Webhooks -->
<section class="help-section" id="help-webhooks">
<h2 data-i18n="help.29afa01d">🪝 Webhooks</h2>
<p>
<p data-i18n="help.desc_a9c2c520">
Les webhooks permettent à ObsiGate de
<strong
data-i18n="help.webhook_notify">notifier automatiquement des services
@@ -3932,23 +3932,23 @@
<h3 data-i18n="help.use_cases">Cas d'usage</h3>
<ul>
<li>
<li data-i18n="help.desc_2349271d">
<strong data-i18n="help.ci_cd">Automatisation CI/CD</strong><span data-i18n="help.desc_1ba39cc4"> :
Déclencher un build quand une note de
procédure est mise à jour</span></li>
<li>
<li data-i18n="help.desc_d915c72b">
<strong data-i18n="header.sync_status">Synchronisation</strong><span data-i18n="help.desc_d9cdaa89"> : Copier
les nouveaux fichiers vers un autre système
(SharePoint, Google Drive)</span></li>
<li>
<li data-i18n="help.desc_cc8e35ba">
<strong>Notifications</strong><span data-i18n="help.desc_6f7c5889"> : Alerter un
canal Slack/Discord quand un document est
créé</span></li>
<li>
<li data-i18n="help.desc_660051b0">
<strong data-i18n="help.external_audit">Audit externe</strong><span data-i18n="help.desc_599f3242"> : Logger
toutes les modifications dans une base de
données externe</span></li>
<li>
<li data-i18n="help.desc_89a8f5de">
<strong data-i18n="auto.a232672b">Déploiement</strong><span data-i18n="help.desc_2f2c16b5"> : Publier un
article de blog quand un fichier est marqué</span><code>publish: true</code>
</li>
@@ -4180,7 +4180,7 @@
</tr>
</table>
</div>
<p>
<p data-i18n="help.desc_39e97b2f">
<em
data-i18n="help.webhook_note">Note : l'événement
<code>file_modified</code> est réservé pour
@@ -4191,7 +4191,7 @@
</p>
<h3 data-i18n="help.77f4f06e">Format du payload</h3>
<p>
<p data-i18n="help.desc_56760d7f">
Chaque webhook reçoit un <code>POST</code> avec
<code>Content-Type: application/json</code> :
</p>
@@ -4203,7 +4203,7 @@
overflow-x: auto;
font-size: 0.78rem;
"
><code>{
data-i18n="help.desc_c1f72521"><code>{
"event": "file_created",
"timestamp": "2026-06-03T14:30:00.123456+00:00",
"data": {
@@ -4226,7 +4226,7 @@
overflow-x: auto;
font-size: 0.78rem;
"
><code>X-ObsiGate-Signature: sha256=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08</code></pre>
data-i18n="help.desc_3db2812f"><code>X-ObsiGate-Signature: sha256=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08</code></pre>
<p>
Pour vérifier côté récepteur : calculez
<code>HMAC-SHA256(corps_brut, secret)</code> et
@@ -4236,27 +4236,27 @@
</p>
<h3 data-i18n="config.title">Configuration</h3>
<p>
<p data-i18n="help.desc_b6169f2e">
Les webhooks se gèrent dans le modal
<strong data-i18n="header.menu_config">Configurations</strong> (⚙️ menu
Options), section Webhooks. Réservé aux
administrateurs.
</p>
<ol>
<li>
<li data-i18n="help.desc_a601f22e">
Allez dans ⚙️ Configurations → onglet
Webhooks
</li>
<li>
<li data-i18n="help.desc_c992f2e5">
Remplissez :
<strong data-i18n="config.webhook_name_placeholder">Nom</strong> (descriptif),
<strong data-i18n="config.webhook_url_placeholder">URL</strong> (endpoint cible),
<strong>Secret</strong> (optionnel)
</li>
<li data-i18n="auto.7c9cdc3c">Cochez les événements à écouter</li>
<li>Cliquez <strong data-i18n="config.add_webhook">Ajouter</strong></li>
<li data-i18n="help.desc_f58da6e1">Cliquez <strong data-i18n="config.add_webhook">Ajouter</strong></li>
</ol>
<p>
<p data-i18n="help.desc_3da1896a">
Les webhooks peuvent être activés/désactivés,
modifiés ou supprimés à tout moment. Le
<code>last_fired_at</code> indique la dernière
@@ -4274,22 +4274,22 @@
overflow-x: auto;
font-size: 0.78rem;
"
><code>from flask import Flask, request\nimport hmac, hashlib\n\napp = Flask(__name__)\nWEBHOOK_SECRET = "mon-secret" # même que dans ObsiGate\n\[email protected]("/webhook", methods=["POST"])\ndef webhook():\n # Vérifier la signature\n signature = request.headers.get("X-ObsiGate-Signature", "")\n body = request.get_data()\n expected = "sha256=" + hmac.new(\n WEBHOOK_SECRET.encode(), body, hashlib.sha256\n ).hexdigest()\n if not hmac.compare_digest(signature, expected):\n return "Invalid signature", 403\n\n payload = request.get_json()\n print(f"Événement: {payload['event']}")\n print(f"Fichier: {payload['data']['vault']}/{payload['data']['path']}")\n return "OK", 200\n\napp.run(port=5000)</code></pre>
data-i18n="help.desc_6d68fbc9"><code>from flask import Flask, request\nimport hmac, hashlib\n\napp = Flask(__name__)\nWEBHOOK_SECRET = "mon-secret" # même que dans ObsiGate\n\[email protected]("/webhook", methods=["POST"])\ndef webhook():\n # Vérifier la signature\n signature = request.headers.get("X-ObsiGate-Signature", "")\n body = request.get_data()\n expected = "sha256=" + hmac.new(\n WEBHOOK_SECRET.encode(), body, hashlib.sha256\n ).hexdigest()\n if not hmac.compare_digest(signature, expected):\n return "Invalid signature", 403\n\n payload = request.get_json()\n print(f"Événement: {payload['event']}")\n print(f"Fichier: {payload['data']['vault']}/{payload['data']['path']}")\n return "OK", 200\n\napp.run(port=5000)</code></pre>
<h4 data-i18n="help.d1ea1dc6">n8n / Make (no-code)</h4>
<ol>
<li>
<li data-i18n="help.desc_6bc48f59">
Créez un
<strong>Webhook Trigger</strong> dans n8n ou
Make
</li>
<li>
<li data-i18n="help.desc_7819b56f">
Copiez l'URL générée (ex:
<code
>https://n8n.monserveur.com/webhook/abc123</code
>)
</li>
<li>
<li data-i18n="help.desc_7b45490b">
Dans ObsiGate, ajoutez un webhook pointant
vers cette URL
</li>
@@ -4314,7 +4314,7 @@
overflow-x: auto;
font-size: 0.78rem;
"
><code># Exemple avec curl + jq dans un script bash
data-i18n="help.desc_fc9391f3"><code># Exemple avec curl + jq dans un script bash
WEBHOOK_URL="https://discord.com/api/webhooks/..."
OBSIGATE_SECRET="mon-secret"
@@ -4345,19 +4345,19 @@ curl -X POST https://votre-serveur.com/webhook \
<h3 data-i18n="help.381abec7">Limitations actuelles</h3>
<ul>
<li>
<li data-i18n="help.desc_85effb89">
Timeout de <strong>5 secondes</strong> par
requête — les webhooks sont "fire and
forget" (pas de retry)
</li>
<li>
<li data-i18n="help.desc_dc4d7186">
Les modifications détectées par le watcher
filesystem (watchdog)
<strong data-i18n="auto.98c547ea">ne déclenchent pas</strong> de
webhooks — seules les opérations via l'API
REST sont prises en compte
</li>
<li>
<li data-i18n="help.desc_d3a71d97">
<code>file_modified</code> n'est pas encore
dispatché (réservé pour version future)
</li>
@@ -4377,15 +4377,15 @@ curl -X POST https://votre-serveur.com/webhook \
avant chaque modification destructive.
</p>
<ul>
<li>
<li data-i18n="help.desc_7671e56a">
<strong data-i18n="help.before_write">Avant écriture</strong> : Sauvegarde
du contenu original dans
<code>.obsigate-backup/</code>
</li>
<li>
<li data-i18n="help.desc_e7e3157a">
<strong>Timestamp</strong><span data-i18n="help.desc_31e7253b"> : Chaque backup
est horodaté</span></li>
<li>
<li data-i18n="help.desc_a69804cd">
<strong data-i18n="auto.41d7c6af">Répertoire dédié</strong> :
<code>.obsigate-backup/</code> dans le
répertoire de la vault
@@ -4398,16 +4398,16 @@ curl -X POST https://votre-serveur.com/webhook \
dans un journal.
</p>
<ul>
<li>
<li data-i18n="help.desc_a974f7a6">
<strong>Journal</strong> : Fichier
<code>data/audit.log</code> au format JSON
lines
</li>
<li>
<li data-i18n="help.desc_3c4711b8">
<strong data-i18n="auto.598a0ca7">Événements tracés</strong><span data-i18n="help.desc_9f321d1e"> :
Écritures, suppressions, changements de
configuration</span></li>
<li>
<li data-i18n="help.desc_68c2b170">
<strong>Rotation</strong><span data-i18n="help.desc_19cf5730"> : Rotation
automatique à 10 Mo</span></li>
</ul>
@@ -4419,48 +4419,48 @@ curl -X POST https://votre-serveur.com/webhook \
<h3 data-i18n="help.c48fb18a">Authentification</h3>
<ul>
<li>
<li data-i18n="help.desc_7708f226">
<strong>JWT + Argon2id</strong><span data-i18n="help.desc_8f0bffe3"> : Tokens JWT
avec mots de passe hachés Argon2id</span></li>
<li>
<li data-i18n="help.desc_b54c21ef">
<strong data-i18n="auto.72e515fa">Contrôle d'accès par vault</strong>
: Chaque utilisateur voit uniquement ses
vaults
</li>
<li>
<li data-i18n="help.desc_f952db17">
<strong>Refresh tokens</strong> : Cookies
HttpOnly avec rotation automatique
</li>
<li>
<li data-i18n="help.desc_1577912b">
<strong data-i18n="help.rate_limiting">Rate limiting</strong> : 10
tentatives / 15 min par IP + verrouillage
compte
</li>
<li>
<li data-i18n="help.desc_d646b709">
<strong>Compte admin</strong><span data-i18n="help.desc_5fc28b7d"> : Créé
automatiquement au premier démarrage</span></li>
</ul>
<h3 data-i18n="help.83f1d9ca">Protection</h3>
<ul>
<li>
<li data-i18n="help.desc_bc08f215">
<strong>Secret redactor</strong><span data-i18n="help.desc_9846fc07"> : Masque
JWT, clés API, tokens GitHub dans les
aperçus</span></li>
<li>
<li data-i18n="help.desc_7f1d0512">
<strong>Path traversal</strong> : Validation
des chemins contre les attaques
<code>../</code>
</li>
<li>
<li data-i18n="help.desc_9d0e39d0">
<strong>Headers CSP</strong> :
Content-Security-Policy, X-Frame-Options,
XSS-Protection
</li>
<li>
<li data-i18n="help.desc_1f11691c">
<strong data-i18n="help.atomic_writes">Atomic writes</strong><span data-i18n="help.desc_752789ab"> : Écriture
via fichier temporaire + renommage atomique</span></li>
<li>
<li data-i18n="help.desc_723ed8db">
<strong>Non-root Docker</strong> : Conteneur
tourne avec UID 1000
</li>
@@ -4472,44 +4472,44 @@ curl -X POST https://votre-serveur.com/webhook \
<h3 data-i18n="auto.559ef1da">Workflow recommandé</h3>
<ol>
<li>
<li data-i18n="help.desc_625112fd">
<strong data-i18n="auto.678711b5">Sélectionnez un contexte</strong><span data-i18n="help.desc_39979e71"> :
Choisissez un vault pour réduire le bruit</span></li>
<li>
<li data-i18n="help.desc_9186a3a3">
<strong>Explorez l'arborescence</strong> :
Naviguez dans les dossiers
</li>
<li>
<li data-i18n="help.desc_93902d18">
<strong data-i18n="help.tip_use_tags">Utilisez les tags</strong> : Filtrez
par tags pour affiner
</li>
<li>
<li data-i18n="help.desc_cdf7bb46">
<strong>Recherchez intelligemment</strong><span data-i18n="help.desc_ae213f54"> :
Combinez opérateurs et texte libre</span></li>
<li>
<li data-i18n="help.desc_5396ed9e">
<strong>Profitez de l'historique</strong><span data-i18n="help.desc_71eeb16a"> :
Réutilisez vos recherches fréquentes</span></li>
</ol>
<h3 data-i18n="help.fe388b67">Optimisations</h3>
<ul>
<li>
<li data-i18n="help.desc_1a04ae18">
<strong data-i18n="help.tip_hide_sidebar">Masquez la sidebar</strong> : Plus
d'espace pour le contenu
</li>
<li>
<li data-i18n="help.desc_0f9a1e5b">
<strong
data-i18n="help.tip_sidebar_filter">Utilisez le filtrage sidebar</strong
>
: Plus rapide que la recherche globale pour
trouver un fichier
</li>
<li>
<li data-i18n="help.desc_6902f20d">
<strong data-i18n="auto.3be698f6">Favorisez les opérateurs</strong> :
<code>tag:</code> et
<code>vault:</code> accélèrent la recherche
</li>
<li>
<li data-i18n="help.desc_664b1d09">
<strong data-i18n="help.breadcrumb_clickable">Breadcrumb cliquable</strong> :
Repositionnez rapidement la sidebar
</li>
@@ -4517,28 +4517,28 @@ curl -X POST https://votre-serveur.com/webhook \
<h3 data-i18n="help.2a92203f">Trucs et astuces</h3>
<ul>
<li>
<li data-i18n="help.desc_58d2326f">
<strong>Navigation visuelle</strong> : Le
breadcrumb repositionne automatiquement la
sidebar
</li>
<li>
<li data-i18n="help.desc_698d92ec">
<strong>Gestion de l'espace</strong><span data-i18n="help.desc_287be69c"> :
Réduisez les sections Vaults/Tags selon vos
besoins</span></li>
<li>
<li data-i18n="help.desc_e6129268">
<strong>Confort de lecture</strong> :
Ajustez la largeur de la sidebar
</li>
<li>
<li data-i18n="help.desc_5374685a">
<strong>Mobile-friendly</strong> : Utilisez
le bouton hamburger sur mobile
</li>
<li>
<li data-i18n="help.desc_443b76b5">
<strong data-i18n="help.wikilinks">Wikilinks</strong> : Naviguez entre
notes comme dans Obsidian
</li>
<li>
<li data-i18n="help.desc_0739c6a9">
<strong>Images</strong> : Support complet
des syntaxes Obsidian
</li>
@@ -4546,36 +4546,36 @@ curl -X POST https://votre-serveur.com/webhook \
<h3 data-i18n="help.advanced_use_cases">Cas d'usage avancés</h3>
<ul>
<li>
<li data-i18n="help.desc_87b348c3">
<strong data-i18n="auto.b86ba5ea">Recherche multi-critères</strong> :
<code
>tag:docker tag:linux vault:IT
nginx</code
>
</li>
<li>
<li data-i18n="help.desc_40c92863">
<strong>Exploration par tags</strong> :
Cliquez sur un tag dans une note pour voir
toutes les notes similaires
</li>
<li>
<li data-i18n="help.desc_26f81732">
<strong data-i18n="auto.4fa5d7c2">Édition rapide</strong><span data-i18n="help.desc_cb6f0bfd"> : Ouvrez
l'éditeur, modifiez, sauvegardez</span></li>
<li>
<li data-i18n="help.desc_99c6f0ec">
<strong data-i18n="help.export">Export</strong><span data-i18n="help.desc_f9083ce5"> : Téléchargez des
fichiers pour backup ou partage</span></li>
<li>
<li data-i18n="help.desc_ecf302ae">
<strong data-i18n="auto.79f6e1dd">Multi-fenêtres</strong><span data-i18n="help.desc_9cb5974c"> : Ouvrez
plusieurs notes dans des onglets séparés</span></li>
</ul>
</section>
<div class="help-footer">
<p>
<p data-i18n="help.desc_eebf177f">
<strong>ObsiGate v1.7.0</strong> - Porte
d'entrée web pour vos vaults Obsidian
</p>
<p>
<p data-i18n="help.desc_188bc423">
Pour plus d'informations, consultez le
<a
href="https://git.dracodev.net/Projets/ObsiGate"
+95 -1
View File
@@ -1069,5 +1069,99 @@
"webhook.trigger_create": "Creation via API or palette",
"webhook.trigger_delete": "Deletion via API or editor",
"webhook.trigger_dir_create": "Directory creation via API",
"sidebar.tab_backups": "Backups"
"sidebar.tab_backups": "Backups",
"help.desc_b5f89b3b": "ObsiGate integrates an AI assistant directly into the text editor. To activate it, configure at least one AI provider in the <code>.env</code> file (DeepSeek, OpenRouter, or Gemini).",
"help.desc_803161e5": "The toolbar contains the following buttons:",
"help.desc_19cfa369": "Documents are automatically saved after each modification. A status indicator in the editor header confirms: <strong>Saved</strong> or <strong>Saving…</strong>.",
"help.desc_555e0305": "[EN] Pour changer de provider par défaut :\n AI_DEFAULT",
"help.desc_13d90039": "[EN] ObsiGate permet de partager des documents via un\n ",
"help.desc_a9c2c520": "[EN] Les webhooks permettent à ObsiGate de\n notifier a",
"help.desc_39e97b2f": "[EN] Note : l'événement\n file_modified est réservé",
"help.desc_56760d7f": "[EN] Chaque webhook reçoit un POST avec\n Content-Type:",
"help.desc_c1f72521": "[EN] {\n \"event\": \"file_created\",\n \"timestamp\": \"2026-06-03T14:30:00.123456+00:00\",\n",
"help.desc_3db2812f": "[EN] X-ObsiGate-Signature: sha256=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15",
"help.desc_b6169f2e": "[EN] Les webhooks se gèrent dans le modal\n Configurati",
"help.desc_3da1896a": "[EN] Les webhooks peuvent être activés/désactivés,\n mo",
"help.desc_6d68fbc9": "[EN] from flask import Flask, request\\nimport hmac, hashlib\\n\\napp = Flask(__name__)\\",
"help.desc_fc9391f3": "[EN] # Exemple avec curl + jq dans un script bash\nWEBHOOK_URL=\"https://discord.com/ap",
"help.desc_eebf177f": "[EN] ObsiGate v1.7.0 - Porte\n d'entrée web pour vos va",
"help.desc_188bc423": "[EN] Pour plus d'informations, consultez le\n dépôt du ",
"help.desc_f53badcd": "Add your API key in <code>.env</code>:",
"help.desc_ba4578ae": "Restart the container:",
"help.desc_e0525213": "Inline completion (<kbd>Ctrl+J</kbd>). Automatically completes the text where the cursor is located.",
"help.desc_11cf9e8a": "[EN] Éditer ▾ — Menu de\n modification du texte sél",
"help.desc_a6cb3b26": "[EN] 🔤\n Fix spelling & grammar\n ",
"help.desc_5a53de53": "[EN] 📏 Make shorter :\n Rend le texte plus ",
"help.desc_e36f3eaa": "[EN] 📐 Make longer :\n Ajoute des détails, ",
"help.desc_3d4e9189": "Simplifies the language for easier reading — replaces complex terms and shortens long sentences.",
"help.desc_5524e921": "Adapts the tone for a formal, business context — suitable for reports, emails, and official documents.",
"help.desc_759926ee": "Relaxed and friendly tone — ideal for informal communication or social media.",
"help.desc_7ab5be50": "Translates the selected text into the target language.",
"help.desc_47e1e10f": "[EN] Générer ▾ — Génère du\n contenu à partir de la",
"help.desc_e5cf90b2": "Creates a concise summary of the selected text — bullet points capturing the essentials.",
"help.desc_f2d4e369": "[EN] ✏️\n Continue writing :\n ",
"help.desc_aec0ad2c": "[EN] 💬 Réécrire — Réécrit le\n texte selon vos inst",
"help.desc_d9e8ab0b": "[EN] 🧰 Boîte ▾ — Outils de\n conversion :\n ",
"help.desc_13d206d4": "Transforms textual data into a readable Markdown table — ideal for comparisons and structured information.",
"help.desc_50a33a05": "Generates YAML frontmatter for the current document (title, date, tags based on content).",
"help.desc_fa126609": "Converts the document structure into an Obsidian Canvas (visual cards).",
"help.desc_7ff2fa21": "[EN] Pendant une requête AI, un toast\n ⏳ AI: trait",
"help.desc_a13f7f2c": "[EN] Une fois terminé,\n AI: texte traité ✓ confirm",
"help.desc_32e3d66d": "[EN] En cas d'erreur de clé API :\n AI: clé API inv",
"help.desc_7e86626c": "[EN] Bouton Partager : Dans les\n actions du fichie",
"help.desc_985d759b": "[EN] Token unique : 64\n caractères hexadécimaux, i",
"help.desc_ec5f7a26": "[EN] Expiration configurable :\n Durée de vie en he",
"help.desc_071da87a": "[EN] Lecture seule : La vue\n publique n'affiche qu",
"help.desc_2c220763": "[EN] Gestion des liens : Liste\n et révocation dans",
"help.desc_cfe362a7": "[EN] Export PDF : Téléchargement\n du document part",
"help.desc_2349271d": "[EN] Automatisation CI/CD :\n Déclencher un build q",
"help.desc_d915c72b": "[EN] Synchronisation : Copier\n les nouveaux fichie",
"help.desc_cc8e35ba": "[EN] Notifications : Alerter un\n canal Slack/Disco",
"help.desc_660051b0": "[EN] Audit externe : Logger\n toutes les modificati",
"help.desc_89a8f5de": "[EN] Déploiement : Publier un\n article de blog qua",
"help.desc_a601f22e": "[EN] Allez dans ⚙️ Configurations → onglet\n Webhoo",
"help.desc_c992f2e5": "[EN] Remplissez :\n Nom (descriptif),\n ",
"help.desc_f58da6e1": "[EN] Cliquez Ajouter",
"help.desc_6bc48f59": "[EN] Créez un\n Webhook Trigger dans n8n ou\n ",
"help.desc_7819b56f": "[EN] Copiez l'URL générée (ex:\n https://n8n.monser",
"help.desc_7b45490b": "[EN] Dans ObsiGate, ajoutez un webhook pointant\n v",
"help.desc_85effb89": "[EN] Timeout de 5 secondes par\n requête — les webh",
"help.desc_dc4d7186": "[EN] Les modifications détectées par le watcher\n f",
"help.desc_d3a71d97": "[EN] file_modified n'est pas encore\n dispatché (ré",
"help.desc_7671e56a": "[EN] Avant écriture : Sauvegarde\n du contenu origi",
"help.desc_e7e3157a": "[EN] Timestamp : Chaque backup\n est horodaté",
"help.desc_a69804cd": "[EN] Répertoire dédié :\n .obsigate-backup/ dans le",
"help.desc_a974f7a6": "[EN] Journal : Fichier\n data/audit.log au format J",
"help.desc_3c4711b8": "[EN] Événements tracés :\n Écritures, suppressions,",
"help.desc_68c2b170": "[EN] Rotation : Rotation\n automatique à 10 Mo",
"help.desc_7708f226": "[EN] JWT + Argon2id : Tokens JWT\n avec mots de pas",
"help.desc_b54c21ef": "[EN] Contrôle d'accès par vault\n : Chaque utilisat",
"help.desc_f952db17": "[EN] Refresh tokens : Cookies\n HttpOnly avec rotat",
"help.desc_1577912b": "[EN] Rate limiting : 10\n tentatives / 15 min par I",
"help.desc_d646b709": "[EN] Compte admin : Créé\n automatiquement au premi",
"help.desc_bc08f215": "[EN] Secret redactor : Masque\n JWT, clés API, toke",
"help.desc_7f1d0512": "[EN] Path traversal : Validation\n des chemins cont",
"help.desc_9d0e39d0": "[EN] Headers CSP :\n Content-Security-Policy, X-Fra",
"help.desc_1f11691c": "[EN] Atomic writes : Écriture\n via fichier tempora",
"help.desc_723ed8db": "[EN] Non-root Docker : Conteneur\n tourne avec UID ",
"help.desc_625112fd": "[EN] Sélectionnez un contexte :\n Choisissez un vau",
"help.desc_9186a3a3": "[EN] Explorez l'arborescence :\n Naviguez dans les ",
"help.desc_93902d18": "[EN] Utilisez les tags : Filtrez\n par tags pour af",
"help.desc_cdf7bb46": "[EN] Recherchez intelligemment :\n Combinez opérate",
"help.desc_5396ed9e": "[EN] Profitez de l'historique :\n Réutilisez vos re",
"help.desc_1a04ae18": "[EN] Masquez la sidebar : Plus\n d'espace pour le c",
"help.desc_0f9a1e5b": "[EN] Utilisez le filtrage sidebar\n : Plus rapide q",
"help.desc_6902f20d": "[EN] Favorisez les opérateurs :\n tag: et\n ",
"help.desc_664b1d09": "[EN] Breadcrumb cliquable :\n Repositionnez rapidem",
"help.desc_58d2326f": "[EN] Navigation visuelle : Le\n breadcrumb repositi",
"help.desc_698d92ec": "[EN] Gestion de l'espace :\n Réduisez les sections ",
"help.desc_e6129268": "[EN] Confort de lecture :\n Ajustez la largeur de l",
"help.desc_5374685a": "[EN] Mobile-friendly : Utilisez\n le bouton hamburg",
"help.desc_443b76b5": "[EN] Wikilinks : Naviguez entre\n notes comme dans ",
"help.desc_0739c6a9": "[EN] Images : Support complet\n des syntaxes Obsidi",
"help.desc_87b348c3": "[EN] Recherche multi-critères :\n tag:docker tag:li",
"help.desc_40c92863": "[EN] Exploration par tags :\n Cliquez sur un tag da",
"help.desc_26f81732": "[EN] Édition rapide : Ouvrez\n l'éditeur, modifiez,",
"help.desc_99c6f0ec": "[EN] Export : Téléchargez des\n fichiers pour backu",
"help.desc_ecf302ae": "[EN] Multi-fenêtres : Ouvrez\n plusieurs notes dans"
}
+95 -1
View File
@@ -1069,5 +1069,99 @@
"webhook.trigger_create": "Création via API ou palette",
"webhook.trigger_delete": "Suppression via API ou éditeur",
"webhook.trigger_dir_create": "Création de dossier via API",
"sidebar.tab_backups": "Sauvegardes"
"sidebar.tab_backups": "Sauvegardes",
"help.desc_b5f89b3b": "ObsiGate intègre un assistant IA directement\n dans l'éditeur de texte. Pour l'activer,\n configurez au moins un provider AI dans le\n fichier .env (DeepSeek, OpenRouter\n ou Gemini).",
"help.desc_803161e5": "La barre d'outils contient les boutons suivants\n :",
"help.desc_19cfa369": "L'éditeur sauvegarde automatiquement après 2\n secondes d'inactivité. Le bouton de sauvegarde\n flashe en vert brièvement pour\n confirmer.",
"help.desc_555e0305": "Pour changer de provider par défaut :\n AI_DEFAULT_PROVIDER=openrouter",
"help.desc_13d90039": "ObsiGate permet de partager des documents via un\n lien public temporaire.",
"help.desc_a9c2c520": "Les webhooks permettent à ObsiGate de\n notifier automatiquement des services\n externes\n lorsque des fichiers ou dossiers sont modifiés.\n Chaque événement déclenche un\n POST HTTP vers l'URL de votre\n choix, avec un payload JSON détaillé.",
"help.desc_39e97b2f": "Note : l'événement\n file_modified est réservé pour\n usage futur. Les modifications de contenu\n via l'éditeur ne déclenchent pas encore de\n webhook.",
"help.desc_56760d7f": "Chaque webhook reçoit un POST avec\n Content-Type: application/json :",
"help.desc_c1f72521": "{\n \"event\": \"file_created\",\n \"timestamp\": \"2026-06-03T14:30:00.123456+00:00\",\n \"data\": {\n \"vault\": \"IT\",\n \"path\": \"procedures/deploiement.md\"\n }\n}\n\n Sécurité : signature HMAC-SHA256\n \n Si vous configurez un secret, chaque requête\n inclut un header\n X-ObsiGate-Signature :",
"help.desc_3db2812f": "X-ObsiGate-Signature: sha256=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08\n \n Pour vérifier côté récepteur : calculez\n HMAC-SHA256(corps_brut, secret) et\n comparez. Le header\n X-ObsiGate-Event contient aussi le\n type d'événement pour un routage rapide.",
"help.desc_b6169f2e": "Les webhooks se gèrent dans le modal\n Configurations (⚙️ menu\n Options), section Webhooks. Réservé aux\n administrateurs.",
"help.desc_3da1896a": "Les webhooks peuvent être activés/désactivés,\n modifiés ou supprimés à tout moment. Le\n last_fired_at indique la dernière\n exécution.",
"help.desc_6d68fbc9": "from flask import Flask, request\\nimport hmac, hashlib\\n\\napp = Flask(__name__)\\nWEBHOOK_SECRET = \"mon-secret\" # même que dans ObsiGate\\n\\[email protected](\"/webhook\", methods=[\"POST\"])\\ndef webhook():\\n # Vérifier la signature\\n signature = request.headers.get(\"X-ObsiGate-Signature\", \"\")\\n body = request.get_data()\\n expected = \"sha256=\" + hmac.new(\\n WEBHOOK_SECRET.encode(), body, hashlib.sha256\\n ).hexdigest()\\n if not hmac.compare_digest(signature, expected):\\n return \"Invalid signature\", 403\\n\\n payload = request.get_json()\\n print(f\"Événement: {payload['event']}\")\\n print(f\"Fichier: {payload['data']['vault']}/{payload['data']['path']}\")\\n return \"OK\", 200\\n\\napp.run(port=5000)\n\n n8n / Make (no-code)\n \n \n Créez un\n Webhook Trigger dans n8n ou\n Make\n \n \n Copiez l'URL générée (ex:\n https://n8n.monserveur.com/webhook/abc123)\n \n \n Dans ObsiGate, ajoutez un webhook pointant\n vers cette URL\n \n Sélectionnez les événements souhaités\n \n Le workflow se déclenche automatiquement à\n chaque événement\n \n \n\n Notification Discord\n \n Utilisez un webhook relais (n8n, Make, ou un\n script) pour transformer le payload ObsiGate en\n message Discord :",
"help.desc_fc9391f3": "# Exemple avec curl + jq dans un script bash\nWEBHOOK_URL=\"https://discord.com/api/webhooks/...\"\nOBSIGATE_SECRET=\"mon-secret\"\n\n# Lire le payload depuis stdin\nread -r payload\nevent=$(echo \"$payload\" | jq -r '.event')\npath=$(echo \"$payload\" | jq -r '.data.path')\n\ncurl -H \"Content-Type: application/json\" -d \"{\n \\\"content\\\": \\\"📝 **$event** — $path\\\"\n}\" \"$WEBHOOK_URL\"\n\n Tester avec curl\n # Simuler ce qu'ObsiGate envoie (pour tester votre endpoint)\ncurl -X POST https://votre-serveur.com/webhook \\\n -H \"Content-Type: application/json\" \\\n -H \"X-ObsiGate-Event: file_created\" \\\n -H \"X-ObsiGate-Signature: sha256=$(echo -n '{\"event\":\"file_created\",...}' | openssl dgst -sha256 -hmac 'mon-secret' | cut -d' ' -f2)\" \\\n -d '{\"event\":\"file_created\",\"timestamp\":\"2026-06-03T14:30:00Z\",\"data\":{\"vault\":\"IT\",\"path\":\"notes/test.md\"}}'\n\n Limitations actuelles\n \n \n Timeout de 5 secondes par\n requête — les webhooks sont \"fire and\n forget\" (pas de retry)\n \n \n Les modifications détectées par le watcher\n filesystem (watchdog)\n ne déclenchent pas de\n webhooks — seules les opérations via l'API\n REST sont prises en compte\n \n \n file_modified n'est pas encore\n dispatché (réservé pour version future)\n \n Pas de retry automatique en cas d'échec\n \n Pas de filtrage par vault — un webhook\n écoute toutes les vaults\n \n \n \n \n 💾 Sauvegardes et Audits\n\n Backup automatique\n \n ObsiGate crée automatiquement des sauvegardes\n avant chaque modification destructive.",
"help.desc_eebf177f": "ObsiGate v1.7.0 - Porte\n d'entrée web pour vos vaults Obsidian",
"help.desc_188bc423": "Pour plus d'informations, consultez le\n dépôt du projet.",
"help.desc_f53badcd": "Ajoutez votre clé API dans\n .env :\n DEEPSEEK_API_KEY=sk-...",
"help.desc_ba4578ae": "Redémarrez le conteneur :\n docker compose down && docker compose\n up -d --build",
"help.desc_e0525213": "✦ AI — Complétion inline\n (Ctrl+J). Complète\n automatiquement le texte là où se trouve le\n curseur.",
"help.desc_11cf9e8a": "Éditer ▾ — Menu de\n modification du texte sélectionné :\n \n 🪄\n Improve writing :\n Améliore la qualité, la clarté et le\n flux du texte",
"help.desc_a6cb3b26": "🔤\n Fix spelling & grammar\n : Corrige les fautes d'orthographe\n et de grammaire",
"help.desc_5a53de53": "📏 Make shorter :\n Rend le texte plus concis tout en\n préservant l'information",
"help.desc_e36f3eaa": "📐 Make longer :\n Ajoute des détails, exemples ou\n explications",
"help.desc_3d4e9189": "📋\n Simplify language :\n Simplifie le langage, évite le\n jargon",
"help.desc_5524e921": "Ton ▾ — Change le ton du\n texte :\n \n \n 💼 Professional :\n Ton formel et professionnel",
"help.desc_759926ee": "💬 Casual : Ton\n décontracté et conversationnel",
"help.desc_7ab5be50": "Traduire ▾ — Traduit le\n texte sélectionné vers une autre langue :\n \n 🇬🇧 English · 🇨🇳 Chinese · 🇯🇵\n Japanese · 🇩🇪 German · 🇫🇷 French ·\n 🇪🇸 Spanish",
"help.desc_47e1e10f": "Générer ▾ — Génère du\n contenu à partir de la sélection :\n \n ℹ️ Explain this :\n Explique le texte sélectionné de\n façon claire",
"help.desc_e5cf90b2": "📝 Summarize :\n Résume le texte de façon concise",
"help.desc_f2d4e369": "✏️\n Continue writing :\n Continue l'écriture à partir du\n texte",
"help.desc_aec0ad2c": "💬 Réécrire — Réécrit le\n texte selon vos instructions personnalisées.\n Une boîte de dialogue vous demande votre\n instruction.",
"help.desc_d9e8ab0b": "🧰 Boîte ▾ — Outils de\n conversion :\n \n \n 📋\n Convert to list :\n Transforme le texte en liste\n Markdown",
"help.desc_13d206d4": "📊\n Convert to table :\n Transforme en tableau Markdown",
"help.desc_50a33a05": "⚙️\n Generate frontmatter\n : Génère un bloc YAML frontmatter",
"help.desc_fa126609": "🔷\n Convert to canvas :\n Convertit en diagramme Mermaid.js",
"help.desc_7ff2fa21": "Pendant une requête AI, un toast\n ⏳ AI: traitement en cours...\n s'affiche",
"help.desc_a13f7f2c": "Une fois terminé,\n AI: texte traité ✓ confirme\n le succès",
"help.desc_32e3d66d": "En cas d'erreur de clé API :\n AI: clé API invalide",
"help.desc_7e86626c": "Bouton Partager : Dans les\n actions du fichier, génère un lien unique",
"help.desc_985d759b": "Token unique : 64\n caractères hexadécimaux, impossible à\n deviner",
"help.desc_ec5f7a26": "Expiration configurable :\n Durée de vie en heures",
"help.desc_071da87a": "Lecture seule : La vue\n publique n'affiche que le contenu sans\n édition",
"help.desc_2c220763": "Gestion des liens : Liste\n et révocation dans les Configurations",
"help.desc_cfe362a7": "Export PDF : Téléchargement\n du document partagé en PDF via/s/{token}/pdf",
"help.desc_2349271d": "Automatisation CI/CD :\n Déclencher un build quand une note de\n procédure est mise à jour",
"help.desc_d915c72b": "Synchronisation : Copier\n les nouveaux fichiers vers un autre système\n (SharePoint, Google Drive)",
"help.desc_cc8e35ba": "Notifications : Alerter un\n canal Slack/Discord quand un document est\n créé",
"help.desc_660051b0": "Audit externe : Logger\n toutes les modifications dans une base de\n données externe",
"help.desc_89a8f5de": "Déploiement : Publier un\n article de blog quand un fichier est marquépublish: true",
"help.desc_a601f22e": "Allez dans ⚙️ Configurations → onglet\n Webhooks",
"help.desc_c992f2e5": "Remplissez :\n Nom (descriptif),\n URL (endpoint cible),\n Secret (optionnel)",
"help.desc_f58da6e1": "Cliquez Ajouter",
"help.desc_6bc48f59": "Créez un\n Webhook Trigger dans n8n ou\n Make",
"help.desc_7819b56f": "Copiez l'URL générée (ex:\n https://n8n.monserveur.com/webhook/abc123)",
"help.desc_7b45490b": "Dans ObsiGate, ajoutez un webhook pointant\n vers cette URL",
"help.desc_85effb89": "Timeout de 5 secondes par\n requête — les webhooks sont \"fire and\n forget\" (pas de retry)",
"help.desc_dc4d7186": "Les modifications détectées par le watcher\n filesystem (watchdog)\n ne déclenchent pas de\n webhooks — seules les opérations via l'API\n REST sont prises en compte",
"help.desc_d3a71d97": "file_modified n'est pas encore\n dispatché (réservé pour version future)",
"help.desc_7671e56a": "Avant écriture : Sauvegarde\n du contenu original dans\n .obsigate-backup/",
"help.desc_e7e3157a": "Timestamp : Chaque backup\n est horodaté",
"help.desc_a69804cd": "Répertoire dédié :\n .obsigate-backup/ dans le\n répertoire de la vault",
"help.desc_a974f7a6": "Journal : Fichier\n data/audit.log au format JSON\n lines",
"help.desc_3c4711b8": "Événements tracés :\n Écritures, suppressions, changements de\n configuration",
"help.desc_68c2b170": "Rotation : Rotation\n automatique à 10 Mo",
"help.desc_7708f226": "JWT + Argon2id : Tokens JWT\n avec mots de passe hachés Argon2id",
"help.desc_b54c21ef": "Contrôle d'accès par vault\n : Chaque utilisateur voit uniquement ses\n vaults",
"help.desc_f952db17": "Refresh tokens : Cookies\n HttpOnly avec rotation automatique",
"help.desc_1577912b": "Rate limiting : 10\n tentatives / 15 min par IP + verrouillage\n compte",
"help.desc_d646b709": "Compte admin : Créé\n automatiquement au premier démarrage",
"help.desc_bc08f215": "Secret redactor : Masque\n JWT, clés API, tokens GitHub dans les\n aperçus",
"help.desc_7f1d0512": "Path traversal : Validation\n des chemins contre les attaques\n ../",
"help.desc_9d0e39d0": "Headers CSP :\n Content-Security-Policy, X-Frame-Options,\n XSS-Protection",
"help.desc_1f11691c": "Atomic writes : Écriture\n via fichier temporaire + renommage atomique",
"help.desc_723ed8db": "Non-root Docker : Conteneur\n tourne avec UID 1000",
"help.desc_625112fd": "Sélectionnez un contexte :\n Choisissez un vault pour réduire le bruit",
"help.desc_9186a3a3": "Explorez l'arborescence :\n Naviguez dans les dossiers",
"help.desc_93902d18": "Utilisez les tags : Filtrez\n par tags pour affiner",
"help.desc_cdf7bb46": "Recherchez intelligemment :\n Combinez opérateurs et texte libre",
"help.desc_5396ed9e": "Profitez de l'historique :\n Réutilisez vos recherches fréquentes",
"help.desc_1a04ae18": "Masquez la sidebar : Plus\n d'espace pour le contenu",
"help.desc_0f9a1e5b": "Utilisez le filtrage sidebar\n : Plus rapide que la recherche globale pour\n trouver un fichier",
"help.desc_6902f20d": "Favorisez les opérateurs :\n tag: et\n vault: accélèrent la recherche",
"help.desc_664b1d09": "Breadcrumb cliquable :\n Repositionnez rapidement la sidebar",
"help.desc_58d2326f": "Navigation visuelle : Le\n breadcrumb repositionne automatiquement la\n sidebar",
"help.desc_698d92ec": "Gestion de l'espace :\n Réduisez les sections Vaults/Tags selon vos\n besoins",
"help.desc_e6129268": "Confort de lecture :\n Ajustez la largeur de la sidebar",
"help.desc_5374685a": "Mobile-friendly : Utilisez\n le bouton hamburger sur mobile",
"help.desc_443b76b5": "Wikilinks : Naviguez entre\n notes comme dans Obsidian",
"help.desc_0739c6a9": "Images : Support complet\n des syntaxes Obsidian",
"help.desc_87b348c3": "Recherche multi-critères :\n tag:docker tag:linux vault:IT\n nginx",
"help.desc_40c92863": "Exploration par tags :\n Cliquez sur un tag dans une note pour voir\n toutes les notes similaires",
"help.desc_26f81732": "Édition rapide : Ouvrez\n l'éditeur, modifiez, sauvegardez",
"help.desc_99c6f0ec": "Export : Téléchargez des\n fichiers pour backup ou partage",
"help.desc_ecf302ae": "Multi-fenêtres : Ouvrez\n plusieurs notes dans des onglets séparés"
}