Help:Extension:Translate/Group management

After help>Special:MyLanguage/Help:Extension:Translate/Group configuration|configuring groups they must be processed. This means that definition texts are indexed and needed caches are populated. For this, you need to run  to process the changes. You can run this maintenance script as given below.

From the Translate extension directory:

The above mentioned script finds out changes in the messages and makes only these changes available for processing to save time. The changes include:


 * changes in English message contents


 * changes in message documentation contents


 * mismatching contents for group/language


 * additional entries in a file for a group/language (i.e. externally maintained)

On this special page file based message groups can be managed (FileBasedMessageGroup). This page allows updating of the file cache, import and fuzzy for source language messages, as well as import/update of messages in other languages.

Strong synchronization
Strong synchronization is a mechanism which prevents corruption of translation data caused by synchronization issues. It does this by keeping track of synchronization events and blocking unsafe actions if synchronization is in progress, incomplete or has a failure. It was created to address problems that state synchronization could not. For example:


 * 1) Upstream modifies all translation files: for example, by updating a copyright date in a string and removing some unused strings (basically, any changes that make --safe-import to not process changes automatically).
 * 2) We update the read-only checkout from version A to latest version B.
 * 3) We do not process changes using Special:MessageGroupChanges
 * 4) We export and commit translations on top of B (but based on A) to create version C.

Upstream changes in version B are lost. For the next import we automatically update our read-only checkout to version C, so we never see or process changes in B.

The process
Incoming changes from source repositories are processed via the  background job. We've added a group synchronization cache that tracks:


 * 1) groups in sync - groups that have messages being processed via   in the job queue
 * 2) groups with errors - groups that have had messages update processing errors
 * 3) group in review - groups whose messages are waiting to be reviewed

Message update processing errors are identified by looking at messages that are still present in the group synchronization cache as "in sync" after a certain period of time. On rare occasions it may happen that the  was completed but did not inform the group synchronization cache that it was done. Such errors can be identified by looking at the message's content to see if it has been updated.

When running exports, following groups are skipped:


 * 1) groups in sync
 * 2) groups with errors
 * 3) group in review

This ensures that changes from Translate are not pushed out until incoming changes from source repositories are processed first.

Similarly when processing incoming changes, following groups are skipped:


 * 1) groups in sync
 * 2) groups with errors

This will ensure that changes from remote sources do not override choices made when processing changes in Special:MessageGroupChanges.

Administrators can see groups in review and groups with errors on Special:MessageGroupChanges. For groups with error, review the messages that have failed, and resolve them after verifying that the updates are properly applied.

Global Synchronization Lock
For the import and export scripts, a global sync lock has been added to ensure that exports and imports cannot be run simultaneously. The ideal workflow would involve first running the imports, allowing all groups to finish processing, and then running the exports.