Retour

gt@2.12.0

Ernest McCarter avatarErnest McCarter
gt-clideriveobjectarraydictionarypythoni18n

Aperçu

derive() peut désormais déterminer des valeurs à partir d’objets et de tableaux — et pas seulement des valeurs de retour de fonctions. Cette prise en charge s’étend également à derive() en Python avec les dictionnaires et les listes. Cela signifie que la CLI peut extraire statiquement toutes les variantes de chaînes possibles à partir de structures de données à la compilation, en créant une entrée de traduction distincte pour chacune.

Cela s’appuie sur la prise en charge des littéraux de gabarit tagués pour derive() ajoutée dans gt-react@10.15.0.

Accès aux objets et aux tableaux

À partir d’un objet contenant des variantes de chaînes, derive() extrait chaque valeur :

const labels = { success: "Saved", error: "Failed", pending: "Saving..." };

t`Status: ${derive(labels[status])}`;

La CLI détermine les trois valeurs et enregistre des entrées de traduction distinctes pour chacune.

Cela fonctionne à la fois avec l’accès calculé (obj[key]) et l’accès statique (obj.prop), et prend également en charge l’imbrication :

const messages = {
  greeting: { formal: "Good evening", casual: "Hey" },
  farewell: { formal: "Goodbye", casual: "See ya" },
};

t`${derive(messages[category][tone])}`;

Les tableaux fonctionnent de la même manière :

const ranks = ["Bronze", "Silver", "Gold", "Platinum"];

t`Your rank: ${derive(ranks[level])}`;

Python

Le même mécanisme de résolution des objets/tableaux fonctionne en Python avec des dictionnaires et des listes :

labels = { "success": "Saved", "error": "Failed" }

t("{status}", status=derive(labels[status_key]))
ranks = ["Bronze", "Silver", "Gold", "Platinum"]

t("{rank}", rank=derive(ranks[level]))

Exigences

  • Les objets et les tableaux doivent être déclarés avec const (TypeScript) ou au niveau du module (Python).
  • La syntaxe de propagation (...base) est prise en charge et aplatie au moment de l’extraction.
  • Les annotations TypeScript (as const, satisfies) sont automatiquement déroulées.
  • Les propagations circulaires sont détectées et génèrent un avertissement au lieu de bloquer.

Liens