Repeatedly I get questions about how to deploy translations in multi server environments and automated deployments.

This is my take at it for Drupal 7.

PO files

For adding translations to code repositories, PO files are handy, and supported by Drupal. You can download them from https://localize.drupal.org/, generate them with POTX module: https://www.drupal.org/project/potx, or even handcode them.

i10n or Localization

Importing can be done using the i10n_update module: https://www.drupal.org/project/l10n_update. Make sure to configure it to use local files only: /admin/config/regional/language/update.

Now you can add .po files to the defined directory, usually at under sites/all/translations/. Please obey the file naming conventions: module name-version.language.po.

To to this you can execute Drush commands or use the GUI.

drush l10n-update-refresh
drush l10n-update

Updating PO files

Now things get a bit nasty. When updating your already imported PO files when not changing your module version is not being done without tweaks. I also encountered problems with updating PO filenames when changing the version number. This data is all in the "l10n_update_file" table. The trick is to reset the "timestamp" column of PO files to be re-imported.

Reset timestamps

This is an example query to reset the timestamp of all locally stored PO files:

// Reset all .po entries that are saved locally
db_update('l10n_update_file')
->fields(array(
'timestamp' => 0,
))
->condition('uri', 'sites/all/translations/%', 'LIKE')
->execute();

Put this in a custom module as drush command, in a submit handler via form_alter or whatever you prefer.