下面的每个示例都是真实仓库,.lingo/config.json 已提交,翻译也已就绪,因此你可以对照生成结果直接查看旁边的配置。大多数都是可运行的应用;也有一两个示例仅用于单独展示某种文件格式。克隆或 fork 一个,运行 lingo link 绑定你自己的引擎,然后推送即可。
先选一种方式#
用 CLI 做本地化有两种方式,先选哪一种,才能知道哪些示例适合你。
直接翻译你现有的文件。 你的框架继续用自己的格式管理翻译——Rails YAML、Android XML、Laravel PHP、ARB、Markdown——CLI 只是在原文件里完成翻译。代码完全不用改。下面 11 个示例里,有 9 个都是这种方式。
无须键名,直接编写。 你只需在字符串出现的位置用 l.text(...) 包起来,lingo extract 就会为你生成基于哈希的 catalog,不需要命名或维护翻译键。代价是多一个构建步骤和一个运行时包,下面两个 Web 应用示例展示的就是这种方式。
移动应用#
| 示例 | 格式 | 为什么选它 |
|---|---|---|
| iOS | xcode-xcstrings | 一个 String Catalog 包含所有语言环境,因此目标路径与源路径相同 |
| Android | android | 以不带额外包装的 values/ 作为源文件,并使用 Android 原生限定符(values-pt-rBR/) |
| Flutter | flutter | 保留 @-metadata 和 ICU 占位符,按文件重写 @@locale |
Web 应用#
这是两个无键示例。它们都用 l.text(...) 包裹字符串,并通过 lingo extract 生成各自的 catalog,因此中间这一列标注的是运行时包,而不是文件格式。
| 示例 | 包 | 为什么选它 |
|---|---|---|
| React + Vite | @lingo.dev/react | 无键编写;生成的声明会将 l.text() 收窄为提取出的字符串 |
| Next.js | @lingo.dev/react-next | 无键编写方式,配合语言环境路由、hreflang 和切换器。Pages Router |
生产环境中的 hreflang
LingoHead 会根据 hreflang 属性生成它的 baseUrl URL,而这个属性默认是空值,因此开箱即用时这些标签会是相对 URL。搜索引擎需要绝对 URL——在正式依赖它们之前,请先传入你的网站源地址(<LingoHead baseUrl="https://example.com" />)。
内容与规范#
| 示例 | 格式 | 为什么选它 |
|---|---|---|
| Markdown 文档 | md, mdx | 默认处理正文内容,也可按需启用 frontmatter 字段和 MDX props |
| Markdoc | markdoc, json | 一次推送,同时处理 Next.js 内容和 UI 字符串——三个条目,各自使用不同选项 |
| OpenAPI | yaml-openapi | 只处理摘要和描述;路径、operation ID 和枚举原样保留 |
框架 catalog#
| 示例 | 格式 | 为什么选它 |
|---|---|---|
| Rails | yaml-root-key | locale 是 YAML 的根键,因此连根键本身也会被改写 |
| Laravel | php, po | 包含 Laravel 消息目录和一个 gettext 文件;两者中的 :name 占位符都会保留 |
| TypeScript 模块 | typescript | Catalog 以 TypeScript 模块形式提供,而不是 JSON。仅展示这种格式——没有应用会消费它们 |
TypeScript catalog 需要默认导出
typescript 格式会读取 default 导出——也就是 export default { … },无论是否带有 as const。如果使用命名导出,就不会产生任何可翻译内容,整个运行过程结束后只会原样复制源码。所以如果一次 push 显示文件已本地化,但输出 token 几乎为零,先检查导出形式是否正确。
如何使用这些示例#
npm install -g @lingo.dev/cli
lingo login
lingo link # writes your own orgId and engineId into .lingo/config.json
lingo push --wait这些示例都不会提交 orgId 或 engineId——这样可以避免 fork 后误用他人的引擎进行 push。lingo link 会在本地补齐这两项。
如果你想用 GitHub App 而不是 CLI
GitHub App 会从你仓库里已提交的 engineId 中读取 .lingo/config.json——组织信息会根据 App 安装本身解析,但引擎仍然必须写在这个文件里。fork 之后,先运行 lingo link,再提交更新后的配置,然后再安装 App。
并不是每种格式都有示例#
这十一个示例覆盖了大家最常问到的框架,但 CLI 实际支持翻译十八种格式。xliff、srt、Xcode .strings 和 .stringsdict、通用 yaml,以及独立的 JSON/JSONC,即使这里没有对应仓库示例也都可用——完整列表和各格式所需配置请查看 Formats。
