gemini-translate について
gemini-translateは、ClaudeがGemini CLIを通じて構造化コンテンツを一括翻訳するスキルです。用語集や文体指示を反映し、トークン予算に応じて分割したうえで、検証・書き込み用の翻訳結果を返します。
主な機能
- 01コンテンツファイルの一括翻訳
- 02用語集と文体指示の適用
- 03トークン予算に応じた分割
- 04JSON形式の応答解析
- 05出力の切り詰めからの復旧
活用シーン
- 01不足しているロケールファイルの作成
- 02Markdown、JSON、YAMLの翻訳
- 03多数のファイルのバッチ処理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ genericservice/ claude-skills --skill gemini-translateインストール後、Claude Code で/gemini-translateを入力して読み込まれたか確認します。
同梱ファイルscripts/gemini-translate.sh
詳細
Gemini Translate
Gemini CLI を翻訳サブエージェントとして使用し、コンテンツファイル(Markdown、JSON、YAML フロントマター)を一括翻訳します。Claude がパイプラインを統括し、翻訳漏れを特定し、用語集のコンテキストを含むプロンプトを作成して、単一の CLI 呼び出しで Gemini に処理を依頼し、出力構造を検証してファイルを書き込みます。
Gemini CLI を使う理由
- OAuth 経由で Google AI Ultra プランを利用できます(API キーは不要です)
- 100 万トークンのコンテキストで、用語集全体と多数のソースファイルを一度の呼び出しに収められます
- ファイルごとではなく、起動コストは約 13 秒で一度だけです
- オーケストレーション、検証、ファイル書き込みは Claude が引き続き管理します
前提条件
- Gemini CLI がインストールされ、認証済みであること(
geminiが PATH 上にあり、OAuth が設定済みであること) - ソースコンテンツファイルが一貫した構成であること(フロントマター付き Markdown、JSON など)
パイプラインの概要
Claude: find translation gaps (missing .es.* files, parity tests)
|
Claude: read source files + glossary + existing translations for tone
|
Claude: build batch prompt and call gemini-translate.sh
|
Gemini: translate all files in one shot, return JSON
|
Claude: parse response, validate structure, write .es.* files
|
Claude: run project tests (i18n symmetry, coverage)
使い方
ステップ 1:翻訳漏れを特定する
対応するロケールのファイルがないコンテンツファイルを探します。
# Generic pattern -- adjust paths and extensions for your project
for f in content/**/*.md; do
base=$(basename "$f")
[[ "$base" == *.es.* ]] && continue
name="${base%.*}"
dir=$(dirname "$f")
[ ! -f "$dir/${name}.es.md" ] && echo "MISSING: $f"
done
または、プロジェクトに i18n の整合性テストがある場合は、それを実行します。
ステップ 2:用語集を準備する
一貫して翻訳する必要がある用語の用語集を作成します。用語集は、プロンプトに埋め込むシンプルなテキストブロックです。
## Glossary (EN -> ES)
- "OB/GYN Physician" -> "Medico OB/GYN"
- "High-risk pregnancy" -> "Embarazo de alto riesgo"
- "Certified Nurse Midwife" -> "Enfermera Partera Certificada"
プロジェクトに既存の用語集(Python の辞書、CSV、JSON)がある場合は、スクリプトを呼び出す前にこの形式に変換してください。スクリプトには --glossary で用語集ファイルを指定できます。
ステップ 3:翻訳を一括実行する
bash gemini-translate.sh \
--source-lang en \
--target-lang es \
--glossary glossary.txt \
--model gemini-2.5-pro \
--instructions "Use formal 'usted'. Latin American Spanish, not Spain. Warm but professional tone for patient-facing medical content." \
file1.md file2.md file3.md
スクリプトの処理内容:
- すべてのソースファイルを読み込みます
- 用語集、指示、すべてのファイル内容を含む単一のプロンプトを作成します
gemini -p "..." -o json --approval-mode planを呼び出します- JSON 応答を解析し、各翻訳を JSON 配列として標準出力に出力します
ステップ 4:Claude が検証して書き込む
スクリプトの実行後、Claude は次の処理を行います。
- JSON 出力を解析します
- 翻訳された各ファイルについて、次の点を確認します。
- フロントマターのキーがソースと完全に一致していること
- リンク、画像パス、ブランド名が保持されていること
- Gemini が `` フラグを出力していないこと(出力していた場合はユーザーに提示します)
.es.*ファイルを書き込みます- プロジェクトの i18n テストを実行します
スクリプトのリファレンス
gemini-translate.sh
Usage: gemini-translate.sh [OPTIONS] FILE [FILE...]
Options:
--source-lang LANG Source language code (default: en)
--target-lang LANG Target language code (default: es)
--glossary FILE Path to glossary file (term mappings, one per line)
--instructions TEXT Additional translation instructions for tone/style
--model MODEL Gemini model override (default: system default)
--max-tokens N Max estimated input tokens per batch (default: 80000)
--gemini-bin PATH Path to gemini binary (bypasses wrapper detection)
--dry-run Print the prompt without calling Gemini
Output: JSON array to stdout
[
{"file": "about.md", "translation": "---\ntitle: Acerca de\n---\n..."},
{"file": "careers.md", "translation": "---\ntitle: Carreras\n---\n..."}
]
Exit codes:
0 Success
1 Gemini CLI not found or not authenticated
2 No input files provided
3 Gemini returned an error or unparseable output
翻訳品質ルール
これらのルールは Gemini に送信するプロンプトに埋め込まれています。
- 構造を完全に保持する:フロントマターのキー、Markdown の書式、リンク、HTML タグ、画像パス
- 翻訳しない:ブランド名、固有名詞、URL、ファイルパス、認証情報(MD、DO、CNM など)
- 医療用語:用語集を使用してください。用語が用語集に載っておらず、判断に迷う場合は `` で囲んでください
- トーン:ソース文書のトーンに合わせてください。患者向けの医療コンテンツでは、温かく、安心感のある、専門的な表現にしてください
- 出力形式:変更した部分だけでなく、翻訳済みファイルの完全な内容(フロントマターと本文)を返してください
他のプロジェクトへの適用
このスキルはプロジェクトに依存しません。新しいコードベースで使用するには、次の手順に従います。
- ファイル規則:プロジェクトのロケールファイル命名パターン(
.es.md、.es.json、locales/es/など)を設定します - 用語集:ドメイン固有の用語を用語集ファイルにまとめます
- 指示:対象言語向けのスタイルガイドを 1 段落で作成します
- 検証:Claude にプロジェクトの i18n テストを実行させるか、キーを比較する簡単なチェックを作成します
Gemini CLI ラッパーとの互換性
多くのユーザーは、デフォルトで --yolo/-y を追加するシェルラッパー(例:~/bin/gemini)を使用しています。これは --approval-mode と競合します。スクリプトは次の方法でこの問題を回避します。
pnpx @google/gemini-cliを優先します(パッケージを直接呼び出すため、ラッパーを経由しません)pnpxを利用できない場合に限り、PATH 上のgeminiにフォールバックします--gemini-bin /path/to/binaryを指定すると、検出方法を完全に上書きできます
スクリプトは構造化出力に -o json を使用し、{session_id, response, stats} 形式のエンベロープを返します。組み込みの Python パーサーは response フィールドを抽出し、Markdown のコードフェンス、ヌルバイト、MCP の警告プレフィックスを自動的に処理します。
トークンベースのバッチ処理
固定のファイル数ではなく、スクリプトは入力トークン数(1 トークン ≒ 4 文字)を推定し、予算に達するとファイルの追加を停止します。デフォルトの --max-tokens 80000 は、翻訳出力に必要な余裕(EN->ES の場合、入力の約 1.2 倍)を残します。予算を超えたファイルはスキップとして一覧表示されるため、呼び出し元は後続のバッチを実行できます。
切り詰めからの復旧
Gemini が出力トークン制限に達し、JSON がエントリーの途中で切り詰められた場合、スクリプトは次の手順で復旧します。
- 不完全な JSON を検出する
- 有効な JSON の境界を見つけるため、末尾から段階的に切り詰める
- 最後の(切り詰められた可能性が高い)エントリーを削除する
- 復元できた完全な翻訳の数を報告する
エージェント型ワークフローとバイブコーディング
- 反復的な翻訳: 最初のバッチ実行で、完璧な文体や構造の保持が実現するとは限りません。小規模なテストバッチを作成し、文体と書式を確認して、一貫して発生する翻訳エラーを特定します。用語集またはプロンプトの指示を一度に 1 つの変数だけ調整し、プロジェクト全体を処理する前にテストを再実行してください。
- バイブコーディング: 翻訳バッチを実行する前に、作業中のソースコンテンツと用語集の更新をローカルでコミットしてください。また、生成された
.es.*ファイルは別途コミットしてください。モデルが構造を幻覚した場合に、簡単に元に戻せます。
制限事項
- 1 回の呼び出しにつき 1 つの言語ペア: スクリプトが扱うのは 1 つの原文・翻訳先のペアです。複数言語のプロジェクトでは、翻訳先の言語ごとに実行してください。
- Gemini CLI の起動: バッチ呼び出しごとに約 13 秒のオーバーヘッドが発生します。バッチ処理によって、この負荷を分散できます。
- 出力トークン制限: デフォルトの予算は入力トークン数 80K です。切り詰めが発生した場合は、
--max-tokensの値を下げてください。 - ストリーミング非対応: スクリプトは応答全体を待ちます。大規模なバッチでは、起動時間に加えてモデルの処理に 30~60 秒かかる場合があります。
- Python 3 が必要: JSON の抽出には埋め込みの Python スクリプトを使用します。