Назад

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).
  • Синтаксис spread (...base) поддерживается и разворачивается на этапе извлечения.
  • Аннотации TypeScript (as const, satisfies) автоматически снимаются.
  • Циклические spread-выражения обнаруживаются и приводят к предупреждению вместо зависания.

Ссылки