mcpField
T
translate

translate

github.com/tuesd4y開発0150 回インストール5 週間前に更新
リポジトリ

translate について

XLF 翻訳ファイルの新規項目を見つけ、コード内の文脈を調べて、レビュー用の訳文を提案するスキルです。人の承認を経て反映し、プレースホルダーを保持します。

主な機能

  1. 01新規 XLF 項目の抽出
  2. 02コード内の原文コンテキスト検索
  3. 03レビュー用訳文の提案
  4. 04XML プレースホルダーの保持
  5. 05承認済み訳文の反映

活用シーン

  1. 01新しい UI 訳文のレビュー
  2. 02コード文脈を踏まえた項目の翻訳
  3. 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 ファイルを更新します。

  1. <target> 要素の内容を、承認された翻訳に置き換えます。
  2. 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>

翻訳ガイドライン

  1. 既存のトーンに合わせる:ファイル内の他の翻訳を確認し、一貫したスタイルを保ちます。
  2. プレースホルダーを保持する:プレースホルダー要素をそのままコピーし、周囲のテキストのみ翻訳します。
  3. コンテキストを考慮する:コードのコンテキストから、テキストの用途を把握します。
  4. 分野の用語:次の分野では標準的な用語を使用します。
    • モビリティ/交通:通勤、排出量、CO2、交通手段分担率
    • UI 要素:ボタン、ラベル、ツールチップ
    • ビジネス用語:監査、スコア、分析
  5. 丁寧体とくだけた表現:ドイツ語のビジネスソフトウェアでは、通常、丁寧な「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. 効率化のため、ファイルごとにまとめます
  2. ファイルごとに翻訳が必要な項目数の概要を示します
  3. 項目を1つずつ処理し、承認を待ちます
  4. すべての項目の確認後、変更内容の概要を示します

エラー処理

  • 変更された翻訳ファイルが見つからない場合:ユーザーに通知し、git status の実行を提案します
  • state="new" の項目が見つからない場合:すべての翻訳が最新であることをユーザーに通知します
  • コンテキストが見つからない場合:原文のみを基に翻訳を提案し、コンテキストが不足していることを伝えます
  • ファイルの解析エラーが発生した場合:エラーを報告し、問題のあるファイルをスキップします

コメント