Le CLI Lingo.dev s’appuie sur des types de bucket pour analyser et traduire différents formats de fichiers. Chaque type de bucket correspond à un parseur dédié, conçu pour un format précis. Configurez un ou plusieurs buckets dans votre i18n.json afin de définir quels fichiers le CLI doit traduire.
Types de bucket#
| Type de bucket | Format | Mode de sortie | [locale] requis |
|---|---|---|---|
json | Fichiers JSON | Un fichier distinct par langue | Oui |
json5 | Fichiers JSON5 | Un fichier distinct par langue | Oui |
jsonc | Fichiers JSONC (avec commentaires) | Un fichier distinct par langue | Oui |
json-dictionary | Dictionnaire JSON (clé-valeur à plat) | Un fichier distinct par langue | Oui |
yaml | Fichiers YAML | Un fichier distinct par langue | Oui |
yaml-root-key | YAML avec clés racines par langue | Modifie le fichier source | Non |
markdown | Fichiers Markdown | Un fichier distinct par langue | Oui |
mdx | Fichiers MDX | Un fichier distinct par langue | Oui |
markdoc | Fichiers Markdoc | Un fichier distinct par langue | Oui |
html | Fichiers HTML | Un fichier distinct par langue | Oui |
mjml | Templates d’e-mails MJML | Un fichier distinct par langue | Oui |
android | Ressources XML Android | Un fichier distinct par langue | Oui |
xcode-strings | Fichiers Xcode .strings | Un fichier distinct par langue | Oui |
xcode-stringsdict | Fichiers Xcode .stringsdict | Un fichier distinct par langue | Oui |
xcode-xcstrings | Catalogues Xcode .xcstrings | Modifie le fichier source | Non |
flutter | Fichiers ARB Flutter | Un fichier distinct par langue | Oui |
po | Fichiers PO GNU gettext | Un fichier distinct par langue | Oui |
properties | Fichiers Java .properties | Un fichier distinct par langue | Oui |
csv | Fichiers CSV | Modifie le fichier source | Non |
csv-per-locale | Fichiers CSV (un par langue) | Un fichier distinct par langue | Oui |
xml | Fichiers XML génériques | Un fichier distinct par langue | Oui |
xliff | Fichiers XLIFF | Un fichier distinct par langue | Oui |
srt | Fichiers de sous-titres SRT | Un fichier distinct par langue | Oui |
vtt | Fichiers de sous-titres VTT | Un fichier distinct par langue | Oui |
php | Tableaux de localisation PHP | Un fichier distinct par langue | Oui |
typescript | Fichiers TypeScript | Un fichier distinct par langue | Oui |
vue-json | Blocs JSON i18n de Vue | Un fichier distinct par langue | Oui |
txt | Fichiers texte brut | Un fichier distinct par langue | Oui |
Modes de sortie#
Les buckets fonctionnent selon l’un des deux modes de sortie suivants :
Un fichier distinct par langue — le CLI crée un fichier dédié pour chaque langue cible. Les motifs d’inclusion doivent contenir l’espace réservé [locale] :
{
"buckets": {
"json": {
"include": ["locales/[locale].json"]
}
}
}Vous obtenez ainsi locales/en.json, locales/es.json, locales/fr.json, etc.
Modifie le fichier source — le CLI réécrit les traductions dans le même fichier que celui qui contient le contenu source. L’espace réservé [locale] n’est pas utilisé :
{
"buckets": {
"csv": {
"include": ["translations.csv"]
}
}
}Les fichiers CSV stockent généralement toutes les langues dans des colonnes au sein d’un même fichier. Les catalogues Xcode .xcstrings et les fichiers YAML avec clés racines fonctionnent de façon similaire.
Exemples de configuration#
Application web avec JSON#
{
"buckets": {
"json": {
"include": ["src/locales/[locale].json"],
"lockedKeys": ["brand/name"]
}
}
}Site de documentation avec Markdown#
{
"buckets": {
"markdown": {
"include": ["docs/[locale]/*.md"],
"exclude": ["docs/[locale]/drafts/*.md"]
}
}
}Application mobile (iOS + Android)#
{
"buckets": {
"xcode-xcstrings": {
"include": ["ios/Localizable.xcstrings"]
},
"android": {
"include": ["android/app/src/main/res/values-[locale]/strings.xml"]
}
}
}Monorepo avec plusieurs formats#
{
"buckets": {
"json": {
"include": ["apps/web/locales/[locale].json"]
},
"mdx": {
"include": ["packages/docs/content/[locale]/*.mdx"]
},
"flutter": {
"include": ["apps/mobile/lib/l10n/app_[locale].arb"]
}
}
}Fonctionnalités propres à chaque bucket#
Certains buckets prennent en charge des fonctionnalités supplémentaires au-delà des motifs include/exclude :
| Fonctionnalité | Buckets pris en charge | Description |
|---|---|---|
| Key Locking | Formats clé-valeur (JSON, YAML, etc.) | Recopier les valeurs source sans les traduire |
| Key Ignoring | Formats clé-valeur | Exclure complètement des clés des fichiers cibles |
| Key Preserving | Formats clé-valeur | Initialiser une seule fois, puis empêcher toute mise à jour |
| Translator Notes | JSONC, XCStrings | Ajouter du contexte via des commentaires pour améliorer la traduction |
Règles des motifs d’inclusion#
- Les motifs sont relatifs à l’emplacement du fichier
i18n.json - Utilisez
[locale]comme espace réservé pour les codes de langue (obligatoire pour les buckets en mode « fichier distinct ») - L’astérisque (
*) correspond à n’importe quel nom de fichier :locales/[locale]/*.json - Les motifs récursifs (
**) correspondent à des fichiers à n’importe quel niveau de profondeur :src/**/[locale].json,config/locales/**/[locale].yml. Lorsqu’un motif utilise**,node_modules,.git,dist,build,.nextet.turbosont exclus par défaut — ajoutez vos propres entréesexcludesi nécessaire (nécessite CLI 0.135.0+) - Les extensions de fichier n’ont aucune incidence sur l’analyse — c’est le type de bucket qui détermine le parseur
