跳到內容

實戰範例:翻譯 i18n 檔案

這份範例示範如何翻譯網頁和行動應用程式的本地化檔案。yaku 會提取字串值、翻譯後寫回 — key 和結構完全不經過 LLM。

輸入(locales/en.json):

{
"greeting": "Hello!",
"farewell": "Goodbye!",
"login": "Log in",
"signup": "Sign up",
"settings": "Settings"
}
Terminal window
yaku --to zh-TW -f locales/en.json -o locales/zh-TW.json
yaku --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"
}
}
Terminal window
yaku --to zh-TW -f en.json -o zh-TW.json

所有 key、巢狀結構、數字和布林值都會保留,只有字串值會被翻譯。

輸入(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"
Terminal window
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/bash
SOURCE="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 用語通常需要精確且一致的翻譯。建立一份術語表:

.yaku-glossary.yaml
zh-TW:
Sign up: 註冊
Log in: 登入
Log out: 登出
Settings: 設定
Dashboard: 儀表板
Profile: 個人資料
ja:
Sign up: サインアップ
Log in: ログイン
Log out: ログアウト
Settings: 設定
Dashboard: ダッシュボード
Terminal window
yaku --to zh-TW -f locales/en.json -o locales/zh-TW.json
# 術語表會自動從 .yaku-glossary.yaml 載入
  • 從原始語言翻譯。 一律從 en.json(或你的原始語言)翻譯,而不是從另一個翻譯過的檔案。
  • 使用術語表確保 UI 一致性。 按鈕、標籤和導覽項目應該在所有地方使用相同的翻譯。
  • 檢查複數形式。 不同語言處理複數的方式不同。翻譯後請確認你的 i18n 框架正確處理了複數形式。
  • 注意插值變數。 如果 i18n 檔案中包含 {{name}}%{count} 等變數,請確認它們在輸出中被保留。