gt@2.12.0
概览
derive() 现在不仅可以解析函数返回值,还可以从对象和数组中解析值。同样的支持也扩展到了 Python 的 derive(),可用于字典和列表。这意味着 CLI 可以在构建时从数据结构中静态提取所有可能的字符串变体,并为每一种创建独立的翻译条目。
这是对 gt-react@10.15.0 中新增的 derive() 标签模板支持 的进一步扩展。
对象和数组访问
给定一个由字符串变体构成的对象,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) 会自动解包。 - 检测到循环展开时,会发出警告,而不会卡住。