gt@2.11.3
概述
derive() 现在支持访问对象和 数组。此前,derive() 只能解析函数调用;现在它还可以解析对象、数组 和字典中的值,让处理查找 pattern 更加方便。
这是在 gt-react@10.15.0 发布的 derive() in tagged templates 基础上进一步扩展的。
最新变化
对象访问
对对象属性查找使用 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}:开始你的第一个项目"
嵌套访问
可对对象和数组进行任意深度的链式访问:
const content = {
greetings: {
formal: "Good morning.",
casual: "Hey!",
},
} as const;
// derive(content[category][style]) 有效Python 支持
同样的 pattern 也适用于 Python 中的 t()。将 derive() 作为第一个参数传入,或在 f-string 中使用:
badges = {
"admin": "Administrator",
"mod": "Moderator",
"user": "Member",
}
# 独立使用 derive
t(derive(badges[role]))
# 在 f-string 中使用 derive 以提供上下文
t(f"Logged in as {derive(badges[role])}")提取的条目:
"已登录为管理员""已登录为版主""已登录为成员"