Drupal hoe kunt u taal vertalingen updaten?

Posted by: 
Dominique De Cooman

Hoe kunt u vertalingen updaten met drupal? De core voert alleen vertalingen in wanneer u de taal instelt. Het ondersteund niet het updaten van talen.

Om te beginnen weten we allemaal hoe we taal vertalingen invoeren. We gaan naar http://drupal.org/project/Translations en kiezen onze vertaling en we kopiëren de bestanden in onze drupal core.
Vervolgens gaan we naar admin/settings/language/add en voegen een taal toe. Wanneer we een taal toevoegen detecteert en importeert drupal al deze pakketten. Dus u hoeft ze niet een voor een in te voeren.

Nu willen we onze vertalingen updaten? Voeren we ze een voor een in? Ik dacht het niet. Hier is een snippet die u kunt gebruiken om uw talen te updaten.

Het gebruikt dezelfde functies als de locale module om uw vertalingen in te voeren. Reeds bestaande vertalingen zullen niet overschreven worden.

Hier is de code:

Bepaal een menu hook, bouw een form dat uw ingestelde talen weergeeft en bouw een batch die alle lokale bestanden zal importeren.
Dat is alles.


<?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;
}

?>

U kunt de snippet als een module downloaden. De module is te klein om bij te dragen. Het zou een feature moeten worden in de core locale module.

Reactie toevoegen