mcpField
C
context-extraction

context-extraction

github.com/crowdin開発10138 回インストール3 日前に更新
リポジトリ

context-extraction について

crowdin-cli で JSONL 内の文字列に翻訳者向けの AI コンテキストを追加するスキルです。カバレッジ確認から入力、アップロードの検証までを案内します。

主な機能

  1. 01コンテキストカバレッジの確認
  2. 02文字列を JSONL でダウンロード
  3. 03不足する ai_context の入力
  4. 04編集の検証とアップロードのプレビュー
  5. 05コンテキストのアップロードとカバレッジ確認

活用シーン

  1. 01曖昧な UI 文字列に翻訳者向け情報を追加
  2. 02アップロード前に dry-run で変更を確認
  3. 03アップロード後にコンテキストカバレッジを計測

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/crowdin/skills --skill context-extraction

インストール後、Claude Code で/context-extractionを入力して読み込まれたか確認します。

詳細

コンテキストの抽出

手順

コマンド、フィルター、ファイル形式については、crowdin-cli スキルのコンテキストリファレンスを参照してください。ダウンロードする前に読んでください。--status フィルターは「コンテキストが必要」という意味ではありません。すでに JSONL ファイルがある場合は、手順 3 から始めてください。

  1. 対象範囲の確認(任意):crowdin context status。手動、AI、コンテキストなしの文字列がそれぞれいくつあるか、ユーザーに伝えられる状態になったら完了です。
  2. ダウンロード:--status を指定せずに crowdin context download を実行します。crowdin-context.jsonl が存在し、対象範囲の文字列ごとに 1 行ずつ格納されていれば完了です。
  3. 入力:このスキルの残りの手順に従って ai_context を入力します。「コンテキストが必要な文字列」に該当するすべての行に値が設定され、変更したすべての行が検証チェックリストに合格すれば完了です。
  4. プレビュー:crowdin context upload --dryrun を実行します。入力した文字列だけが正確に一覧表示されたら完了です。
  5. アップロード:crowdin context upload を実行してから、crowdin context status を実行します。アップロード結果にドライランと同じ文字列が一覧表示されたら完了です。件数と新しいカバレッジをユーザーに報告します。

情報源(優先順位順)

各文字列について、確信を持って ai_context を記述するのに十分な情報が得られるまで、JSONL の次のフィールドを順に確認します。

  1. text - 元の文字列そのもの。常に主要な手がかりです
  2. key - 構造を示すことがよくあります(例:button.save、modal.title.delete_user、error.network.timeout)
  3. context - 自由記述の説明、翻訳者向けコメント、ソースファイルの参照が含まれる場合や、空の場合があります。補足情報として扱い、特定の形式だと決めつけないでください
  4. ソースファイル - context に解析可能なファイルパスと行番号が含まれ、文字列の意味がまだ曖昧な場合に限り参照します。参照箇所の前後 10~15 行を読み、UI 要素の種類、周囲のコンポーネント、props を特定します

コンテキストが必要な文字列

次の文字列を優先し、text と key だけで意味が明確な文字列は省略します。

  • 曖昧で短い単語 - UI の配置によって意味が変わる、単独の動詞、名詞、形容詞
  • 色名/ステータス名 - 色、状態、カテゴリを表す単語。ラベル、バッジ、フィルターの可能性があります
  • ICU/メッセージ形式の文字列 - 複数形や名前付きパラメーターを含み、数えられる対象や置換される内容によって意味が変わる文字列
  • インラインタグを含む文字列 - タグ部分の役割が文字列だけでは明確でない、マークアップタグを含むテキスト
  • 対象範囲が不明確な短いフレーズ - 複数の UI コンテキストで使われる可能性がある、短い命令文や単独のフレーズ

適切な ai_context 値の書き方

  • 翻訳者向けに 1~3 文で記述します。開発者向けにはしません
  • UI 要素の種類(ボタン、ラベル、タブ、ツールチップ、モーダルタイトル、ドロップダウンの選択肢など)と表示場所を明記します
  • 複数形の場合:数える対象と、# に置き換わる内容を説明します
  • インラインタグの場合:タグ部分が何として表示されるか(リンク、コード、太字テキストなど)を説明します
  • 色名/ステータス名の場合:選択可能なオプション、バッジ、フィルターラベルなどのどれにあたるかを説明します
  • 意味を明確にする場合を除き、ファイル名や変数名は避けます
例
文字列キー適切な ai_context
"Red"color.red"カラーピッカーの色の選択肢ラベルです。選択可能な色として赤を示します。"
"Blue"(なし)"選択肢またはステータスラベルとして使われる色名です。周囲の UI に基づいて意味を明確にしてください。"
"{count, plural, one {# month} other {# months}}"duration.months"月単位の期間を表示します。'#' は数値に置き換わります。"
"Edit <0>src/App.tsx</0> and save to test HMR"(なし)"操作を案内する UI メッセージです。タグ部分はファイル名を強調表示するインラインコード要素として描画されます。"
"New"button.new"新しい項目を作成するボタンのラベルです。対象となる項目は現在のページによって異なります。"

オーケストレーションされた入力(任意)

別のワークフローから追加のコンテキストとともにこのスキルが呼び出された場合は、それを使用してください。

  • アプリのドメイン — 製品の概要を1行で説明します。配置の説明で意味が明確になるように、前置きとして加えるか、説明に織り込んでください(「コーヒーの抽出記録アプリのボタンラベル…」など)。
  • ソースのチェックアウト — JSONL の context フィールドに #: path:line 形式の参照が含まれていて(PO のアップロードでは自動的に追加されます)、リポジトリを利用できる場合は、推測するのではなく周辺のコードを読み、コンポーネントの種類、props、およびプレースホルダーが何に置き換えられるかを特定してください。

どちらの入力も、以下の安全ルールを変更するものではありません。編集するのは ai_context のみです。

JSONL ファイルの安全ルール

編集するのは ai_context フィールドの値のみです。 id、key、text、file、context には絶対に手を加えないでください。

編集手順

単一文字列(1~5行):正確な行を対象に、StrReplace を使用します。"ai_context":"" の部分文字列(または、すでに設定されている場合は現在の値全体)を対象にします。

old: "ai_context":""
new: "ai_context":"Your context here."

バッチ処理(多数の文字列):コンテキストが必要な文字列が数十件または数百件ある場合は、1件ずつではなく、バッチで処理してください。

  • ファイルの一部(または、無理なく処理できる場合はファイル全体)を読み取り、ai_context が必要な行を特定して、そのバッチの行にコンテキストを設定します(行を JSON として解析し、ai_context を設定した後、1行にシリアライズします)。その後、そのバッチの変更を書き込むか適用します。完了するまで、次のバッチに進んでください。
  • 変更を適用する際は、グローバルな読み取りから書き込みを一度に行う方法や、数百件の単一行置換よりも、行のバッチ単位で書き込む(または変更を適用する)方法を優先してください。バッチサイズは実装者が決めて構いません(例:数十行または100行)。
  • バッチ処理の場合も、保存前に、変更した行のサンプルに対して以下の有効性チェックリストを確認してください。
有効性チェックリスト(保存前に確認)
  • 行が引き続き単一の有効な JSON オブジェクトである
  • ai_context の値が引用符で囲まれた文字列である
  • 値の中にエスケープされていない二重引用符がない(\" を使用する)
  • 値の中に実際の改行がない(1行に収める)
  • フィールドが追加、削除、並べ替えされていない
文字のエスケープ
  • " → \"
  • \ → \\
  • 改行 → 避けて、代わりにスペースを使用します

コメント