i18n 乖離状況の更新

ローカライズされたコンテンツ全体の drifted_from_default フロントマターフィールドを更新し、 オプションでその結果の PR を作成する方法。

以下の手順に従い、ロケールごとに npm run fix:i18n:status を実行してローカライズされたコンテンツの drifted_from_default フロントマターフィールドを更新し、ロケールごとにコミットして、オプションで PR を作成します。

引数

このスキルはオプションの引数を受け付けます。

  • --locale locale,...(オプション): 処理するロケール ID のカンマ区切りリストです。 たとえば --locale pt,es,fr のように指定します。 省略した場合、英語以外のすべてのロケールが処理されます。
  • --create-pr(オプションフラグ): 処理後に自動的に PR を作成します。 省略した場合、AskUserQuestion を使用して PR を作成するかどうかをユーザーに確認します。

準備

以下の手順は、メインリポジトリを指す upstream リモートが設定されたリポジトリのローカルクローンがあることを前提としています。 リポジトリルートからローカルで実行してください。

  1. ワーキングツリーがクリーン(コミットされていない変更がない)であることを確認します。

  2. main に切り替えて最新の変更をプルします。

    git checkout main
    git pull upstream main
    
  3. 作業用ブランチを作成します。

    git checkout -b i18n_update-drift-status
    

ロケールの検出

--locale が渡されなかった場合、コンテンツディレクトリから英語以外のすべてのロケールを検出します。

find content -maxdepth 1 -mindepth 1 -type d ! -name 'en' -exec basename {} \;

これにより、1行に1つのロケール ID(たとえば bnesfr など)が返されます。

--locale が渡された場合は、そのリストを使用します。

ロケールごとの乖離状況の更新

解決されたロケールリスト内の各 {LANG_ID} に対して、以下を実行します。

  1. 乖離状況の更新コマンドを実行します。

    npm run fix:i18n:status -- content/{LANG_ID}
    
  2. PR の説明テーブル用の統計情報を収集します。

    # 乖離したファイル数
    grep -rl "drifted_from_default: true" content/{LANG_ID} | wc -l
    # 翻訳可能なファイルの合計数
    grep -rl "default_lang_commit" content/{LANG_ID} | wc -l
    
  3. コマンドによって変更が生じた場合、ステージングしてコミットします。

    git add content/{LANG_ID}
    git commit -m "chore({LANG_ID}): update drift status"
    

    あるロケールで変更がなかった場合、コミットはスキップしますが、統計情報は記録します。

PR の作成

すべてのロケールの処理後、以下を行います。

  • --create-pr が渡されていない場合、AskUserQuestion を使用して PR を作成するかどうかをユーザーに確認してから進めます。
  • ユーザーが拒否した場合(または --create-pr が渡されておらず、ユーザーが「いいえ」と答えた場合)、ここで処理を止めて統計情報を報告します。

PR を作成するには、ブランチをプッシュします。

git push -u origin i18n_update-drift-status

次に gh pr create を以下の内容で実行します。

  • タイトル: [i18n] Update drift status for localized content
  • 説明: 上記で収集した統計情報を以下のテーブルに記入し、処理されたロケールのみを含めます。
Updates the drift status for localized content.

Status per locale after this PR:

| Locale | Drifted files | Total files |
| ------ | ------------- | ----------- |
| {ID}   | {drifted}     | {total}     |