Volver

gt@2.12.0

Ernest McCarter avatarErnest McCarter
gt-clideriveobjectarraydictionarypythoni18n

Descripción general

derive() ahora puede resolver valores de objetos y arrays, no solo valores devueltos por funciones. Esta misma compatibilidad también se extiende a derive() de Python con diccionarios y listas. Esto significa que la CLI puede extraer estáticamente todas las posibles variantes de cadena de las estructuras de datos en tiempo de construcción, creando una entrada de traducción independiente para cada una.

Esto se basa en la compatibilidad con tagged template para derive() añadida en gt-react@10.15.0.

Acceso a objetos y arrays

Dado un objeto con variantes de cadena, derive() extrae todos los valores:

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

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

La CLI resuelve los tres valores y registra una entrada de traducción independiente para cada uno.

Esto funciona tanto con acceso calculado (obj[key]) como con acceso estático (obj.prop) y admite anidamiento:

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

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

Los arrays funcionan igual:

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

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

Python

La misma resolución de objetos/listas también funciona en Python con diccionarios y listas:

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

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

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

Requisitos

  • Los objetos y arrays deben declararse con const (TypeScript) o a nivel de módulo (Python).
  • Se admite la sintaxis spread (...base) y se aplana durante la extracción.
  • Las anotaciones de TypeScript (as const, satisfies) se desenvuelven automáticamente.
  • Los spreads circulares se detectan y generan una advertencia en lugar de dejar el proceso colgado.

Enlaces