gt@2.12.0
Ü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.