Référence de configuration
sourceLocale
Code BCP-47 pour la langue source (par exemple "en-GB", "en", "pt-BR"). Aucun fichier de traduction n'est généré pour cette langue — la chaîne clé elle-même est le texte source.
Doit correspondre à SOURCE_LOCALE exporté depuis votre fichier de configuration i18n au moment de l'exécution (src/i18n.ts / src/i18n.js).
targetLocales
Tableau de codes de langue BCP-47 vers lesquels traduire (par exemple, ["de", "fr", "es", "pt-BR"]).
targetLocales est la liste principale des paramètres régionaux pour la traduction de l'interface utilisateur et la liste par défaut des blocs de documentation. Utilisez generate-ui-languages pour générer le manifeste ui-languages.json à partir de sourceLocale + targetLocales.
uiLanguage (facultatif)
Code BCP-47 pour la langue de l'interface utilisateur de l'outil (aide CLI, journaux/résumés et tableau de bord de traduction). Il est indépendant de sourceLocale / targetLocales et est remplacé par l'indicateur -L / --ui-lang et la variable d'environnement AI_I18N_LANG. Les valeurs inconnues sont rétrogradées en douceur vers les paramètres régionaux source (en-GB) — il n'y a pas de validation stricte. Voir Langue de l'interface utilisateur de l'outil.
languagesManifestPath (facultatif)
Chaîne facultative de niveau racine (non imbriquée sous ui). Chemin où extract et generate-ui-languages écrivent le manifeste ui-languages.json, et où la CLI le lit pour les noms d'affichage et le post-traitement de la liste des langues. Si omis, la valeur par défaut est ui.flatOutputDir/ui-languages.json lors du chargement de la configuration.
Utilisez cette option lorsque :
- Le manifeste doit se trouver en dehors de
ui.flatOutputDir(par exemple, à côté des assistants d'application soussrc/i18n/). - Vous souhaitez que le post-traitement du sélecteur de langue (
languageListBlock) construise les étiquettes de locale à partir du manifeste du projet plutôt que du seul catalogue maître fourni.
includeUiLanguageEnglishNames ne lit pas ce fichier — il utilise le catalogue maître fourni (voir ui.uiExtractor ci-dessous).
Hérité : uiLanguagesPath de niveau racine est toujours accepté lors du chargement d'un fichier de configuration et est automatiquement réécrit en languagesManifestPath.
concurrency (facultatif)
Nombre maximal de paramètres régionaux cibles traduits simultanément (translate-ui, translate-docs, translate-svg et les étapes correspondantes dans sync). En l'absence de cette option, la CLI utilise 4 pour la traduction de l'interface utilisateur et 3 pour la traduction de la documentation (valeurs par défaut intégrées). Remplaçable lors de l'exécution via -j / --concurrency.
batchConcurrency (facultatif)
translate-docs, translate-svg et translate-json (et les étapes correspondantes dans sync) : nombre maximal de requêtes LLM par lots parallèles par fichier (chaque lot peut contenir de nombreux segments). La valeur par défaut est 4 si omise. Ignoré par translate-ui. Remplacé par -b / --batch-concurrency.
fileConcurrency (facultatif)
Nombre maximal de fichiers traités simultanément dans une même langue pendant translate-docs et sync. Lorsqu’il est défini à une valeur supérieure à 1, les fichiers de la même langue sont traités en parallèle à l’aide d’un sémaphore pour contrôler l’utilisation de la mémoire. Valeur par défaut : 1 (traitement séquentiel) si omis. Des valeurs plus élevées peuvent améliorer significativement le débit pour les opérations liées aux E/S, en particulier lorsque tous les segments sont déjà mis en cache (aucun appel API nécessaire).
Exemple :
{
"fileConcurrency": 4
}Cas d’usage : Définissez cette valeur à 2-4 lors de l’exécution de sync --force-update avec 100 % de succès de cache pour réduire le temps total de traitement. L’amélioration est particulièrement notable avec de nombreux petits fichiers.
batchSize / maxBatchChars (facultatif)
Traitement par lots des segments pour translate-docs, translate-svg et translate-json : nombre de segments par requête API et plafond de caractères. Valeurs par défaut : 20 segments, 4096 caractères (si omises).
provider et providers
provider (niveau supérieur, facultatif) sélectionne la clé du fournisseur actif parmi providers. Il est facultatif lorsqu'un seul fournisseur est configuré ; requis lorsque plus d'un est configuré.
providers (niveau supérieur) mappe une clé de fournisseur à son bloc. Les clés intégrées (voir le tableau des préréglages ci-dessous) n'ont besoin que de translationModels ; toute autre clé définit un point de terminaison personnalisé compatible OpenAI et nécessite baseUrl (plus apiKeyEnv sauf si le point de terminaison n'a pas besoin de clé).
Chaque bloc providers.<name> accepte :
translationModelsListe ordonnée préférée des ID de modèle (ID en amont simples, sans préfixeprovider/; les ID OpenRouter conservent leur forme nativevendor/model). Le premier est essayé en premier ; les entrées suivantes sont des solutions de repli en cas d'erreur. Il s'agit de la chaîne par défaut globale pour chaque pipeline lorsqu'aucun niveau plus spécifique ne s'applique.uiModels(facultatif) Liste de modèles ordonnée, réservée à l'interface utilisateur, pourtranslate-ui, la génération plurielle (Étape 0 et Passe B) etproofread-ui. Essayée après toute entréelocaleModelscorrespondante pour le paramètre régional cible, avanttranslationModels.localeModels(facultatif) Remplacements par paramètre régional pour tous les pipelines de traduction. Tableau d'objets{ "locale": "<BCP-47>", "models": ["…"] }. Les balises de paramètre régional sont mises en correspondance sans tenir compte de la casse (pt-br=pt-BR). La liste de chaque paramètre régional est essayée en premier pour ce paramètre régional uniquement, puis les niveaux spécifiques au pipeline (uiModelspour l'interface utilisateur) ettranslationModels. Les clés de paramètre régional normalisées en double sont rejetées lors du chargement de la configuration.baseUrlURL de base compatible OpenAI. Remplace l'URL de base prédéfinie ; requise pour un fournisseur non prédéfini.apiKeyEnvVariable d'environnement contenant la clé API. Remplace la variable d'environnement prédéfinie.headersEn-têtes HTTP supplémentaires envoyés avec chaque requête à ce fournisseur.maxTokensNombre maximal de jetons de complétion par requête. Par défaut :8192.temperatureTempérature d'échantillonnage. Par défaut :0.2.requestTimeoutMsTemps maximal en millisecondes à attendre pour chaque requête. Par défaut :30000(30 secondes).
Préréglages de fournisseurs intégrés (clé — URL de base — variable d'environnement de la clé API) :
| Fournisseur | URL de base | Variable d'environnement de la clé API |
|---|---|---|
openrouter | https://openrouter.ai/api/v1 | OPENROUTER_API_KEY |
openai | https://api.openai.com/v1 | OPENAI_API_KEY |
anthropic | https://api.anthropic.com/v1 | ANTHROPIC_API_KEY |
gemini | https://generativelanguage.googleapis.com/v1beta/openai | GOOGLE_API_KEY |
deepseek | https://api.deepseek.com | DEEPSEEK_API_KEY |
cerebras | https://api.cerebras.ai/v1 | CEREBRAS_API_KEY |
groq | https://api.groq.com/openai/v1 | GROQ_API_KEY |
mistral | https://api.mistral.ai/v1 | MISTRAL_API_KEY |
xai | https://api.x.ai/v1 | XAI_API_KEY |
nvidia | https://integrate.api.nvidia.com/v1 | NVIDIA_API_KEY |
alibaba | https://dashscope-intl.aliyuncs.com/compatible-mode/v1 | ALIBABA_API_KEY |
apifun | https://api.apikey.fun/v1 | APIFUN_API_KEY |
ollama | http://localhost:11434/v1 | (aucun) |
Un bloc openrouter hérité de niveau supérieur (avec baseUrl, translationModels, defaultModel, fallbackModel, maxTokens, temperature, requestTimeoutMs) est toujours accepté et est automatiquement migré vers providers.openrouter (avec provider: "openrouter") au chargement ; defaultModel / fallbackModel sont intégrés dans translationModels.
Pour un exemple exécutable qui configure plusieurs fournisseurs dans une seule configuration et bascule entre eux avec -P, voir examples/multi-provider (openai, anthropic, nvidia et deepseek sur le même document).
Pourquoi utiliser plusieurs modèles : Différents fournisseurs et modèles ont des coûts variables et offrent différents niveaux de qualité selon les langues et les locales. Configurez translationModels comme une chaîne de repli ordonnée (plutôt qu'un seul modèle) afin que la CLI puisse tenter le modèle suivant si une requête échoue.
Considérez la liste ci-dessous comme une base que vous pouvez étendre : si la traduction pour une langue spécifique est médiocre ou infructueuse, recherchez les modèles qui prennent en charge cette langue ou ce script efficacement (référez-vous aux ressources en ligne ou à la documentation de votre fournisseur), et ajoutez ces identifiants de modèle comme alternatives supplémentaires.
Ces ID de modèle correspondent à ai-i18n-tools init [-P <provider>] lorsque -P openrouter (par défaut). D'autres préréglages obtiennent des ID de modèle natifs de init -P <provider> — voir Fournisseurs intégrés.
Cette liste a été testée pour une couverture étendue des paramètres régionaux dans un vaste projet de documentation comportant 36 paramètres régionaux cibles ; elle sert de valeur par défaut pratique, mais n'est pas garantie pour fonctionner correctement dans tous les paramètres régionaux.
Exemple translationModels (mêmes valeurs par défaut que ai-i18n-tools init [-P <provider>]) :
Liste de secours par défaut pour translationModels
"translationModels": [
"google/gemini-2.5-flash",
"meta-llama/llama-3.3-70b-instruct",
"openai/gpt-4o-mini",
"google/gemma-4-26b-a4b-it",
"~anthropic/claude-haiku-latest",
"z-ai/glm-5.2",
"google/gemini-3.5-flash",
"~anthropic/claude-sonnet-latest"
// … add more fallback models as needed
]uiModels recommandé : Les chaînes d'interface utilisateur sont courtes mais très visibles — un modèle premium améliore souvent le ton, les pluriels et la cohérence. Le uiModels facultatif est essayé après toute entrée localeModels correspondante et avant translationModels (voir la liste des champs ci-dessus). Exemple :
Modèles d'interface utilisateur recommandés pour la traduction d'interface utilisateur
"uiModels": [
"~anthropic/claude-sonnet-latest",
"z-ai/glm-5.2"
]localeModels recommandé pour les langues asiatiques : Les paramètres régionaux japonais, coréens et chinois bénéficient souvent de modèles adaptés à ces écritures. Ajoutez des remplacements par paramètre régional qui sont essayés en premier (avant uiModels / translationModels) lorsque le paramètre régional cible correspond :
localeModels recommandés pour ja, ko, zh-Hans, zh-Hant
"localeModels": [
{ "locale": "ja", "models": [ "z-ai/glm-5.2", "minimax/minimax-m2.7" ] },
{ "locale": "ko", "models": [ "z-ai/glm-5.2", "minimax/minimax-m2.7" ] },
{ "locale": "zh-Hans", "models": [ "z-ai/glm-5.2", "minimax/minimax-m2.7" ] },
{ "locale": "zh-Hant", "models": [ "z-ai/glm-5.2", "minimax/minimax-m2.7" ] }
]Définissez la variable d'environnement de la clé API du fournisseur actif (voir le tableau des préréglages) dans votre environnement ou votre fichier .env.
Avant de modifier les listes de modèles, exécutez ai-i18n-tools check-models. Pour chaque fournisseur, il vérifie chaque ID de modèle configuré (translationModels, uiModels et toutes les entrées localeModels) par rapport à la liste de modèles en direct de ce fournisseur (GET /models), signale les ID manquants ou passés expiration_date, liste les modèles valides et quitte avec un code d'erreur si un ID configuré est invalide. Lorsque le fournisseur renvoie des prix (par exemple OpenRouter), il affiche également les prix d'entrée/sortie estimés (USD par million de jetons).
Pour comparer les modèles configurés sur un travail de traduction réel, exécutez ai-i18n-tools bench-models. Il évalue chaque ID de modèle unique de translationModels, uiModels et localeModels en traduisant un échantillon à travers chacun isolément (en parallèle, limité par concurrency) et imprime les jetons d'entrée/sortie par modèle, le temps réel et le coût en USD, afin que vous puissiez peser la vitesse par rapport au prix avant de vous décider sur les listes de modèles.
features
| Champ | Pipeline | Description |
|---|---|---|
translateUIStrings | 1 | Extrait t("…") / i18n.t("…") dans strings.json, puis traduit les entrées et écrit un JSON plat par locale (l'extraction s'exécute automatiquement ; utilisez extract autonome pour actualiser le catalogue uniquement). |
translateDocs | 2 | Traduire .md / .mdx / .astro pages ; JSON de Docusaurus lorsqu'il est défini docs[].docusaurusCatalogDir ; Nextra _meta / dictionnaire lorsqu'il est configuré ; thème VitePress lorsqu'il est défini docsOutput.vitepressThemeCatalog ; Fumadocs meta.json / catalogue d'interface utilisateur lorsqu'il est défini docsOutput.style est "fumadocs". |
translateJson | 3 | JSON arbitraire imbriqué sous json[] (translate-json). |
translateSVG | — | Traduire les fichiers .svg (nécessite le bloc svg au niveau racine). |
Traduire les fichiers SVG avec translate-svg lorsque features.translateSVG est à true et qu'un bloc racine svg est configuré. La commande sync exécute cette étape lorsque les deux conditions sont remplies (sauf si --no-svg).
ui
sourceRoots
Répertoires ou modèles de glob (relatifs au répertoire de travail actuel) analysés pour les appelst("…"). Prend en charge des modèles commesrc/ou["src/**/*.ts"].stringsJson
Chemin d'accès au fichier de catalogue principal. Mis à jour parextract.flatOutputDir
Répertoire où les fichiers JSON par paramètre régional sont écrits (de.json, etc.).uiExtractor.funcNames(ou l'ancienreactExtractor.funcNames)
Noms de fonctions supplémentaires à analyser (par défaut :["t", "i18n.t"]).uiExtractor.extensions(ou l'ancienreactExtractor.extensions)
Extensions de fichier à inclure (par défaut :[".js", ".jsx", ".ts", ".tsx"]). Ajoutez.astropour le frontmatter et les expressions de modèle Astro.uiExtractor.includePackageDescription(ou l'ancienreactExtractor.includePackageDescription)
Lorsquetrue(par défaut),extractinclut égalementpackage.jsondescriptioncomme chaîne d'interface utilisateur si présente.uiExtractor.packageJsonPath(ou l'ancienreactExtractor.packageJsonPath)
Chemin personnalisé vers le fichierpackage.jsonutilisé pour cette extraction de description facultative.uiExtractor.includeUiLanguageEnglishNames(ou l'ancienreactExtractor.includeUiLanguageEnglishNames)
Lorsque true (par défaut false), extract ajoute également chaque englishName du catalogue maître des langues d'interface utilisateur fourni (construit à partir de sourceLocale + targetLocales) à strings.json si elle n'est pas déjà présente à partir de l'analyse source (mêmes clés de hachage). Ne lit pas languagesManifestPath.
cacheDir
cacheDirRépertoire du cache SQLite (partagé par tous les blocsdocs). Par défaut.translation-cache. Réutiliser entre les exécutions. Si vous migrez depuis un cache de traduction de documents personnalisé, archivez-le ou supprimez-le —cacheDircrée sa propre base de données SQLite et n'est pas compatible avec d'autres schémas.
Bonnes pratiques pour les exclusions git :
- Excluez le contenu du dossier de cache de traduction (par exemple, en utilisant
.gitignoreou.git/info/exclude) afin d'éviter de valider des artefacts temporaires. - Conservez
cache.db(ne le supprimez pas systématiquement), car la préservation du cache SQLite évite de retraduire des segments inchangés. Cela permet d'économiser à la fois du temps d'exécution et des coûts d'API lors de la mise à jour ou de la modification d'un logiciel utilisantai-i18n-tools. - Excluez les fichiers temporaires et les fichiers journaux pour éviter de valider des fichiers de sauvegarde ou de débogage.
Exemple :
# Translation cache directory
.translation-cache/*
# Keep SQLite cache for reuse
!.translation-cache/cache.db
# Temporary and log files
*.tmp
*.logdocs
Tableau de blocs de pipeline de documentation. translate-docs et la phase de documentation de sync traitent chaque bloc dans l'ordre. Les clés héritées sont toujours acceptées au moment du chargement et réécrites lorsque le fichier de configuration est inscriptible ; préférez les noms actuels dans les nouvelles configurations.
| Clé héritée | Clé/comportement actuel |
|---|---|
documentations | docs |
markdownOutput | docs[].docsOutput |
jsonSource | docs[].docusaurusCatalogDir |
openrouter de niveau supérieur | providers.openrouter + provider: "openrouter" |
features.translateMarkdown | features.translateDocs |
features.translateJSON | supprimé (utiliser docs[].docusaurusCatalogDir ou json[]) |
features.extractUIStrings | supprimé (extract s'exécute avant la traduction de l'interface utilisateur) |
glossary.uiGlossaryFromStringsJson | glossary.uiGlossary |
ui.reactExtractor | ui.uiExtractor (l'alias est toujours accepté) |
svg.svgExtractor.forceLowercase | svg.forceLowercase |
Sources de contenu
descriptionNote facultative lisible par l'humain pour ce bloc (non utilisée pour la traduction). Préfixe dans le titretranslate-docs🌐lorsqu'elle est définie ; également affichée dans les en-têtes de sectionstatus.contentPathsCorps de pages Markdown/MDX et modèles.astroà traduire (translate-docsanalyse ceux-ci pour.md,.mdxet.astro). Prend en charge les chemins de répertoire ou les motifs glob (par exemple"docs/**/*.md","guides/*.mdx","src/pages/index.astro"). C'est là que provient la prose documentaire localisée.sourceFilesAlias facultatif fusionné danscontentPathsau chargement.targetLocalesSous-ensemble facultatif de paramètres régionaux pour ce bloc uniquement (sinon utilisetargetLocalesau niveau racine). Les paramètres régionaux de documentation effectifs sont l'union entre tous les blocs.docusaurusCatalogDirFacultatif. Répertoire source des catalogues d'étiquettes JSON Docusaurus pour ce bloc (par exemple,"i18n/en"dedocusaurus write-translations). Les corps de page proviennent toujours decontentPaths;docusaurusCatalogDirne fournit que le JSON de l'interface/shell, pas le MDX.nextraMetaGlobGlob(s) facultatif(s) pour_meta.ts/_meta.tsx/_meta.jsNextra sousdocsRoot. LorsquedocsOutput.styleest"nextra"et que ceci est omis, tous les fichiers_metasousdocsRootsont collectés automatiquement.nextraMetaTranslatableKeysNoms de propriétés facultatifs dont les valeurs de chaîne sont traduites dans les objets_metaNextra (par défaut :title,display,breadcrumb).nextraDictionaryPathModule de dictionnaire de thème Nextra anglais facultatif (par exemple,"app/_dictionaries/en.ts"). Traduit en{dir}/{locale}.tspendanttranslate-docs.nextraDictionaryOutputTemplateModèle de sortie facultatif pour les modules de dictionnaire de locale (par défaut :{dir}/{locale}.tspar rapport au répertoire du dictionnaire).
Disposition de sortie
outputDirRépertoire racine pour la sortie traduite de ce bloc.docsOutput.style"nested"(par défaut),"flat","doc-system", ou les alias"docusaurus"/"astro-starlight"/"vitepress"/"nextra".docsOutput.localeSubpathSegment de chemin entre{locale}/et{relativeToDocsRoot}pourdoc-system(obligatoire lors de l'utilisation directe destyle: "doc-system"; prédéfini lors de l'utilisation d'un alias). Utilisez""pour les dossiers de locale de style Starlight.docsOutput.docsRootRacine des documents source pour la mise en page Docusaurus (par exemple,"docs"). Par défaut"docs"si omis.docsOutput.pathTemplateChemin de sortie Markdown personnalisé. Espaces réservés :"{outputDir}","{locale}","{LOCALE}","{llocale}","{relPath}","{stem}","{basename}","{extension}","{docsRoot}","{relativeToDocsRoot}".docsOutput.jsonPathTemplateChemin de sortie JSON personnalisé pour les fichiers d'étiquettes. Prend en charge les mêmes espaces réservés quepathTemplate.docsOutput.localePathLowercaseLorsquetrue, les mises en page de sortie intégrées (nested,flat,doc-systemsanspathTemplate) utilisent des segments de paramètres régionaux en minuscules dans les chemins. Par défautfalse;astro-starlightetdoc-systemaveclocaleSubpathvide par défaut àtrueau chargement de la configuration.docsOutput.flatPreserveRelativeDirLorsquedocsOutput.style = "flat", conserve les sous-répertoires source afin que les fichiers avec le même nom de base n'entrent pas en collision. Par défautfalse.docsOutput.rewriteRelativeLinksRéécrire les liens relatifs après la traduction (activé automatiquement lorsquedocsOutput.style = "flat"et aucunpathTemplatepersonnalisé).docsOutput.linkRewriteDocsRootRacine du dépôt utilisée lors du calcul des préfixes de réécriture de liens plats. Laissez généralement cette valeur à".", sauf si vos documents traduits se trouvent sous une racine de projet différente.docsOutput.rewriteVitepressLinksLorsquetrue, exécutez le normalisateur de liens VitePress après la traduction. Par défaut, activé lorsquedocsOutput.styleest"vitepress". À utiliser avec toute dispositiondoc-systemoù les dossiers de locale se trouvent à côté de l'anglais sousdocsRoot. Réécrit les cheminsdocs/guide/…de style README vers les routes du site (/guide/…) et les liens../guide/…relatifs à la locale. Pour les liens vers des fichiers de dépôt en dehors de l'arborescence VitePress (LICENSE,examples/), utilisez des URL complètes dans la source anglaise — voir Intégration VitePress — README comme page d'accueil des documents.docsOutput.rewriteNextraLinksLorsquetrue, exécutez le normalisateur de liens Nextra après la traduction. Par défaut, activé lorsquedocsOutput.styleest"nextra". Réécrit les cheminscontent/en/…et les chemins.mdxrelatifs vers des routes de site neutres en locale (/guide/…) pour Next.jsi18n. Voir Intégration Nextra — Conventions de liens.docsOutput.fumadocsParser"dot"(par défaut) ou"dir". Dot écritstem.{locale}.mdxà côté des sources anglaises ; dir écrit les dossiers de locale comme Nextra. Voir Intégration Fumadocs — Disposition de la page.docsOutput.rewriteFumadocsLinksLorsquetrue, exécutez le normalisateur de liens Fumadocs après la traduction. Par défaut, activé lorsquedocsOutput.styleest"fumadocs". Réécrit les chemins de contenu et les liens.mdxrelatifs vers les routes/docs/….docsOutput.fumadocsUiCatalogFacultatif. Amorçage du catalogue de remplacement de l'interface utilisateur Fumadocs + traduction à l'intérieur detranslate-docs. Champs :sourcePath(par exemplelib/layout.shared.ts),catalogPath(JSON anglais généré),outputPathTemplatefacultatif (par défaut :ui.{locale}.jsonà côté decatalogPath).docs[].fumadocsMetaGlobGlob(s) facultatif(s) pour la collectionmeta.jsonlorsquedocsOutput.styleest"fumadocs". Par défaut :meta.jsonrécursif sousdocsOutput.docsRoot.docs[].fumadocsMetaTranslatableKeysNoms de propriétés dont les valeurs de chaîne sont traduites dans Fumadocsmeta.json(par défaut :title,description).docsOutput.vitepressThemeCatalogFacultatif. Catalogue de thème/nav/barre latérale VitePress bootstrap + traduction à l'intérieurtranslate-docs. Champs :configPath(configuration VitePress avec des chaînes de thème),catalogPath(JSON anglais nested généré), facultatifoutputPathTemplate(par défaut :theme.{locale}.jsonà côté decatalogPath).
Post-traitement
docsOutput.postProcessingTransformations facultatives sur le corps Markdown traduit (les clés YAML et les valeurs de métadonnées non-prose sont conservées). S'exécute après le réassemblage des segments et la réécriture des liens (plat ou VitePress), et avantaddFrontmatter.docsOutput.postProcessing.regexAdjustmentsListe ordonnée de{ "description"?, "search", "replace" }.searchest un motif d'expression régulière (une chaîne simple utilise l'indicateurg, ou/pattern/flags).replaceprend en charge des espaces réservés tels que${translatedLocale},${sourceLocale},${sourceFullPath},${translatedFullPath},${sourceFilename},${translatedFilename},${sourceBasedir},${translatedBasedir}.docsOutput.postProcessing.languageListBlock{ "start", "end", "separator", "label"? }— régénère une ligne de liens "lire dans d'autres langues" délimitée dans le Markdown source et traduit. NécessitelanguagesManifestPath(ou un manifeste àui.flatOutputDir/ui-languages.json) pour les étiquettes endonymes lorsquelabel: "local".
Comportement et métadonnées
translateFrontmatterFieldsMême niveau quedocsOutput(par blocdocs[]). Par défauttrue: traduire la prose YAML destinée à l'utilisateur pour Starlight/Docusaurus (title,description,sidebar.label,sidebar_label,keywords,hero.title,hero.tagline,hero.image.alt,hero.actions[].text,pagination_label, étiquettesprev/next). Définissezfalsepour conserver l'intégralité du bloc d'en-tête inchangé ; passez un tableau de chaînes pour le restreindre à des chemins de points spécifiques.segmentSplittingMême niveau quedocsOutput(par blocdocs[]). Segments facultatifs plus précis pour l'extractiontranslate-docs:{ "enabled", "maxCharsPerSegment"?, "splitPipeTables"?, "splitDenseParagraphs"?, "maxLinesPerParagraphChunk"?, "splitLongLists"?, "maxListItemsPerChunk"?, "qualityRetrySplit"?, "maxQualityRetrySplitDepth"? }. Lorsqueenabledesttrue(par défaut lorsquesegmentSplittingest omis), les paragraphes denses, les tableaux GFM (le premier bloc inclut l'en-tête, le séparateur et la première ligne de données) et les longues listes sont divisés ; les sous-parties se rejoignent avec des sauts de ligne uniques (tightJoinPrevious). Définissez"enabled": falsepour utiliser un segment par bloc de corps délimité par une ligne vide uniquement. LorsquequalityRetrySplitesttrue(par défaut), les segments markdown qui échouent à la validation AST après l'épuisement de tous les modèles sont divisés progressivement et réessayés à partir du premier modèle ;maxQualityRetrySplitDepth(par défaut3) limite les divisions récursives.warnMarkdownSourceIssuesLorsquetrue(par défaut si omis), chaque exécution detranslate-docsrescane les segments markdown pour les délimiteurs risqués / le code en ligne non fermé, affiche des avertissements dans le terminal et remplace les lignesmarkdown_source_issuespour le chemin de fichier du cache de ce fichier. Définissezfalsepour ignorer les avertissements et les mises à jour SQLite pour ce bloc.addFrontmatterLorsquetrue(par défaut si omis), les fichiers markdown traduits incluent les clés YAML :translation_last_updated,source_file_mtime,source_file_hash,translation_language,source_file_path, et lorsqu'au moins un segment a des métadonnées de modèle,translation_models(liste triée des identifiants de modèle du fournisseur actif). Définissez surfalsepour ignorer.emphasisPlaceholdersPar blocdocs[]. Lorsquetrue, masque les délimiteurs d'emphase markdown en tant qu'espaces réservés avant la traduction. Par défaut àtruepour les paramètres régionaux CJK (zh,ja,ko) et pour les paramètres régionaux listés dansrtlLocales; sinon, par défaut àfalse. Peut être remplacé via CLI--emphasis-placeholders/--no-emphasis-placeholders.rtlLocalesTableau facultatif de codes BCP-47 traités comme RTL pour les valeurs par défaut des espaces réservés d'emphase (fusionné avec la détection RTL intégrée).
protectAttributesFacultatif. Noms d'attributs JSX/HTML supplémentaires dont les valeurs chaînes entre guillemets ne doivent pas être envoyées au traducteur. Fusionnés avec les valeurs par défaut intégrées (class,id,style,src,href,type,data-*, la plupart desaria-*, etc.). Insensible à la casse. S'applique à :.astroextraction de parse-and-replace (balises HTML statiques et littéraux de chaîne aprèsattr=à l'intérieur des blocs{expression}).- Extraction de placeholder MDX lors de la traduction de segments markdown/Astro (
label,tooltip, etaria-labelsur les balises JSX en majuscules, plusTabItemvaluelorsque cela est applicable).
- Extraction de placeholder MDX lors de la traduction de segments markdown/Astro (
Exemple : "protectAttributes": ["variant", "size"] conserve variant="primary" à l'intérieur de {items.map(...)} inchangé quel que soit le paramètre régional.
Vous pouvez également lister des attributs normalement traduisibles (par exemple "title" ou "aria-label") lorsque vous souhaitez que ces valeurs soient copiées telles quelles depuis l'anglais.
protectKeysFacultatif. Autres noms de propriétés d'objet dont les valeurs entre guillemets ne doivent pas être traduites à l'intérieur des blocs modèles{expression}et des littéraux objets MDX (par exemplelabel:à l'intérieur de<Tabs values={[ … ]}>). Fusionnés avec les valeurs par défaut intégrées (class,key,id,href,src, etc.). Insensible à la casse.
Exemple : "protectKeys": ["slug", "code"] ignore { slug: 'getting-started', title: 'Getting started' } → seul title est traduit lorsque slug est protégé.
Exemple (docsOutput.style = "flat" — chemins des captures d'écran + enveloppe facultative de liste de langues) :
Exemple de post-traitement en disposition plate (captures d'écran + bloc de liste des langues)
"docsOutput": {
"style": "flat",
"postProcessing": {
"regexAdjustments": [
{
"description": "Per-locale screenshot folders",
"search": "images/screenshots/[^/]+/",
"replace": "images/screenshots/${translatedLocale}/"
}
],
"languageListBlock": {
"start": "<small id=\"lang-list\">",
"end": "</small>",
"separator": " · ",
"label": "local"
}
}
}json
Tableau de premier niveau de pipelines de traduction JSON imbriqués. Utilisé uniquement lorsque features.translateJson est vrai (translate-json ou l'étape JSON de sync). Voir JSON.
| Champ | Description |
|---|---|
description | Note facultative pour CLI / status (non traduite). |
contentPaths | Fichiers, répertoires ou motifs .json sources situés sous la racine du projet. |
outputPathTemplate | Chemin de sortie requis par langue cible. Espaces réservés : {locale}, {LOCALE}, {llocale}, {stem}, {basename}, {extension}, {relativeToSourceRoot}. |
targetLocales | Sous-ensemble facultatif pour ce bloc ; sinon racine targetLocales. |
keyPolicy.mode | allowlist, denylist ou both. |
keyPolicy.translateKeys | Chemins pointés / motifs à inclure lorsque le mode est allowlist ou both. |
keyPolicy.skipKeys | Chemins pointés / motifs à exclure (la liste de refus par défaut inclut id, slug, href, url, key, code). |
svg
Chemins et structure de niveau supérieur pour les fichiers SVG. La traduction s'exécute uniquement lorsque features.translateSVG est vrai (via translate-svg ou l'étape SVG de sync).
| Champ | Description |
|---|---|
sourcePath | Un ou plusieurs répertoires ou motifs glob (par exemple "images/*.svg", "**/icons/*.svg"). Les motifs sont résolus par rapport à la racine du projet et analysés récursivement pour les fichiers .svg. |
outputDir | Répertoire racine pour la sortie SVG traduite. |
style | "flat" ou "nested" lorsque pathTemplate n'est pas défini. |
pathTemplate | Chemin de sortie personnalisé pour les fichiers SVG. Espaces réservés : "{outputDir}", "{locale}", "{LOCALE}", "{llocale}", "{relPath}", "{stem}", "{basename}", "{extension}", "{relativeToSourceRoot}". |
localePathLowercase | Lorsque true, les modèles SVG intégrés flat / nested utilisent des segments de paramètres régionaux en minuscules. Les valeurs personnalisées de pathTemplate restent inchangées ; utilisez {llocale} pour des segments en minuscules. |
forceLowercase | Texte traduit en minuscules lors du réassemblage du SVG. Utile pour les designs qui reposent sur des libellés entièrement en minuscules. |
glossary
| Champ | Description |
|---|---|
uiGlossary | Chemin vers strings.json - génère automatiquement un glossaire à partir des traductions existantes. |
userGlossary | Chemin vers un fichier CSV avec les colonnes Original language string (ou en), locale, Translation - une ligne par terme source et langue cible (locale peut être * pour toutes les cibles). |
autoAddUserEditedToGlossary | Lorsque true, les modifications du tableau de bord apportées aux chaînes de l'interface utilisateur peuvent être automatiquement ajoutées au glossaire de l'utilisateur. |
Générer un fichier CSV de glossaire vide :
ai-i18n-tools glossary-generate