gt@2.11.3
Обзор
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"