Indietro

gt@2.12.0

Ernest McCarter avatarErnest McCarter
gt-clideriveobjectarraydictionarypythoni18n

Panoramica

derive() può ora risolvere valori da oggetti e array, non solo dai valori restituiti dalle funzioni. Lo stesso supporto si estende a derive() in Python con dizionari e liste. Questo significa che la CLI può estrarre staticamente tutte le possibili varianti di stringa dalle strutture dati in fase di build, creando una voce di traduzione separata per ciascuna.

Questo si basa sul supporto per i template taggati per derive() aggiunto in gt-react@10.15.0.

Accesso a oggetti e array

Dato un oggetto di varianti di stringa, derive() estrae ogni valore:

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

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

La CLI risolve tutti e tre i valori e registra voci di traduzione separate per ciascuno.

Questo funziona sia con l'accesso calcolato (obj[key]) sia con l'accesso statico (obj.prop) e supporta l'annidamento:

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

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

Gli array funzionano allo stesso modo:

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

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

Python

Lo stesso meccanismo di risoluzione di oggetti/array funziona in Python con dizionari e liste:

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

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

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

Requisiti

  • Gli oggetti e gli array devono essere dichiarati con const (TypeScript) o a livello di modulo (Python).
  • La sintassi spread (...base) è supportata e viene appiattita in fase di estrazione.
  • Le annotazioni TypeScript (as const, satisfies) vengono rimosse automaticamente.
  • Gli spread circolari vengono rilevati e generano un avviso invece di bloccare l'esecuzione.

Collegamenti