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.

