| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 | <?php/** * @file * Translation table module * * UI for quick translation of user submitted strings. * The i18n module allows the translation of different dynamic strings, but the * process is tedious. * * This module presents your taxonomy terms, menu items and other text groups in * a table, and each language has a corresponding column. Just fill out the * translations and click Save. *//** * Implementation of hook_menu(). */function translation_table_menu() {  $items = array();  // Get the different translation tables.  foreach (module_list() as $module) {    translation_table_module_include("$module.translation_table.inc");  }  $module_items = module_invoke_all('translation_table_data');  foreach ($module_items as $key => $module_item) {    if (isset($module_item['form']) && isset($module_item['file'])) {      $items['admin/config/regional/translate/table/'. $key] = array(        'title' => isset($module_item['title']) ? $module_item['title'] : 'Unknown',        'description' => isset($module_item['description']) ? $module_item['description'] : '*',        'page callback' => 'translation_table_get_form',        'page arguments' => array($module_item['form']),        'access callback' => 'user_access',        'access arguments' => array('translate interface'),        'type' => MENU_LOCAL_TASK,        'file' => $module_item['file'],        'file path' => isset($module_item['file path']) ? $module_item['file path'] : NULL,      );    }  }  if (!empty($items)) {    // Modify the fist item to local task.    $first_key = key($items);    $items[$first_key]['weight'] = -10;    $items[$first_key]['type'] = MENU_DEFAULT_LOCAL_TASK;    $items['admin/config/regional/translate/table'] = array(      'title' => 'Translation table',      'description' => 'Edit translations',      'page callback' => 'translation_table_get_form',      'page arguments' => $items[$first_key]['page arguments'],      'access callback' => 'user_access',      'access arguments' => array('translate interface'),      'type' => MENU_LOCAL_TASK,      'file' => $items[$first_key]['file'],    );  }  return $items;}/** * Menu callback; */function translation_table_get_form($form_id) {  module_load_include('inc', 'translation_table', 'includes/admin');  return drupal_get_form($form_id);}/** * Implementation of hook_theme(). */function translation_table_theme() {  return array(    'translation_table' => array(      'render element' => 'form',      'file' => 'includes/theme.inc',    ),    'translation_table_filter' => array(      'render element' => 'form',      'file' => 'includes/theme.inc',    ),  );}/** * Load translation table files on behalf of modules. */function translation_table_module_include($file) {  foreach (translation_table_get_module_apis() as $module => $info) {    if (file_exists(DRUPAL_ROOT . "/$info[path]/$file")) {      require_once DRUPAL_ROOT . "/$info[path]/$file";    }  }}/** * Get a list of modules that support the current translation_table API. */function translation_table_get_module_apis() {  static $cache = NULL;  if (!isset($cache)) {    $cache = array();    foreach (module_implements('translation_table_api') as $module) {      $function = $module .'_translation_table_api';      $info = $function();      if (isset($info['api']) && $info['api'] == 1.000) {        if (!isset($info['path'])) {          $info['path'] = drupal_get_path('module', $module);        }        $cache[$module] = $info;      }    }  }  return $cache;}/** * Implementation of hook_translation_table_api(). */function translation_table_translation_table_api() {  return array(    'api' => 1,    'path' => drupal_get_path('module', 'translation_table') .'/modules',  );}
 |