消息格式化
18ways 默认使用 waysParser。这个解析器使您能够保持源副本的可读性,同时仍然处理变量和区域设置相关的格式。
变量
使用大括号表示变量,并通过vars传递值。
const label = await engine.t(
'Welcome back, {name}',
{
vars: { name: 'Ada' },
}
);复数化
在句子真正改变形状时使用ICU风格的复数块。
const summary = await engine.t(
'{count, plural, =0{No messages} =1{One message} other{{count} messages}}',
{
vars: { count: 3 },
}
);日期和金钱
如果您传递一个真实的 Date 或一个类似货币的对象,包含 amount 和 currency,18ways 将会自动格式化它,即使是像 {publishedAt} 或 {renewalTotal} 这样的简单占位符。
仅在您想要控制输出时使用显式格式化器,例如 dateStyle:long 或自定义货币除数。
const publishedAt = new Date(
'2026-03-14T09:00:00Z'
);
const renewalTotal = {
amount: 1900,
currency: 'USD',
};
const updatedLabel = await engine.t(
'Last updated {publishedAt}',
{
vars: { publishedAt },
}
);
const totalLabel = await engine.t(
'Renewal total {renewalTotal}',
{
vars: { renewalTotal },
}
);
const detailedDate = await engine.t(
'Detailed date: {publishedAt, date, dateStyle:long}',
{
vars: { publishedAt },
}
);默认情况下,货币金额被视为小单位。如果您已经有大单位,请使用带有 divisor: 1 的显式货币格式化器。
选择块
当复制依赖于一小组离散值时,请使用 select。
const banner = await engine.t(
'{isSignedIn, select, true{Welcome back, {name}} false{Sign in to continue} other{Sign in to continue}}',
{
vars: {
isSignedIn: true,
name: 'Ada',
},
}
);组件组成
@18ways/core 返回字符串。如果您需要富文本,请保持句子完整,并在您自己的渲染器中处理标记。
const cta = await engine.t(
'Click here to see more'
);如果您的应用需要自动 JSX 组合,请升级到 @18ways/react 或 @18ways/next。
实用规则
如果句子可以用几个变量写成完整的短语,请将其保持在一条消息中。 这使得翻译质量比将代码片段拼接在一起要好得多。