Skip to content

Sélecteur de langue (languageListBlock)

Utilisez docsOutput.postProcessing.languageListBlock lorsque les fichiers Markdown traduits doivent inclure une ligne de liens « Lire dans d’autres langues » — un lien par paramètre régional, avec des valeurs href calculées par rapport à chaque fichier de sortie.

Ce référentiel l’utilise pour README.md (sortie à plat sous translated-docs/). Après translate-docs, chaque copie traduite reçoit un bloc actualisé ; par exemple, translated-docs/README.de.md renvoie aux fichiers de paramètres régionaux frères sous translated-docs/ et à la source anglaise à la racine du référentiel.

Nécessite docsOutput.style = "flat" (ou une autre disposition où les fichiers de paramètres régionaux frères sont accessibles par chemin relatif). Voir Dispositions de sortie.

1. Marquer le bloc dans le Markdown source

Encadrez le sélecteur dans du code HTML (ou toute autre ligne) délimité par les marqueurs de sous-chaîne start et end. Ce dépôt utilise :

markdown
<small>**Read in other languages:** </small>
<small id="lang-list">[English (GB)](/fr/) · [Deutsch](./README.de.md) · …</small>

Le texte du lien initial est uniquement un espace réservé. translate-docs remplace entièrement la portion depuis la première ligne contenant start jusqu’à la première ligne ultérieure contenant end (les marqueurs situés à l’intérieur de blocs de code délimités sont ignorés, afin que les exemples de configuration dans le même fichier ne soient pas pris en compte).

2. Configurer le bloc

start et end sont des marqueurs de sous-chaîne arbitraires — ils n’ont pas besoin d’être <small id="lang-list"> / </small>. Choisissez n’importe quel texte d’ouverture et de fermeture qui n’apparaît que dans la section du sélecteur de langue : une autre balise HTML (<div class="lang-switcher"></div>), des commentaires HTML (<!-- lang-list --><!-- /lang-list -->), ou des délimiteurs en markdown uniquement (par exemple une ligne **Languages:** jusqu’à une ligne ---). Définissez start et end dans la configuration exactement comme indiqué dans le fichier source.

Configuration racine (ai-i18n-tools.config.json) :

json
"postProcessing": {
  "languageListBlock": {
    "start": "<small id=\"lang-list\">",
    "end": "</small>",
    "separator": " · "
  }
}
ChampRôle
startSous-chaîne qui identifie la ligne d’ouverture du bloc
endSous-chaîne sur la ligne de fermeture (peut être la même ligne que start si les deux sont sur une seule ligne)
separatorTexte inséré entre les liens [label](href) générés (ce dépôt utilise " · ")
labelFacultatif : "local" (par défaut) utilise l’endonyme de chaque langue provenant du manifeste ; "english" utilise englishName

3. Ce qui se passe à l’exécution

  1. Extraction — la section contenant la liste des langues n’est pas envoyée au modèle (translatable: false).
  2. Par fichier traduit — après la traduction des segments et la réécriture éventuelle des liens plats, postProcessing reconstruit le bloc : un lien markdown par langue, avec des libellés provenant de ui-languages.json s’ils sont présents (sinon du catalogue maître intégré, sinon de localeDisplayNames), et des chemins relatifs au fichier en cours d’écriture.
  3. Actualisation de la source — à la fin d’un passage translate-docs / sync pour la documentation, le même bloc canonique est réinséré dans les fichiers sources anglais de contentPaths, de sorte qu’ajouter une langue met à jour le sélecteur dans le dépôt sans avoir à modifier manuellement chaque lien.

Si un fichier ne contient aucun bloc correspondant, l’interface en ligne de commande affiche un avertissement (quand --verbose) et laisse le contenu inchangé.

4. Manifeste d’étiquettes

Pour les libellés d'endonyme (label: "local"), générer ou maintenir ui-languages.json via generate-ui-languages (écrit dans languagesManifestPath, qui par défaut est {ui.flatOutputDir}/ui-languages.json). La configuration docs-only de ce référentiel n'a pas de pipeline d'interface utilisateur et pas de manifeste de projet sur disque, les libellés proviennent donc du catalogue maître regroupé pour sourceLocale + targetLocales.

5. Exemples dans ce référentiel

ExempleFichiers
Ce package (README plat + site VitePress)ai-i18n-tools.config.json (bloc README : docsOutput.style = "flat" ; bloc site : docsOutput.style = "vitepress" + vitepressThemeCatalog)
README à plat + documents Docusaurusexamples/nextjs-app/ai-i18n-tools.config.json (deuxième bloc : docsOutput.style = "flat" ; premier bloc : docsOutput.style = "docusaurus")
Documentation Docusaurus uniquementexamples/docusaurus-docs/ai-i18n-tools.config.json (docsOutput.style = "docusaurus" + docusaurusCatalogDir)
Docs VitePress (démo minimale)examples/vitepress-docs/ai-i18n-tools.config.json (docsOutput.style = "vitepress" + vitepressThemeCatalog)

La ligne immédiatement avant <small id="lang-list"> (par exemple **Read in other languages:**) est un segment normal traduisible et est localisée dans chaque langue cible ; seule la ligne de liens à l'intérieur des marqueurs est régénérée à l'identique, à l'exception de href et des libellés pilotés par le manifeste.

Publié sous licence MIT.