コンテンツにスキップ

レシピ: i18nファイルの翻訳

このレシピでは、Webアプリやモバイルアプリのローカライゼーションファイルを翻訳する方法を紹介します。yakuは文字列値を抽出・翻訳して書き戻します — キーと構造はLLMに触れられることはありません。

入力(locales/en.json):

{
"greeting": "Hello!",
"farewell": "Goodbye!",
"login": "Log in",
"signup": "Sign up",
"settings": "Settings"
}
Terminal window
yaku --to ja -f locales/en.json -o locales/ja.json
yaku --to ko -f locales/en.json -o locales/ko.json

出力(locales/ja.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 ja -f en.json -o ja.json

すべてのキー、ネスト、数値、真偽値は保持されます。文字列値のみが翻訳されます。

入力(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 ja -f config/locales/en.yaml -o config/locales/ja.yaml

出力(config/locales/ja.yaml):

en:
activerecord:
errors:
messages:
blank: "空白にはできません"
invalid: "は無効です"
taken: "はすでに使用されています"
views:
pagination:
next: "次へ"
previous: "前へ"
first: "最初"
last: "最後"

1つのソースファイルを複数の言語に翻訳します:

#!/bin/bash
SOURCE="locales/en.json"
LANGUAGES=("ja" "zh-TW" "ko" "fr" "de" "es")
for lang in "${LANGUAGES[@]}"; do
yaku --to "$lang" -f "$SOURCE" -o "locales/${lang}.json"
echo "Generated locales/${lang}.json"
done

UI用語には正確で一貫した翻訳が必要です。用語集を作成しましょう:

.yaku-glossary.yaml
ja:
Sign up: サインアップ
Log in: ログイン
Log out: ログアウト
Settings: 設定
Dashboard: ダッシュボード
Profile: プロフィール
zh-TW:
Sign up: 註冊
Log in: 登入
Log out: 登出
Settings: 設定
Dashboard: 儀表板
Terminal window
yaku --to ja -f locales/en.json -o locales/ja.json
# .yaku-glossary.yamlから用語集が自動的に読み込まれます
  • ソースロケールから翻訳する。 常にen.json(またはソース言語)から翻訳し、別の翻訳済みファイルからは翻訳しないでください。
  • UI一貫性のために用語集を使う。 ボタン、ラベル、ナビゲーション項目は、すべての場所で同じ用語を使うべきです。
  • 複数形を確認する。 言語によって複数形の扱いが異なります。翻訳後にi18nフレームワークで複数形が正しく処理されているか確認してください。
  • 補間変数に注意する。 i18nファイルに{{name}}%{count}のような変数が含まれている場合、出力で保持されているか確認してください。