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