Zurück

gt@2.12.0

Ernest McCarter avatarErnest McCarter
gt-clideriveobjectarraydictionarypythoni18n

Überblick

derive() kann jetzt Werte aus Objekten und Arrays auflösen — nicht nur Funktionsrückgabewerte. Die gleiche Unterstützung gilt auch für Pythons derive() mit Dictionaries und Listen. Das bedeutet, dass die CLI zur Build-Zeit statisch alle möglichen String-Varianten aus Datenstrukturen extrahieren und für jede davon einen separaten Übersetzungseintrag erstellen kann.

Dies baut auf der Unterstützung für getaggte Template-Literale in derive() auf, die in gt-react@10.15.0 hinzugefügt wurde.

Objekt- und Array-Zugriff

Bei einem Objekt mit String-Varianten extrahiert derive() jeden Wert:

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

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

Die CLI löst alle drei Werte auf und registriert für jeden einen separaten Übersetzungseintrag.

Dies funktioniert sowohl mit berechnetem Zugriff (obj[key]) als auch mit statischem Zugriff (obj.prop) und unterstützt auch Verschachtelungen:

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

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

Mit Arrays funktioniert es genauso:

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

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

Python

Dieselbe Auflösung von Objekten und Arrays funktioniert in Python mit Dictionaries und Listen:

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

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

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

Anforderungen

  • Objekte und Arrays müssen mit const (TypeScript) oder auf Modulebene (Python) deklariert werden.
  • Die Spread-Syntax (...base) wird unterstützt und bei der Extraktion aufgelöst.
  • TypeScript-Annotationen (as const, satisfies) werden automatisch entfernt.
  • Zirkuläre Spreads werden erkannt und erzeugen eine Warnung, statt hängen zu bleiben.