返回

gt@2.12.0

Ernest McCarter avatarErnest McCarter
gt-clideriveobjectarraydictionarypythoni18n

概述

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 constsatisfies) 会自动去除包装。
  • 会检测循环展开,并发出警告而不是卡死。

链接