Importer vos traductions personnalisées

Mémo pour retrouver le code qui permet d'importer vos traductions personnalisées au sein d'un projet Drupal 7 ou Drupal 8.

Un billet rapide pour faire office de mémo, je vous partage une portion de code qui permet de d'importer vos traductions personnalisées au sein du projet. Il arrive que vous ayez des chaînes qui ne viennent pas de localize et que vous devez traduire. Vous aurez donc besoin d'un .po personnalisé, voici comment en importer un ou en réimporter un depuis un hook_update_N(). A noter que le fichier est versionné et est stocké dans sites/all/translations/monprojet.fr.po.

<?php
/**
 * Import translations.
 */
function monmodule_update_7063() {
  // Import our custom translations that are not exposed anywhere.
  $po_file_name = DRUPAL_ROOT . '/sites/all/translations/monprojet.fr.po';
  $file = (object) array('filename' => basename($po_file_name), 'uri' => $po_file_name);
  _locale_import_po($file, 'fr', LOCALE_IMPORT_OVERWRITE, 'default');
}
?>

EDIT : Pour une version Drupal 8 voici un exemple (merci Fabrice).

function monmodule_update_8001() {
  $po_file_name = DRUPAL_ROOT . '/chemin/vers/monfichier.fr.po';
  $file = (object) array('langcode' => 'fr', 'uri' => $po_file_name);
  $options = [
    'customized' => LOCALE_CUSTOMIZED,
  ];
  Try {
    $report = Gettext::fileToDatabase($file, $options);
  }
  Catch(Exception $e) {
    watchdog_exception('monmodule', $e, $e->getMessage());
  }
}

Vous pouvez également vous appuyer sur cet article notamment si vous avez plusieurs environnements : https://medium.com/@info_76564/how-to-deploy-drupal-interface-translations-5653294c4af6

Commentaires

Fabrice Jeudi 7 avril 2016 - 12:23

Merci pour l'info. Et pour Drupal 8 je mets son équivalent que j'ai pu retrouver facilement en suivant la piste du _locale_import_po() avec les change records.

function monmodule_update_8001() {
  $po_file_name = DRUPAL_ROOT . '/chemin/vers/monfichier.fr.po';
  $file = (object) array('langcode' => 'fr', 'uri' => $po_file_name);
  $options = [
    'customized' => LOCALE_CUSTOMIZED,
  ];
  Try {
    $report = Gettext::fileToDatabase($file, $options);
  }
  Catch(Exception $e) {
    watchdog_exception('monmodule', $e, $e->getMessage());
  }
}

Votre commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
Votre adresse servira à afficher un Gravatar et à vous notifier des réponses. Votre commentaire sera anonymisé si ce billet est dépublié pendant plus de 3 mois.

À propos de Julien

Co-fondateur - Scrum master & Expert technique

Utilisateur de Drupal depuis 2008, j’ai fait mes armes comme développeur chez Commerce Guys puis me suis mis à encadrer les nouveaux arrivants avant de donner des formations, participer aux avant ventes et accompagner les équipes au passage à Scrum.

Je suis impliqué dans la communauté française de Drupal depuis 2009, j’ai été tour à tour président puis vice-président de l’association Drupal France et francophonie entre 2011 et 2013.