Help:Extension:Translate/メッセージ群の保守
メッセージ群の構成が終了したら、それらを処理します。 この処理では、定義文のインデックスと必要なキャッシュが構築されます。 そのため、変更を処理するために importExternalTranslations.php を実行する必要があります。 このメンテナンス スクリプトは、下記の手順で実行できます。
Translate 拡張機能のディレクトリで以下を実行します:
php scripts/importExternalTranslations.php
上記のスクリプトは、メッセージの変更点を検出し、時間節約のためにこれらの変更点のみを利用可能にします。変更点は以下を含みます:
- 英語のメッセージ内容の変更
- メッセージの説明文の変更
- メッセージ群/言語の本文の不整合
- メッセージ群/言語単位でファイル内に現れる追加的な項目 (外部で保守される)
新しいスタイル群はSpecial:ManageMessageGroups に進み、すべての言語を再構築 (インポート) します。 この特別ページでファイル単位のメッセージ群 (FileBasedMessageGroup) を管理します。 このページではファイルのキャッシュの更新、翻訳元言語のメッセージのインポートと曖昧化、その他の言語のメッセージのインポート/更新を行います。
強力な同期
強力な同期は、同期の問題によって翻訳データが破損するのを防ぐ仕組みです。 これは、同期イベントを追跡し、同期が進行中、不完全、または失敗している場合に安全でない操作をブロックすることで実現されます。 これは、状態同期では対処できなかった問題を解決するために作られました。 例:
- アップストリームがすべての翻訳ファイルを変更します。例えば、文字列内の著作権日付を更新したり、未使用の文字列を除去したりします。(基本的に、--safe-import が変更を自動処理できなくなるような変更が該当します。)
- 読み取り専用チェックアウトをバージョン A から最新のバージョン B に更新します。
- Special:MessageGroupChanges では変更を処理しません
- バージョン A に基づいて、バージョン B の上に翻訳をエクスポートしてコミットし、バージョン C を作成します。
バージョン B の上流の変更は失われます。 次回のインポートでは、読み取り専用のチェックアウトを自動的にバージョン C に更新するため、バージョン B の変更は一切確認せず、処理することはありません。
処理の流れ
ソース リポジトリからの変更は、MessageUpdateJob バックグラウンド ジョブを介して処理されます。
メッセージ群同期キャッシュを追加し、以下の内容を追跡します:
- 同期中のメッセージ群 –
MessageUpdateJobによってジョブ キュー内で処理中のメッセージを持つメッセージ群 - エラーのあるメッセージ群 – メッセージの更新処理でエラーが発生したメッセージ群
- 査読中のメッセージ群 – メッセージ更新処理でエラーが発生したメッセージ群
メッセージの更新処理エラーは、一定の時間が経過した後に「同期中」としてメッセージ群同期キャッシュにまだ存在するメッセージを確認することで特定されます。
まれに、MessageUpdateJob が完了しても、メッセージ群同期キャッシュに完了したことが通知されない場合があります。
そのようなエラーは、メッセージの内容を確認して更新されているかどうかを見ることで特定できます。
エクスポートを実行する際、以下のメッセージ群はスキップされます:
- 同期中のメッセージ群
- エラーのあるメッセージ群
- 査読中のメッセージ群
これにより、ソース リポジトリからの変更が先に処理されるまで、Translate からの変更が反映されないことが保証されます。
同様に、受信した変更を処理する際には、以下のメッセージ群はスキップされます:
- 同期中のメッセージ群
- エラーのあるメッセージ群
これにより、リモート ソースからの変更が Special:MessageGroupChanges での変更処理時に行った選択を上書きしないことが保証されます。
管理者は Special:MessageGroupChanges で査読中のメッセージ群およびエラーのあるメッセージ群を確認できます。 エラーのあるメッセージ群については、更新に失敗したメッセージを確認し、更新が正しく適用されていることを検証した上で問題を解決してください。
グローバル同期ロック
インポートおよびエクスポートのスクリプトには、エクスポートとインポートが同時に実行されないようにするためのグローバル同期ロックが追加されました。 理想的なワークフローは、まずインポートを実行し、すべてのメッセージ群の処理が完了した後にエクスポートを実行することです。
関連項目
- translatewiki:Repository management及び関連のページに一般的な使用例を提示