継続的ローカリゼーション: すべての言語を、すべてのマージで。
継続的ローカリゼーションでは、コードの変更に伴って新しい文字列や変更された文字列を自動的に翻訳します。リリース前の別フェーズではなく、必要なコードと一緒にすべての言語が出荷準備完了の状態を保ちます。
継続的ローカリゼーションとは?
継続的ローカリゼーションは、新しい文字列や変更された文字列が発生した時点で自動的に翻訳に送られ、スケジュール調整なしで製品側に翻訳テキストが反映される作業方式です。
翻訳は止まらないため、専用の翻訳フェーズは存在しません。開発者が文字列をマージすると、コードと同じフローで翻訳も追随するため、リリースは誰かのファイルを待つ必要がありません。
これは継続的デリバリーのローカリゼーション版です。毎日マージしながら数週間ごとに翻訳を手渡すチームでは、毎月的大部分の期間で言語がコードに追いついていません。継続的ローカリゼーションなら、そのギャップを1回の実行時間分に縮小できます。
機械翻訳の出力を未確認で公開するという意味ではありません。人的レビューが必要な文字列を決定でき、リリースにはレビュー済みのもののみを含めることができます。
違いは翻訳のタイミングです。 担当者ではありません。
| 変化する点 | バッチ方式の引き渡し | 継続的 |
|---|---|---|
| 並列表示 | ||
| 翻訳の実施タイミング | 各リリース前のフェーズで実施 | 文字列の変更ごとに実施 |
| 開始のトリガー | 担当者がファイルをエクスポート | プッシュ、マージ、またはコンテンツの変更 |
| 作業単位の規模 | 数週間分の文字列を一度に処理 | 1回の変更に含まれる文字列のみ |
| リリースが待つもの | ファイルの返却 | 指定した文字列に対するレビュー |
| 直前の文案変更 | 往復の手間が再度発生 | 該当キーの再実行 |
| 翻訳者の作業環境 | 文字列の一覧表(スプレッドシート) | 用語集、翻訳メモリ、スクリーンショット付きの行 |
| ローンチ時の対応言語 | 段階的、波状展開 | 機能と同時に提供 |
- 翻訳の実施タイミング
- 各リリース前のフェーズで実施
- 開始のトリガー
- 担当者がファイルをエクスポート
- 作業単位の規模
- 数週間分の文字列を一度に処理
- リリースが待つもの
- ファイルの返却
- 直前の文案変更
- 往復の手間が再度発生
- 翻訳者の作業環境
- 文字列の一覧表(スプレッドシート)
- ローンチ時の対応言語
- 段階的、波状展開
- 翻訳の実施タイミング
- 文字列の変更ごとに実施
- 開始のトリガー
- プッシュ、マージ、またはコンテンツの変更
- 作業単位の規模
- 1回の変更に含まれる文字列のみ
- リリースが待つもの
- 指定した文字列に対するレビュー
- 直前の文案変更
- 該当キーの再実行
- 翻訳者の作業環境
- 用語集、翻訳メモリ、スクリーンショット付きの行
- ローンチ時の対応言語
- 機能と同時に提供
継続的ローカリゼーションの仕組み
新しい文字列がループを通過する過程を追います。各ステップで実際に目にする内容を示します。
変更はCLI、GitHub Action、またはGitホスト上のアプリを通じてTransglotに届きます。ソースファイルは20種類のネイティブフォーマットのいずれかで解析され、各文字列はプロジェクトが既に保持している内容と比較されます。新規および変更された文字列のみが次の工程に進みます。
翻訳メモリからの完全一致は行に入力され、単語数は消費しません。残りは用語集、スタイルガイド、およびそのキーのコンテキストとともにGlossaに送られます。
プレースホルダー、複数形、用語集の用語、長さの制限が、各実行のすべての行でチェックされます。壊れたプレースホルダー、欠落した複数形、禁止された用語集の用語は一度修正されて再チェックされ、2回目の失敗でも修正されない場合は出荷されずに拒否されます。長さ制限のみ超過した行は書き込まれますが、Teamプラン以上の自動承認またはQA実行によりレビュー対象としてフラグが立てられます。
実行処理は、人が編集またはレビューした行を上書きしません。後でソースが変更された場合でも、そのテキストは保持され、実行処理はその行をカウントして通知します。Teamプラン以上では、承認待ちの提案アップデートが横に表示されます。
Gitアプリはロケールファイルを1つの同期ブランチにコミットし、プルリクエストを常に最新の状態に保ちます。GitHubでは、プルリクエストに /translate とコメントすると、ファイルがそのプルリクエスト専用のブランチに反映されます。またはCDNに公開すれば、リリース不要で実行中の製品が変更を読み取ります。
継続的ローカリゼーションが失敗する6つのパターンと、それぞれの防止策
実行処理が人の作業を上書きする
すべてのライターは、行の状態(実行処理、メモリ一致、プッシュ)を最初に確認します。人が編集またはレビューした行は保持され、実行処理によって報告されます。
→fr、レビュー済み、ソースが直近で変更
✓保持、カウント、報告済み
壊れた文字列が本番環境に到達する
投入されたすべてのトークンは戻ってくる必要があります。ICUプロジェクトでは、レンダリング時にエラーとなるメッセージはプルリクエスト、コネクタ、CDNバンドルから除外され、実行処理によって特定されます。
→{count, plural, one {# article}
✓ファイルから除外され、実行時に名前が指定される
リポジトリがボットによるプルリクエストで埋め尽くされる
リポジトリごとに1つの同期ブランチと1つのプルリクエスト。2回目のプルリクエストを開くのではなく、2回の迅速なプッシュがこれに収束します。
→#812 #815 #819 #823 ローカライズ更新
✓#812 transglot/sync、その場で更新
ソースの編集により、古い翻訳が残ってしまう
各ターゲット行は、作成時のソースを記録するため、変更された文字列はすべての言語で同時に期限切れとして認識され、そのキーのみが再度実行されます。
→「保存」が「下書き保存」に変更。fr、de、ja は依然として「保存」と表示
✓fr、de、ja でその1つのキーが再度実行
実行ごとにプロジェクト全体に対して再度課金される
実行規模は変更内容に基づいて決定されます。変更されていない文字列は送信されず、完全に一致するメモリ内の項目は単語数としてカウントされず、担当者がいる行は何も費やす前に拒否されます。
→ファイルには48,000語が含まれています
✓今回の実行: 60語
未完成のプル操作により、ロケールファイルが消去される
サーバーがロケールのエントリなしを報告した場合、プル操作は内容のあるファイルの上書きを拒否し、パイプラインをそこで停止させるために終了コード1を返します。
→プル: ja のエントリ0件、ファイルには1,204件あり
✓空のバンドルで locales/ja.json を上書きすることを拒否
- run 4182 fr: ドラフトからプレースホルダーが欠落、再試行で修復
- run 4182 de: 担当者があるため、3行を保持
- run 4182 ja: メモリから41行、0語
- run 4183 ar: 再試行後も複数形形式が欠落、行を拒否
- pull locales/pt-BR.json に書き込み済み
- sync transglot/sync が更新され、プルリクエスト #812
3つすべてがあなたのリポジトリに接続されます。 異なるのは、マージ時に何が起こるかです。
2026年11月5日、各企業の自社ページから読み取り。価格欄は以下のリンク先にある比較ページから取得しており、プランと計算式を示しています。価格とプランは変更される可能性があるため、決定前にご確認ください。
| 動作内容 | Transglot | Lokalise | Crowdin |
|---|---|---|---|
| 新しい文字列がマージされる | デフォルトで翻訳済み プッシュにより実行が開始されます。プロジェクト設定でこれをオフにできます。 | 設定完了後に翻訳されます 自動化はキー作成時およびファイルインポート時にはデフォルトでオフになっています。AIステップを含むワークフローは、設定されたスケジュールで実行されます。 | 有効化後に翻訳されます [設定] > [自動翻訳] で、各アップロード時に実行されます。Git同期はデフォルトで1時間ごとに実行されます。 |
| 翻訳がチェックに失敗しました | 1回修復を試行し、その後拒否します すべての実行の各行において、壊れたプレースホルダー、複数形、または禁止用語を検出します。長さ超過も記録されます。ICUプロジェクトでは、壊れた行はプル、コネクタ、CDNから除外されます。 | エラーレベルのチェックにより、エディタでの保存が停止します 各チェックは[オフ]、[警告]、または[エラー]に設定されます。 | エラーレベルのチェックにより、保存が停止します 各チェックは[警告]または[エラー]に設定されます。 |
| ユーザーが行を編集済みです | 実行により書き込みが拒否されます メモリマッチとプッシュも同様に行われます。後でソースが変更された場合、実行によりその行が報告されます。 | デフォルトでは、自動化によって空の値が入力されます 強制オプションとクリアアクションにより、入力済みの値を上書きできます。 | オプションにより、ユーザーによる行と承認済みの行が保持されます すべて置換するオプションもあります。 |
| 活発なリポジトリでのプルリクエスト | 1つのブランチ、1つのプルリクエスト 各プッシュ時にその場で更新されます。 | プルリクエストごとに新しいブランチを作成 タイムスタンプ付きで命名されます。 | サービスブランチ、1時間ごとに同期 デフォルトは1時間ごとで、間隔は変更可能です。 |
| プランのカウント対象 | 言語ごとに1回、翻訳された単語数 完全一致するメモリマッチは無料です。文字列の保存も無料です。 | 処理された単語数 基本言語とターゲット言語の両方がカウントされます。 | ホストされた単語数 翻訳対象の単語数 × 対象言語数 |
| AIの利用料に含まれるもの | プランに含まれる単語数 別途請求されません。 | プラン別のAI単語利用枠 Standard AIとPro AIの単語数は、それぞれ独立したプラン項目です。 | 別枠のクレジット、または独自のAPIキー Crowdinの管理型AIは、サブスクリプション外でクレジットから支払われます。 |
| 同じ作業: 5,000 文字列を 10 言語に翻訳 | $39/月 Team、翻訳込み | $1,049/月 Advanced (billed yearly) | $138/月 Pro with 560K hosted words (billed monthly)、AIは追加料金 |
| GitHub、GitLab、Bitbucket、Azure Repos、CLI、MCPサーバー | すべて対応 Git連携アプリはTeamプラン以上で、クラウド版に対応しています。 | すべて対応 統合機能はすべてのプランで利用可能です。 | すべて対応 Bitbucket Serverにも対応しています。 |
- 新しい文字列がマージされる
- デフォルトで翻訳済みプッシュにより実行が開始されます。プロジェクト設定でこれをオフにできます。
- 翻訳がチェックに失敗しました
- 1回修復を試行し、その後拒否しますすべての実行の各行において、壊れたプレースホルダー、複数形、または禁止用語を検出します。長さ超過も記録されます。ICUプロジェクトでは、壊れた行はプル、コネクタ、CDNから除外されます。
- ユーザーが行を編集済みです
- 実行により書き込みが拒否されますメモリマッチとプッシュも同様に行われます。後でソースが変更された場合、実行によりその行が報告されます。
- 活発なリポジトリでのプルリクエスト
- 1つのブランチ、1つのプルリクエスト各プッシュ時にその場で更新されます。
- プランのカウント対象
- 言語ごとに1回、翻訳された単語数完全一致するメモリマッチは無料です。文字列の保存も無料です。
- AIの利用料に含まれるもの
- プランに含まれる単語数別途請求されません。
- 同じ作業: 5,000 文字列を 10 言語に翻訳
- $39/月Team、翻訳込み
- GitHub、GitLab、Bitbucket、Azure Repos、CLI、MCPサーバー
- すべて対応Git連携アプリはTeamプラン以上で、クラウド版に対応しています。
- 新しい文字列がマージされる
- 設定完了後に翻訳されます自動化はキー作成時およびファイルインポート時にはデフォルトでオフになっています。AIステップを含むワークフローは、設定されたスケジュールで実行されます。
- 翻訳がチェックに失敗しました
- エラーレベルのチェックにより、エディタでの保存が停止します各チェックは[オフ]、[警告]、または[エラー]に設定されます。
- ユーザーが行を編集済みです
- デフォルトでは、自動化によって空の値が入力されます強制オプションとクリアアクションにより、入力済みの値を上書きできます。
- 活発なリポジトリでのプルリクエスト
- プルリクエストごとに新しいブランチを作成タイムスタンプ付きで命名されます。
- プランのカウント対象
- 処理された単語数基本言語とターゲット言語の両方がカウントされます。
- AIの利用料に含まれるもの
- プラン別のAI単語利用枠Standard AIとPro AIの単語数は、それぞれ独立したプラン項目です。
- 同じ作業: 5,000 文字列を 10 言語に翻訳
- $1,049/月Advanced (billed yearly)
- GitHub、GitLab、Bitbucket、Azure Repos、CLI、MCPサーバー
- すべて対応統合機能はすべてのプランで利用可能です。
- 新しい文字列がマージされる
- 有効化後に翻訳されます[設定] > [自動翻訳] で、各アップロード時に実行されます。Git同期はデフォルトで1時間ごとに実行されます。
- 翻訳がチェックに失敗しました
- エラーレベルのチェックにより、保存が停止します各チェックは[警告]または[エラー]に設定されます。
- ユーザーが行を編集済みです
- オプションにより、ユーザーによる行と承認済みの行が保持されますすべて置換するオプションもあります。
- 活発なリポジトリでのプルリクエスト
- サービスブランチ、1時間ごとに同期デフォルトは1時間ごとで、間隔は変更可能です。
- プランのカウント対象
- ホストされた単語数翻訳対象の単語数 × 対象言語数
- AIの利用料に含まれるもの
- 別枠のクレジット、または独自のAPIキーCrowdinの管理型AIは、サブスクリプション外でクレジットから支払われます。
- 同じ作業: 5,000 文字列を 10 言語に翻訳
- $138/月Pro with 560K hosted words (billed monthly)、AIは追加料金
- GitHub、GitLab、Bitbucket、Azure Repos、CLI、MCPサーバー
- すべて対応Bitbucket Serverにも対応しています。
文字列が存在する場所から開始できます。 どの経路でも同じパイプラインに到達します。
継続的ローカリゼーションの設定方法
- 01
コードから文字列を抽出する
ユーザーに表示されるすべての文字列は、ロケールファイル内で安定したキーを持つ必要があります。Transglotは20種類の形式に対応しているため、現在使用している形式をそのまま維持できます。
jsonyamlxliffarb - 02
リポジトリの接続
initコマンドを実行すると、ロケールファイルが検出され、ブラウザ経由でサインインします。既存のファイルがアップロードされ、最初の翻訳が実行されます。
npx transglot@latest init - 03
マージごとに実行する
GitHub Actionを追加するか、他のCIからCLIを呼び出し、あるいはGitHub、GitLab、Bitbucket、Azure Repos用のアプリをインストールしてください。
transglot push --wait - 04
人の確認が必要な項目を決定する
プルリクエストルールでmin_stateをreviewedに設定すると、そのファイルには人が確認済みの文字列のみが含まれます。設定しない場合、ドラフト状態のままリリースされます。
min_state: reviewed
マージごとに実行した場合のコスト: 変更された単語のみ。
「単語」はソース言語の単語を指し、ターゲット言語ごとに1回カウントされます。実行規模は変更内容に基づいて決定されるため、プロジェクトの大小に関わらず、5つの言語で12の単語に変更があったマージでは60単語とカウントされます。
Starterプラン対応:$19/mo、月間300,000単語まで。
これは上限の約9%です。
これは翻訳のみを対象としたカウントです。品質チェック、ブランドボイスのドラフト作成、修正も単語数としてカウントされますが、メモリからの完全一致は無料です。CLIおよびGitHub ActionはStarterプランから、GitHub、GitLab、Bitbucket、Azure Repos用アプリはTeamプランから利用可能です。
継続的ローカリゼーションでは解決できない3つの課題
コード内に埋め込まれたままの文字列
パイプラインは読み取れるものしか翻訳できません。ハードコードされた文字列や、部品を組み合わせて作成された文章は事前に修正する必要があり、これらがロールアウト停滞の主な原因となります。
文言の責任者が不在
自動化は文字列を移動しますが、製品内の用語の決定は行いません。用語集の所有者を明確にしないと、誰も読まない言語が気づかれないうちにずれていくことがあります。
判断が必要なコピー
法務関連のテキスト、価格設定、ブランドメッセージには人の目が必要です。レビューに回し、承認されるまで配信ファイルからは除外してください。
継続的ローカライゼーション FAQ
導入前にチームがよく抱く疑問。