Indietro
gt-clideriveobjectarraydictionarypythoni18n
BlogRegistro delle modifiche

gt 2.12.0: Derivazione di oggetti e dizionari

Ernest McCarter

Panoramica

derive() ora può ricavare valori da oggetti e array, non solo dai valori restituiti dalle funzioni. Lo stesso supporto è disponibile anche per derive() in Python con dizionari ed elenchi. 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 alle tagged template literal per derive() aggiunto in gt-react@10.15.0.

Accesso a oggetti e array

Dato un oggetto contenente varianti di stringa, derive() estrae tutti i valori:

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 distinte per ciascuno.

Funziona sia con l'accesso indicizzato (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

La stessa risoluzione di oggetto/array funziona in Python con dizionari ed elenchi:

from gt_flask import t, derive

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

t(derive(labels[status_key]))
from gt_flask import t, derive

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

t(derive(ranks[level]))

Passa l'espressione derivata come primo argomento, oppure inseriscila in una f-string passata come tale argomento. Inserirla nel valore di un'interpolazione con parola chiave non estrae le voci del dizionario o dell'elenco.

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 espansa al momento dell'estrazione.
  • Le annotazioni TypeScript (as const, satisfies) vengono rimosse automaticamente.
  • Gli spread circolari vengono rilevati e generano un avviso invece di mandare il processo in stallo.