Назад

gt@2.12.0

Ernest McCarter avatarErnest McCarter
gt-clideriveobjectarraydictionarypythoni18n

Обзор

derive() теперь может получать значения из объектов и массивов, а не только возвращаемые функциями значения. Та же возможность поддерживается и в Python-версии derive() для словарей и списков. Это означает, что Интерфейс командной строки (CLI) может статически извлекать все возможные строковые варианты из структур данных во время сборки, создавая отдельную запись перевода для каждого из них.

Это расширяет поддержку тегированных шаблонов для derive(), добавленную в gt-react@10.15.0.

Доступ к объектам и массивам

Если дан объект с вариантами строк, derive() извлекает каждое значение:

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

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

Интерфейс командной строки (CLI) определяет все три значения и регистрирует отдельные записи перевода для каждого из них.

Это работает как с вычисляемым доступом (obj[key]), так и со статическим доступом (obj.prop), и поддерживает вложенность:

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

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

С массивами всё так же:

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

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

Python

Тот же принцип разрешения объектов и массивов работает в Python со словарями и списками:

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

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

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

Требования

  • Объекты и массивы должны быть объявлены с const (TypeScript) или на уровне модуля (Python).
  • Синтаксис расширения (...base) поддерживается и раскрывается во время извлечения.
  • Аннотации TypeScript (as const, satisfies) автоматически снимаются.
  • Циклические расширения обнаруживаются и вызывают предупреждение вместо зависания.

Ссылки