Назад

gt@2.11.3

Ernest McCarter avatarErnest McCarter
gt-clideriveobjectsarrays

Обзор

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

Это развитие релиза derive() в тегированных шаблонных литералах из gt-react@10.15.0.

Что нового

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

Используйте derive() при обращении к свойствам объекта. CLI статически определяет все возможные значения на этапе извлечения:

const statusMessages = {
  success: "Your order has been placed.",
  pending: "Your order is being processed.",
  error: "Something went wrong with your order.",
} as const;

export default function OrderBanner({ status }: { status: string }) {
  return <p>{t`Thanks for shopping! ${derive(statusMessages[status])}`}</p>;
}

CLI извлекает отдельный перевод для каждого возможного значения:

  • "Спасибо за покупку! Ваш заказ оформлен."
  • "Спасибо за покупку! Ваш заказ обрабатывается."
  • "Спасибо за покупку! При обработке вашего заказа что-то пошло не так."

Поддерживаются как статический (statusMessages.success), так и динамический (statusMessages[status]) доступ.

Доступ к элементам массива

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

const steps = [
  "Create your account",
  "Verify your email",
  "Start your first project",
] as const;

export default function Onboarding({ step }: { step: number }) {
  return <h2>{t`Step ${step + 1}: ${derive(steps[step])}`}</h2>;
}

Извлечённые записи:

  • "Шаг {step + 1}: Создайте аккаунт"
  • "Шаг {step + 1}: Подтвердите свой адрес электронной почты"
  • "Шаг {step + 1}: Запустите свой первый проект"

Вложенный доступ

Комбинируйте доступ к объектам и array любой глубины:

const content = {
  greetings: {
    formal: "Good morning.",
    casual: "Hey!",
  },
} as const;

// derive(content[category][style]) работает

Поддержка Python

В Python с t() работают те же подходы. Используйте derive() в качестве первого аргумента или внутри f-строки:

badges = {
    "admin": "Administrator",
    "mod": "Moderator",
    "user": "Member",
}

# Автономная деривация
t(derive(badges[role]))

# деривация внутри f-строки для окружающего контекста
t(f"Logged in as {derive(badges[role])}")

Извлечённые записи:

  • "Выполнен вход как Администратор"
  • "Выполнен вход как Модератор"
  • "Выполнен вход как Member"

Ссылки