返回

gt@2.11.3

Ernest McCarter avatarErnest McCarter
gt-clideriveobjectsarrays

概述

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])}")

提取的条目:

  • "已登录为管理员"
  • "已登录为版主"
  • "已登录为成员"

链接