Drupal : Comment mettre à jour des traductions de langue?

Comment mettre à jour des traductions avec Drupal? Le noyau importe des traductions seulement lorsque vous activez la langue. Il ne supporte pas la mise à jour des langues.

Nous savons tous comment importer des traductions de langue, en premier lieu. Nous allons à http://drupal.org/project/translations et choisir notre traduction et copier les fichiers sur notre noyau de Drupal.
Puis nous allons à admin/settings/langue/add et ajouter une langue. Lorsque nous ajoutons une langue, Drupal détecte et importe tous ces paquets. Donc pas besoin d'aller les importer une par une.

Maintenant, nous voulons mettre à jour nos traductions? Nous les importons une par une? Je ne pense pas. Voici un extrait que vous pourriez utiliser pour mettre à jour vos langues.

Il se sert de la même fonction que le module locale utilise pour importer vos traductions. Les traductions existantes ne seront pas écrasées.

Voici le code:

Définir un hook de menu, construire une forme affichant vos langues activées et construire un lot qui va importer tous les fichiers de locale. C'est tout.


<?php
/**
 *  Implementation hook_menu()
 */ 
function language_update_menu() {
  
$items = array();

  
$items['admin/settings/language_update'] = array(
    
'title' => 'Update language',
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('language_update_languages_update_form'),
    
'access callback' => TRUE,
    
'type' => MENU_NORMAL_ITEM,
  );
  
  return 
$items;
}

/**
 * Form with languages to select for updating
 */
function language_update_languages_update_form() {
  include_once 
'includes/locale.inc';
  
  
$predefined language_update_prepare_predefined_list();
  
$form = array();
  
$form['language list']['langcode'] = array('#type' => 'select',
    
'#title' => t('Language name'),
    
'#default_value' => key($predefined),
    
'#options' => $predefined,
    
'#description' => t('Select the desired language and click the <em>Update language</em> button.'),
  );
  
$form['language list']['submit'] = array('#type' => 'submit''#value' => t('Update language'));
  return 
$form;
}

/**
 * Submit function
 */
function language_update_languages_update_form_submit($form$form_values) { 
  if (
$batch locale_batch_by_language($form_values['values']['langcode'], '_locale_batch_language_finished')) {
    
batch_set($batch);
  }
}

/**
 * Prepares the language code list for a select form item with only the unsupported ones
 */
function language_update_prepare_predefined_list() {
  
$languages language_list('enabled');
  
$predefined _locale_get_predefined_list();
  
  foreach (
$predefined as $key => $value) {
    if (!isset(
$languages[1][$key]) || $key == 'en') {
      unset(
$predefined[$key]);
      continue;
    }
    
// Include native name in output, if possible
    
if (count($value) > 1) {
      
$tname t($value[0]);
      
$predefined[$key] = ($tname == $value[1]) ? $tname "$tname ($value[1])";
    }
    else {
      
$predefined[$key] = t($value[0]);
    }
  }
  
asort($predefined);
  return 
$predefined;
}

?>

Vous pouvez télécharger l'extrait en tant que module. Le module est trop petit pour y contribuer. Il devrait devenir une caractéristique dans le module de localisation noyau.