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"