Flux de travail de maintenance des traductions
Pour les commandes de documentation générales (compilation, déploiement, captures d'écran, génération README), consultez Outils de documentation.
Aperçu
La documentation utilise Docusaurus i18n avec l'anglais comme locale par défaut. La documentation source se trouve dans docs/ ; les traductions sont écrites sous i18n/{locale}/. Locales prises en charge : en-GB (par défaut), fr, de, es, pt-BR, hi, zh-Hans.
La traduction par IA pour l'interface utilisateur de l'application, le markdown/JSON Docusaurus, les ressources SVG et les modèles de notification par défaut est gérée par ai-i18n-tools à partir de la racine du référentiel, configurée dans ai-i18n-tools.config.json (pas à l'intérieur de documentation/). Définissez OPENROUTER_API_KEY lors de l'exécution des commandes de traduction.
Pour essayer un checkout non publié sur la même machine (../ai-i18n-tools par défaut), remplacez la dépendance avec pnpm i18n:tools --local ou ./scripts/link-ai-i18n-tools.sh --local. Cela lie à la fois la CLI (pnpm i18n:*) et l’import ai-i18n-tools/runtime. Reconstruisez le package tools après les modifications du code source (pnpm build dans ce checkout). Restaurez le package npm le plus récent avec --remote. Ne commitez pas le spécificateur link:.
Quand la documentation anglaise change
- Modifiez la source dans
documentation/docs/(en anglais uniquement). Le texte de la page de destination estdocumentation/src/landing/landing.html. - Chaînes d'interface utilisateur Docusaurus (libellés de thème, barre de navigation, etc.) : si nécessaire, exécutez
pnpm write-translationsdansdocumentation/pour quei18n/en/*.jsonrécupère les nouvelles clés. - Identifiants d'en-tête :
pnpm write-heading-ids(depuisdocumentation/). - Traduisez depuis la racine du dépôt (ou utilisez les raccourcis ci-dessous depuis
documentation/) :pnpm i18n:extract— actualisesrc/locales/strings.jsonà partir det('…')dans l'application Next.js.pnpm i18n:translate:docs— traduit le Markdown, le JSON d'environnement Docusaurus et le code HTML de la page de destination versdocumentation/i18n/etdocumentation/src/landing/i18n/selon la configuration.pnpm i18n:translate:svg— traduit les SVG sousdocumentation/static/imgselon la configuration.pnpm i18n:translate:json— traduit les modèles de notification par défaut danssrc/locales/templates/à partir deen-GB.json.- Ou exécutez tout :
pnpm i18n:translate.
- Générer :
cd documentation && pnpm build(toutes les locales).
À partir de documentation/, les mêmes flux sont câblés comme pnpm translate → racine i18n:translate, plus pnpm translate:docs, translate:ui, translate:svg, translate:status, i18n:extract, i18n:sync.
Pluriels d'interface utilisateur
Les pluriels cardinaux dans l'application Next.js utilisent ai-i18n-tools, pas les clés _one / _other écrites à la main.
Écrivez une chaîne source anglaise (généralement le pluriel) et transmettez un objet littéral simple avec plurals: true et un count numérique :
t("{{count}} backups selected", { plurals: true, count: selectedBackups.size })
Règles :
- N'utilisez pas les couvertures
item(s)ou les pairescount === 1 ? t('…') : t('…'). - Les comptages numériques indépendants nécessitent des appels
t()séparés — un axe pluriel ne peut pas faire varier deux nombres (par exemple 1 réussi et 2 échoués). Concaténez les fragments :
`${t("Tested {{count}} connections:", { plurals: true, count: total })} ` +
`${t("{{count}} successful,", { plurals: true, count: successCount })} ` +
`${t("{{count}} failed", { plurals: true, count: failureCount })}`
- Les interpolations non numériques (noms, étiquettes, etc.) sont correctes dans la même chaîne plurielle que
{{count}}. pnpm i18n:extractmarque la ligne du catalogue"plural": true.pnpm i18n:translate:uiremplit les formes CLDR et écritsrc/locales/en-GB.json(clés plurielles uniquement).src/i18n.tsetsrc/lib/i18n-server.tschargent ce fichier commesourcePluralFlatBundlepour que le singulier/pluriel anglais se résolve à l'exécution.
Modèles de notification par défaut
Paramètres → Modèles → Réinitialiser charge les valeurs par défaut à partir de src/locales/templates/{locale}.json (câblé dans src/lib/default-notification-templates.ts).
- Modifiez
src/locales/templates/en-GB.jsonuniquement (source anglaise). - Exécutez
pnpm i18n:translate:json(oupnpm i18n:translate) à partir de la racine du référentiel. - Examinez les différences — les espaces réservés tels que
{backup_name}et{problem_table}doivent rester inchangés ;priorityettagssont ignorés parkeyPolicydansai-i18n-tools.config.json. - Exécutez
pnpm i18n:statuspour voir la couverture du bloc JSON.
Consultez le guide JSON ai-i18n-tools pour les drapeaux (--locale, --force, etc.).
HTML de la page de destination
Le corps de la page d'accueil de la documentation est un seul fichier HTML en anglais, et non des composants de section React.
- Modifiez
documentation/src/landing/landing.html(etdocumentation/src/landing/landing.csspour la mise en page). Conservez les identifiants de hachagefeatures,dashboard,workflow,securityetinstall. - Exécutez
pnpm i18n:translate:docsdepuis la racine du dépôt (oupnpm translate:docsdepuisdocumentation/). - Les copies générées sont écrites dans
documentation/src/landing/i18n/{locale}/landing.html. Ne modifiez pas ces fichiers manuellement.
translate-docs utilise le pipeline Pages HTML : le texte visible et alt / title / aria-label sont traduits ; <pre> et <code> restent en anglais. Les libellés de la barre de navigation et le titre de la page restent dans Translate de Docusaurus (homepage.nav.*, homepage.meta.*).
N'ajoutez pas de marqueurs data-i18n à ce fichier et ne le listez pas sous ui.sourceRoots. Le même fichier HTML ne doit pas figurer à la fois dans le pipeline de documents et dans le pipeline de chaînes d'interface utilisateur.
Glossaire
- La terminologie de l'interface utilisateur pour la documentation provient de chaque catalogue
ui[]avecuiGlossaryactivé (par défaut). Le catalogue de l'application Next.js estsrc/locales/strings.json(produit parpnpm i18n:extract). Ne définissez pasglossary.uiGlossary; cette clé est rejetée. - Les remplacements se trouvent dans
documentation/glossary-user.csv(glossary.userGlossarydans la configuration). Consultez la documentation du glossaire ai-i18n-tools pour le format des colonnes. - Générer un modèle CSV :
pnpm i18n:glossary-generate(racine).
Cache
Le cache de traduction pour ai-i18n-tools se trouve sous .translation-cache/ à la racine du dépôt (cacheDir dans ai-i18n-tools.config.json). Il est ignoré par git. Utilisez pnpm i18n:status et les drapeaux --force / cache de la CLI selon la documentation ai-i18n-tools quand vous avez besoin d'une actualisation complète.
IDs de titre et ancres
Utilisez des IDs explicites pour que les liens restent stables entre les langues. Préférez la syntaxe de commentaire MDX (pnpm write-heading-ids utilise --syntax mdx-comment) :
## This is a heading {/* #this-is-a-heading */}
Placez les IDs sur h2 et en dessous. Docusaurus write-heading-ids ignore h1 (le titre de la page/barre latérale). documentation/docusaurus.config.ts supprime également les commentaires d'ID de titre des titres déduits, car l'extraction de métadonnées Docusaurus supprime toujours uniquement les {#id} classiques.
cd documentation
pnpm write-heading-ids
Listes d'ignorance
Utilisez .translate-ignore à la racine du dépôt (même idée que .gitignore) pour les chemins que le traducteur de documentation doit ignorer, si vous en ajoutez un pour votre flux de travail.
JSON de thème Docusaurus
pnpm write-translations extrait les chaînes UI Docusaurus dans documentation/i18n/en/. L'étape ai-i18n-tools translate-docs (avec markdownOutput.style: "docusaurus") remplit le JSON traduit sous chaque locale aux côtés du markdown, selon ai-i18n-tools.config.json.
Dépannage
OPENROUTER_API_KEYnon défini — exportez-le ou ajoutez-le à.env.localà la racine du dépôt.- Modèle / qualité — ajustez
openrouter.translationModelset les options associées dansai-i18n-tools.config.json. - Glossaire — modifiez
documentation/glossary-user.csvou régénérez les chaînes UI et relancez l'extraction + traduction.
Ajouter une nouvelle langue
- Ajoutez la locale à Docusaurus
i18n.localesetlocaleConfigsdansdocumentation/docusaurus.config.ts. - Ajoutez la même locale à
targetLocalesdansai-i18n-tools.config.json(racine du dépôt). - Exécutez
pnpm i18n:generate-ui-languagesà la racine, puis les commandespnpm i18n:extract/ traduction selon les besoins.