ソースファイルをエンジンにプッシュし、実行の完了を待って、出力をディスクに書き込みます。
lingo push [patterns...] [--force] [--backfill-missing] [--yes] [--wait] [--estimate]デフォルトの動作 — 差分プッシュ#
引数を指定しない場合、lingo push は 差分のみモード で実行されます。
- 設定の
filesパターンに一致するすべてのソースファイルをハッシュ化する - 各ハッシュをロックファイルと比較し、変更されたソースを特定する
- 変更されたソースをエンジン上の実行としてアップロードする
- 実行が完了するまで待機する
- 出力をディスクに書き込む
- 新しいソースハッシュをロックファイルにコミットする
前回の正常な push 以降、変更されたソースがなければ、このコマンドは ✓ Nothing to push. を返して即座に終了します。サーバーとの往復も、トークン消費も発生しません。
引数とフラグ#
位置引数: patterns... — スコープ付き push#
lingo push docs/en/about.md
lingo push 'docs/en/**/*.md' 'locales/en.json'push の対象を特定のファイルに限定します(.lingo/config.json にすでに含まれているパターンに一致している必要があります)。これにより、コマンドは スコープモード に切り替わります。
- 前回のソースとの差分比較は行われず、一致したすべてのソースが、変更の有無にかかわらずスコープ内として扱われます。
- 一致するソースハッシュを持つターゲットがすでに存在する場合、サーバー側では noop になります。エンジンはそれらをスキップし、CLI はキャッシュ済みとして報告します。
プロジェクト全体を再ハッシュせず、更新したファイルを1つだけ確実に翻訳したいときや、--force を使って単一ページを再翻訳したいときに使います。
--force / -f#
lingo push docs/en/about.md --force一致するすべてのターゲットを再翻訳し、既存の翻訳を無視して、サーバー側キャッシュもバイパスします。スコープの指定が必須 で、位置引数のパターンまたは --backfill-missing のいずれかが必要です。lingo push --force 単独ではプロジェクト全体を再翻訳してしまうため、拒否されます。
デフォルトでは、--force は実行前に確認を求めます。
! --force will retranslate every target for pattern(s): docs/en/about.md and
overwrite existing translations. Continue? (Yes, retranslate / Cancel)プロンプトをスキップするには、--yes / -y を指定します(CI向け)。
--backfill-missing#
lingo push --backfill-missing設定されたすべてのパターンについて、まだ存在しないターゲットをすべて翻訳します。設定内の全パターンを対象にしたスコープ付き push と同等ですが、存在しないファイルだけを生成します。targetLocales に新しいロケールを追加したあとや、新規プロジェクトで最初の push を行うときに使います。
--force と組み合わせると、すべてをゼロから再翻訳できます。
lingo push --backfill-missing --force --yes--yes / -y#
--force の確認プロンプトをスキップします。--force がない場合は効果がありません。
--estimate#
lingo push --estimate
lingo push 'docs/en/**/*.md' --estimateこの push の概算コストを表示して、翻訳は行わずに終了します。CLI は push のフルパイプライン(ハッシュ化、差分計算、ソースバイトのアップロード)を実行し、サーバーが正確な差分を算出できる状態にしたうえで、実行を開始する代わりにエンジンに料金の見積もりだけを依頼します。翻訳・書き込み・請求は一切発生せず、lockfile とターゲットファイルも変更されません。
表示されるのは概算であり、確定料金ではありません。--estimate はスコープや --force / --backfill-missing と組み合わせて使えるため、これから実行する push をその条件どおりに見積もれます。
ソースに変更がない場合、--estimate は通常の push と同じく、✓ Nothing to push. でそのまま終了します。
同じソースに対する実行がすでに進行中の場合、--estimate は途中まで開始された実行の料金を見積もるのではなく、失敗します。
Error: Cannot estimate: existing group run_a8c... is already in 'running' state. Change a source file or wait for the run to finish.出力#
成功時:
Pushing source files to localization engine…
✓ Run run_a8c...: localized 12 target file(s), 4 already up-to-date, uploaded 1 new artifact(s).サマリーは次の内訳で表示されます。
- N 個のターゲットファイルをローカライズ — エンジンが新しい翻訳を生成し、CLI がそれを書き込みました。
- N 件はすでに最新 — サーバー側のキャッシュヒット(ソースが一致し、ターゲットを再利用)。
- N 個の新しいアーティファクトをアップロード — エンジンがこれまで見たことのないソース(バイナリ/大容量コンテンツは一度だけ保存され、以後は参照されます)。
- N 個のターゲットをスキップ(ローカル編集あり) — ローカルのターゲットハッシュがロックファイルと食い違っています。上書きするには
--forceを付けて再実行してください。
ターゲット単位で失敗した場合、CLI は失敗した各ターゲットのエラーを表示し、ゼロ以外の終了コードで終了します。CI での利用に便利です。
✓ Run run_a8c...: localized 10 target file(s).
2 target(s) failed:
locales/de.json: rate limit on engine; retry later
locales/fr.json: timeout--estimate を使用する場合:
Estimating push cost…
› Estimated cost: ~$1.87 (12 target(s), ~48,000 output tokens — estimate, not a quote)
de: ~$0.9350 (6 target(s), ~24,000 tokens)
fr: ~$0.9350 (6 target(s), ~24,000 tokens)
4 target(s) already up-to-date — no cost.
✓ Estimate complete — nothing was translated. Run `lingo push` to start the translation.再試行の仕組み#
ロックファイルが更新されるのは、実行が完全に成功したあとだけ です。部分的な失敗(たとえば、あるロケールでタイムアウト)が発生した場合、ロックファイル内のソースハッシュは変更されないため、次回の lingo push では同じ差分がそのまま再試行されます。手動でリセットする必要はありません。
翻訳が始まる前にエンジン側でエラーが発生した場合(認証、バリデーションなど)、何も書き込まれず、ロックファイルも変更されません。
よくあるパターン#
CI: マージ時に翻訳#
- run: lingo push --backfill-missing --yes
- run: git add . && git commit -m "chore: refresh translations" && git push--backfill-missing は安全なデフォルトです。何も上書きせず、不足している分だけを埋めます。
単一ファイルでの反復#
lingo push docs/en/onboarding.md -f -yコピーを大きく変更したあと、ソースを1つだけ再翻訳します。すばやく反復するため、プロンプトはスキップします。
新しいロケールの追加#
targetLocales の .lingo/config.json を増やしたあと:
lingo push --backfill-missing既存のものを再翻訳せずに、コーパス全体を新しいロケール向けに翻訳します。
