實戰範例:翻譯 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-TW -f locales/en.json -o locales/zh-TW.jsonyaku --to ja -f locales/en.json -o locales/ja.json輸出(locales/zh-TW.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-TW -f en.json -o zh-TW.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-TW -f config/locales/en.yaml -o config/locales/zh-TW.yaml輸出(config/locales/zh-TW.yaml):
en: activerecord: errors: messages: blank: "不可為空白" invalid: "無效" taken: "已被使用" views: pagination: next: "下一頁" previous: "上一頁" first: "第一頁" last: "最後一頁"將一個原始檔案翻譯成多種語言:
#!/bin/bashSOURCE="locales/en.json"LANGUAGES=("zh-TW" "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-TW: Sign up: 註冊 Log in: 登入 Log out: 登出 Settings: 設定 Dashboard: 儀表板 Profile: 個人資料
ja: Sign up: サインアップ Log in: ログイン Log out: ログアウト Settings: 設定 Dashboard: ダッシュボードyaku --to zh-TW -f locales/en.json -o locales/zh-TW.json# 術語表會自動從 .yaku-glossary.yaml 載入- 從原始語言翻譯。 一律從
en.json(或你的原始語言)翻譯,而不是從另一個翻譯過的檔案。 - 使用術語表確保 UI 一致性。 按鈕、標籤和導覽項目應該在所有地方使用相同的翻譯。
- 檢查複數形式。 不同語言處理複數的方式不同。翻譯後請確認你的 i18n 框架正確處理了複數形式。
- 注意插值變數。 如果 i18n 檔案中包含
{{name}}或%{count}等變數,請確認它們在輸出中被保留。