You are here

translation_table.module in Translation table 6

Same filename and directory in other branches
  1. 7 translation_table.module

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.

File

translation_table.module
View source
<?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/build/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/build/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(
      'arguments' => array(
        'form' => NULL,
      ),
      'file' => 'includes/theme.inc',
    ),
    'translation_table_filter' => array(
      'arguments' => array(
        'form' => NULL,
      ),
      '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("./{$info['path']}/{$file}")) {
      require_once "./{$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.0) {
        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',
  );
}

Functions

Namesort descending Description
translation_table_get_form Menu callback;
translation_table_get_module_apis Get a list of modules that support the current translation_table API.
translation_table_menu Implementation of hook_menu().
translation_table_module_include Load translation table files on behalf of modules.
translation_table_theme Implementation of hook_theme().
translation_table_translation_table_api Implementation of hook_translation_table_api().