|Labs
预约演示平台
React(Lingo Compiler)
Alpha
React (MCP)React(i18n)旧版 CLI(v0)
已废弃

Lingo.dev Compiler

  • 工作方式
  • 快速开始
  • Compiler 快速上手

框架

  • Next.js 集成
  • Vite + React

指南

  • 语言切换
  • 自动复数处理
  • 手动覆盖
  • 构建模式
  • 项目结构
  • 翻译服务提供商
  • 自定义 locale 解析器
  • 开发工具

参考

  • 最佳实践
  • 配置参考
  • 故障排查
  • 迁移指南
  • 优化
  • 输出格式

自动复数处理

Alpha

Lingo.dev Compiler 目前处于 alpha 阶段,稳定性尚未完善,不建议用于生产环境,且 API 可能会在版本更新之间发生变化。

Lingo.dev Compiler 会识别 JSX 文本中的复数表达,并自动将其转换为 ICU MessageFormat。你无需为每种语言手动编写复数规则,只要写出包含数值的自然文本,编译器就会借助 LLM 生成正确的复数形式。

工作原理#

1

Compiler 识别数字模式

在 AST 分析阶段,Compiler 会识别同时包含插值数字和数量相关词语的文本节点。例如,You have {count} items 中就包含一个数字变量,以及一个会随数量变化而变化的词。

2

LLM 判断复数形式

一个小巧且高效的 LLM(可通过 pluralization.model 配置)会分析文本,判断哪些词需要进行复数变化,并为每个目标语言区域生成相应的 CLDR 复数类别。

3

生成 ICU MessageFormat

Compiler 会生成一个 ICU MessageFormat 字符串,以覆盖目标语言所需的全部复数类别。

示例#

源 JSX:

tsx
<p>You have {count} items in your cart</p>

为英语生成的输出:

text
{count, plural, one {You have 1 item in your cart} other {You have # items in your cart}}

为俄语生成的输出(俄语有四种复数类别):

text
{count, plural, one {У вас # товар в корзине} few {У вас # товара в корзине} many {У вас # товаров в корзине} other {У вас # товаров в корзине}}

CLDR 复数类别#

不同语言会使用六种 CLDR 复数类别中的不同子集。Compiler 只会生成每个目标语言区域真正需要的类别:

类别说明示例语言
zero零数量阿拉伯语、拉脱维亚语
one单数英语、法语、德语、西班牙语
two双数阿拉伯语、希伯来语、斯洛文尼亚语
few少量 / 小数量俄语、捷克语、波兰语
many大量俄语、阿拉伯语、波兰语
other通用 / 默认(始终必需)所有语言

英语使用 one 和 other;俄语使用 one、few、many 和 other;阿拉伯语则会用到全部六种类别。Compiler 会按语言区域自动处理这些差异。

配置#

复数处理默认启用。你可以在 Compiler 选项中进行配置:

ts
{
  pluralization: {
    enabled: true,
    model: "groq:llama-3.1-8b-instant",
  },
}
选项类型默认值说明
pluralization.enabledbooleantrue启用或禁用自动复数识别。
pluralization.modelstring"groq:llama-3.1-8b-instant"用于识别复数形式的 LLM 模型。由于这项检测比翻译更简单,较小的模型通常就足够了。

如需完全禁用复数处理:

ts
{
  pluralization: {
    enabled: false,
  },
}

禁用复数处理后,Compiler 会将包含数字的文本当作普通字符串来翻译。对于复数规则较复杂的语言,生成结果在某些数量下可能不完全符合语法。

何时会应用复数处理#

Compiler 会在以下情况下识别复数模式:

  • 包含插值数字变量的文本:{count} items、{n} messages
  • 包含数字字面量的文本:You have 5 items(在动态 UI 中较少见)

Compiler 不会对以下内容进行复数处理:

  • 不包含数字引用的文本:Items in cart(没有可据此分支的数字)
  • 数字与数量相关词语没有直接关系的文本

你只需在 JSX 中写出自然文本,剩下的复数识别和 ICU 格式化都由 Compiler 及其 LLM 处理——无需专门学习 ICU MessageFormat 语法。

下一步#

配置参考
查看所有复数处理选项
翻译服务提供方
配置用于翻译的 LLM
手动覆盖
在需要时覆盖特定翻译
最佳实践
了解何时启用或禁用复数处理

这个页面对你有帮助吗?

Max PrilutskiyMax Prilutskiy·已更新 4 个月前·2 分钟阅读