实战范例:翻译 i18n 文件
这份范例演示如何翻译网页和移动应用的本地化文件。yaku 会提取字符串值、翻译后写回——key 和结构完全不经过 LLM。
JSON i18n 文件
Section titled “JSON i18n 文件”输入(locales/en.json):
{ "greeting": "Hello!", "farewell": "Goodbye!", "login": "Log in", "signup": "Sign up", "settings": "Settings"}yaku --to zh-CN -f locales/en.json -o locales/zh-CN.jsonyaku --to ja -f locales/en.json -o locales/ja.json输出(locales/zh-CN.json):
{ "greeting": "你好!", "farewell": "再见!", "login": "登录", "signup": "注册", "settings": "设置"}yaku 可以处理深层嵌套 JSON:
{ "nav": { "home": "Home", "about": "About Us" }, "errors": { "404": "Page not found", "500": "Internal server error" }}yaku --to zh-CN -f en.json -o zh-CN.json所有 key、嵌套结构、数字和布尔值都会保留,只有字符串值会被翻译。
YAML i18n 文件
Section titled “YAML i18n 文件”Rails 风格 i18n
Section titled “Rails 风格 i18n”输入(config/locales/en.yaml):
en: activerecord: errors: messages: blank: "can't be blank" invalid: "is invalid" taken: "has already been taken" views: pagination: next: "Next" previous: "Previous" first: "First" last: "Last"yaku --to zh-CN -f config/locales/en.yaml -o config/locales/zh-CN.yaml输出(config/locales/zh-CN.yaml):
en: activerecord: errors: messages: blank: "不能为空" invalid: "无效" taken: "已被使用" views: pagination: next: "下一页" previous: "上一页" first: "第一页" last: "最后一页"将一个源文件翻译成多种语言:
#!/bin/bashSOURCE="locales/en.json"LANGUAGES=("zh-CN" "ja" "ko" "fr" "de" "es")
for lang in "${LANGUAGES[@]}"; do yaku --to "$lang" -f "$SOURCE" -o "locales/${lang}.json" echo "已生成 locales/${lang}.json"done使用术语表确保 UI 用词一致
Section titled “使用术语表确保 UI 用词一致”UI 用词通常需要精确且一致的翻译。创建一份术语表:
zh-CN: Sign up: 注册 Log in: 登录 Log out: 退出登录 Settings: 设置 Dashboard: 仪表盘 Profile: 个人资料
ja: Sign up: サインアップ Log in: ログイン Log out: ログアウト Settings: 設定 Dashboard: ダッシュボードyaku --to zh-CN -f locales/en.json -o locales/zh-CN.json# 术语表会自动从 .yaku-glossary.yaml 加载- 从源语言翻译。 一律从
en.json(或你的源语言)翻译,而不是从另一个翻译过的文件。 - 使用术语表确保 UI 一致性。 按钮、标签和导航项目应该在所有地方使用相同的翻译。
- 检查复数形式。 不同语言处理复数的方式不同。翻译后请确认你的 i18n 框架正确处理了复数形式。
- 注意插值变量。 如果 i18n 文件中包含
{{name}}或%{count}等变量,请确认它们在输出中被保留。