# gt: General Translation CLI tool: Métadonnées par clé
URL: https://generaltranslation.com/fr/docs/cli/reference/keyed-metadata.mdx
---
title: Métadonnées par clé
description: Ajoutez des instructions de traduction par clé aux fichiers JSON et YAML de General Translation. Référence API des métadonnées par clé.
---
Vous fournissez un fichier de métadonnées compagnon qui reproduit la structure des clés du fichier source, avec un objet de métadonnées à chaque feuille. Chaque objet contient des instructions pour la traduction de cette clé.
La CLI détecte automatiquement les fichiers de métadonnées compagnons, les valide par rapport à la structure du source et les envoie au moteur de traduction.
## Champs [#fields]
| Champ | Description | Type | Facultatif | Par défaut |
| ---------------------------- | ---------------------------------------------------------------------------- | -------- | ---------- | ---------- |
| [`context`](#context) | Instructions de traduction pour une chaîne spécifique. | `string` | Oui | — |
| [`maxChars`](#max-chars) | Nombre maximal de caractères dans la sortie traduite. | `number` | Oui | — |
| [`sourceCode`](#source-code) | Contexte du code source environnant, avec les chemins de fichier comme clés. | `object` | Oui | — |
## Structure du fichier [#structure]
Un fichier de métadonnées compagnon doit se trouver dans le même répertoire que le fichier source, respecter la convention de nommage `{name}.metadata.{ext}` et refléter la structure des clés du fichier source, avec un objet de métadonnées à chaque feuille.
```text
translations.json # chaînes sources
translations.metadata.json # métadonnées par clé
```
Ne fournissez des entrées que pour les clés qui nécessitent des instructions. Les clés sans entrée se traduisent normalement.
```json title="translations.json"
{
"nav": {
"home": "Home",
"bank": "Bank",
"save": "Save"
}
}
```
```json title="translations.metadata.json"
{
"nav": {
"bank": {
"context": "Riverbank — the side of a river. NOT a financial institution."
},
"save": {
"context": "Sports term — a goalkeeper preventing a goal. NOT saving data.",
"maxChars": 12
}
}
}
```
## `context` [#context]
**Type** `string` · **Facultatif** · **Par défaut** —
Instructions de traduction appliquées à une chaîne donnée. Utilisez ce champ pour lever l’ambiguïté des mots polysémiques, préciser la terminologie du domaine ou clarifier l’interprétation attendue.
```json
{
"bank": {
"context": "Riverbank. The side of a river where land meets water, NOT a financial institution."
}
}
```
## `maxChars` [#max-chars]
**Type** `number` · **Facultatif** · **Par défaut** —
Applique une limite maximale de caractères à la traduction générée. Le moteur utilise des synonymes plus courts, des abréviations ou une formulation concise pour respecter cette limite. Cela s’applique dans la mesure du possible : si cette limite est impossible à respecter pour le contenu source, la traduction complète est renvoyée.
```json
{
"save": {
"maxChars": 10
}
}
```
## `sourceCode` [#source-code]
**Type** `object` · **Facultatif** · **Par défaut** —
Contexte de code source autour d’une chaîne. Indexé par chemin de fichier, chaque entrée contient `before` (les lignes de code source au-dessus de la ligne cible), `target` (la ligne contenant la chaîne en cours de traduction) et `after` (les lignes de code source sous la ligne cible). Plusieurs entrées par fichier sont prises en charge si la même chaîne apparaît à différents emplacements.
```json
{
"new_lead": {
"sourceCode": {
"components/Dashboard.tsx": [
{
"before": "function NotificationBanner({ type }) {\n const gt = useGT();",
"target": " const msg = gt('You have a new lead!');",
"after": " return {msg};\n}"
}
]
}
}
}
```
### Exemple combiné
Les trois champs dans une seule clé :
```json
{
"save_button": {
"context": "Sports term. A goalkeeper's save — preventing a goal from being scored. NOT saving data.",
"maxChars": 12,
"sourceCode": {
"components/MatchStats.tsx": [
{
"before": "const stats = useMatchStats();\nconst gt = useGT();",
"target": "const label = gt('Save');",
"after": "return }>{label}: {stats.saves};"
}
]
}
}
}
```
## YAML [#yaml]
Les métadonnées fonctionnent de la même manière avec les fichiers `.metadata.yaml` ou `.metadata.yml` compagnons.
```yaml title="translations.metadata.yaml"
ui:
buttons:
save:
context: "Terme sportif. L'arrêt d'un gardien de but, PAS une sauvegarde de données."
maxChars: 12
labels:
date:
context: "Le fruit comestible du palmier dattier. PAS une date de calendrier."
```
## Validation [#validation]
Le CLI valide le fichier de métadonnées par rapport à la structure de la source et renvoie une erreur si une clé de métadonnées n’existe pas dans la source, si un type de valeur ne correspond pas à celui de la source (type primitif vs. objet, tableau vs. objet), si le type racine ne correspond pas, ou si le fichier ne peut pas être analysé.
## Schéma et correspondance [#schema]
Les métadonnées par clé fonctionnent avec les schémas JSON (`include` et `composite`) et les schémas YAML (`include`) ; les métadonnées passent par le même pipeline de schémas afin que les chemins de clés correspondent au moment de la traduction. Les fichiers compagnons sont associés à leur fichier source et ne sont pas traduits séparément — un fichier `.metadata.json` sans fichier source correspondant est traité comme un fichier ordinaire. Modifier uniquement les métadonnées ne déclenche pas de nouvelle traduction ; le contenu source doit également changer.