translate について
XLF 翻訳ファイルの新規項目を見つけ、コード内の文脈を調べて、レビュー用の訳文を提案するスキルです。人の承認を経て反映し、プレースホルダーを保持します。
主な機能
- 01新規 XLF 項目の抽出
- 02コード内の原文コンテキスト検索
- 03レビュー用訳文の提案
- 04XML プレースホルダーの保持
- 05承認済み訳文の反映
活用シーン
- 01新しい UI 訳文のレビュー
- 02コード文脈を踏まえた項目の翻訳
- 03承認済み XLF 訳文の更新
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ tuesd4y/ agent-skills --skill translateインストール後、Claude Code で/translateを入力して読み込まれたか確認します。
同梱ファイルscripts/find_new_translations.py
詳細
翻訳スキル
XLF 翻訳ファイル内の新しいエントリを翻訳するには、state="new" の target を見つけ、ソースのコンテキストを確認して、レビュー用の翻訳案を提示します。
ワークフロー
ステップ 1:新しい翻訳エントリを抽出する
Bash ツールを使って抽出スクリプトを実行します。
python3 skills/translate/scripts/find_new_translations.py
変更されたすべての XLF ファイルと、state="new" のエントリを含む JSON が出力されます。エントリには、翻訳 ID、ソース/ターゲットのテキスト、行番号、プレースホルダーが含まれます。files 配列が空の場合は、新しい翻訳が見つからなかったことをユーザーに伝えます。
ステップ 2:ソースのコンテキストを確認する
スクリプトの出力にある各翻訳 ID について、Grep ツールを使ってコードベース内での使用箇所を検索します。
- ファイルパターン
**/*.tsで@@{ID}を検索し、$localize文字列を見つけます。 - ファイルパターン
**/*.htmlで@@{ID}を検索し、i18n属性を見つけます。
一致したファイルで Read ツールを使い、周辺の 5~10 行を確認します。
ステップ 3:翻訳を作成してレビューする
state="new" のエントリごとに、次のようにユーザーに提示します。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Translation ID: {id}
File: {xlf_file_path}
Target Language: {language_name}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Source (English):
{source_text}
Context:
{file_path}:{line_number}
{code_snippet}
Proposed Translation:
{proposed_translation}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
続行する前にユーザーの確認を待ちます。選択肢:
- 提案された翻訳を承認する
- 別の翻訳を提示する
- このエントリをスキップする
ステップ 4:承認された翻訳を適用する
承認された翻訳について、XLF ファイルを更新します。
<target>要素の内容を、承認された翻訳に置き換えます。state="new"をstate="ai"に変更します。
変更前:
<trans-unit id="myTranslationId" datatype="html">
<source>English text</source>
<target state="new">Old or empty translation</target>
</trans-unit>
変更後:
<trans-unit id="myTranslationId" datatype="html">
<source>English text</source>
<target state="ai">Translated text</target>
</trans-unit>
言語の判定
ファイル名のパターンから対象言語を判定します。
| ファイル名のパターン | 言語 | 母語での名称 |
|---|---|---|
messages.de.xlf | ドイツ語 | Deutsch |
messages.fr.xlf | フランス語 | Français |
messages.es.xlf | スペイン語 | Español |
messages.hu.xlf | ハンガリー語 | Magyar |
プレースホルダーの扱い
重要:ソースにあるすべての XML プレースホルダー要素を、表示どおりに正確に保持してください。次のものが含まれます。
| 要素 | 用途 | 例 |
|---|---|---|
<x id="INTERPOLATION" equiv-text="{{...}}"/> | Angular の補間 | {{count}} |
<x id="INTERPOLATION_n"/> | 複数の補間 | 2 番目、3 番目の補間 |
<x id="PH" equiv-text="..."/> | 名前付きプレースホルダー | ICU 式 |
<x id="PH_n"/> | 複数のプレースホルダー | 追加のプレースホルダー |
<x id="LINE_BREAK" ctype="lb"/> | 改行 | <br> |
<x id="START_TAG_SPAN"/> | HTML 開始タグ | <span> |
<x id="CLOSE_TAG_SPAN"/> | HTML 終了タグ | </span> |
<x id="START_BOLD_TEXT"/> | 太字テキストの開始 | <b> |
<x id="CLOSE_BOLD_TEXT"/> | 太字テキストの終了 | </b> |
プレースホルダーの例:
<source>Hello <x id="INTERPOLATION" equiv-text="{{name}}"/>, you have <x id="INTERPOLATION_1" equiv-text="{{count}}"/> messages.</source>
<target state="ai">Hallo <x id="INTERPOLATION" equiv-text="{{name}}"/>, Sie haben <x id="INTERPOLATION_1" equiv-text="{{count}}"/> Nachrichten.</target>
翻訳ガイドライン
- 既存のトーンに合わせる:ファイル内の他の翻訳を確認し、一貫したスタイルを保ちます。
- プレースホルダーを保持する:プレースホルダー要素をそのままコピーし、周囲のテキストのみ翻訳します。
- コンテキストを考慮する:コードのコンテキストから、テキストの用途を把握します。
- 分野の用語:次の分野では標準的な用語を使用します。
- モビリティ/交通:通勤、排出量、CO2、交通手段分担率
- UI 要素:ボタン、ラベル、ツールチップ
- ビジネス用語:監査、スコア、分析
- 丁寧体とくだけた表現:ドイツ語のビジネスソフトウェアでは、通常、丁寧な「Sie」形を使います。
よく使われる翻訳パターン
ドイツ語(de)
- "Save" → "Speichern"
- "Cancel" → "Abbrechen"
- "Loading..." → "Wird geladen..."
- "Error" → "Fehler"
- "Success" → "Erfolgreich"
フランス語(fr)
- "Save" → "Enregistrer"
- "Cancel" → "Annuler"
- "Loading..." → "Chargement..."
- "Error" → "Erreur"
- "Success" → "Succès"
スペイン語(es)
- "Save" → "Guardar"
- "Cancel" → "Cancelar"
- "Loading..." → "Cargando..."
- "Error" → "Error"
- "Success" → "Éxito"
ハンガリー語(hu)
- "Save" → "Mentés"
- "Cancel" → "Mégse"
- "Loading..." → "Betöltés..."
- "Error" → "Hiba"
- "Success" → "Sikeres"
バッチ処理
翻訳が必要な項目が複数ある場合:
- 効率化のため、ファイルごとにまとめます
- ファイルごとに翻訳が必要な項目数の概要を示します
- 項目を1つずつ処理し、承認を待ちます
- すべての項目の確認後、変更内容の概要を示します
エラー処理
- 変更された翻訳ファイルが見つからない場合:ユーザーに通知し、
git statusの実行を提案します state="new"の項目が見つからない場合:すべての翻訳が最新であることをユーザーに通知します- コンテキストが見つからない場合:原文のみを基に翻訳を提案し、コンテキストが不足していることを伝えます
- ファイルの解析エラーが発生した場合:エラーを報告し、問題のあるファイルをスキップします
コメント
Markdown 対応