返回

gt@2.12.0

Ernest McCarter avatarErnest McCarter
gt-clideriveobjectarraydictionarypythoni18n

概览

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 constsatisfies) 会自动解包。
  • 检测到循环展开时,会发出警告,而不会卡住。

链接