array( 'arguments' => array('language' => NULL, 'title' => NULL), ), 'languageicons_place' => array( 'arguments' => array('text' => NULL, 'icon' => NULL, 'separator' => ' '), ), ); } /** * Implementation of hook_help(). */ function languageicons_help($section = 'admin/help#languageicons' ) { switch ($section) { case 'admin/help#languageicons' : $output = '

'.t('This module manages language icons for multilingual sites:').'

'; $output .= ''; $output .= '

'. t('For more information please read the on-line help pages.', array('@i18n' =>'http://drupal.org/node/31631')) .'

'; return $output; case 'admin/settings/languageicons': $output .= '

'.t('To enable multilingual support for specific content types go to !configure_content_types.', array('!configure_content_types' => l(t('configure content types'), 'admin/content/types'), )).'

'; return $output; } } /** * Implementation of hook_menu(). */ function languageicons_menu() { $items['admin/settings/language/configure/options'] = array( 'title' => 'Configure', 'weight' => 10, 'type' => MENU_DEFAULT_LOCAL_TASK, 'access arguments' => array('administer languages'), ); $items['admin/settings/language/configure/icons'] = array( 'title' => 'Icons', 'page callback' => 'drupal_get_form', 'page arguments' => array('languageicons_admin_settings'), 'weight' => 10, 'type' => MENU_LOCAL_TASK, 'access arguments' => array('administer languages'), ); return $items; } /** * Implementation of hook_alter_translation_link(). * * Adds language icons to normal translation links. */ function languageicons_translation_link_alter(&$links, $path) { if (variable_get('languageicons_show_block', 1)) { foreach (array_keys($links) as $langcode) { languageicons_link_add($links[$langcode]); } } } /** * Implementation of hook_link_alter(). * * Adds language icons to node links. */ function languageicons_link_alter(&$links, $node) { if (variable_get('languageicons_show_node', 1) && $node->tnid && $translations = module_invoke('translation', 'node_get_translations', $node->tnid)) { $languages = language_list(); foreach ($translations as $langcode => $translation) { $index = 'node_translation_'.$langcode; if (!empty($links[$index])) { languageicons_link_add($links[$index]); } } } } /** * Add language icon to link * * The language icon may be a different language as the destination page, can be passed in 'language_icon' */ function languageicons_link_add(&$link, $title = NULL) { $language = isset($link['language_icon']) ? $link['language_icon'] : $link['language']; $title = $title ? $title : $link['title']; if ($icon = theme('languageicons_icon', $language, $title)) { $link['title'] = theme('languageicons_place', $link['title'], $icon); $link['html'] = TRUE; } } /** * Form builder function. * */ function languageicons_admin_settings() { $form['show'] = array( '#type' => 'fieldset', '#title' => t('Add language icons'), '#description' => t('Link types to add language icons.'), ); $form['show']['languageicons_show_node'] = array( '#type' => 'checkbox', '#title' => t('Node links'), '#default_value' => variable_get('languageicons_show_node', 1), ); $form['show']['languageicons_show_block'] = array( '#type' => 'checkbox', '#title' => t('Language switcher block'), '#default_value' => variable_get('languageicons_show_block', 1), ); $form['languageicons_placement'] = array( '#type' => 'radios', '#title' => t('Icon placement'), '#options' => array('before' => t('Before'), 'after' => t('After'), 'replace' => t('Replace')), '#default_value' => variable_get('languageicons_placement', 'before'), '#description' => t('Where to display the icon, relative to the link title.'), ); $form['i18n_icon_path'] = array( '#type' => 'textfield', '#title' => t('Icons file path'), '#default_value' => variable_get('i18n_icon_path', drupal_get_path('module', 'i18n').'/flags/*.png'), '#size' => 70, '#maxlength' => 180, '#description' => t('Path for language icons, relative to Drupal installation. \'*\' is a placeholder for language code.'), ); $form['i18n_icon_size'] = array( '#type' => 'textfield', '#title' => t('Image size'), '#default_value' => variable_get('i18n_icon_size', '16x12'), '#size' => 10, '#maxlength' => 10, '#description' => t('Image size for language icons, in the form "width x height".'), ); return system_settings_form($form); } /** * Theme language icon * * This function can be overridden for no language icons */ function theme_languageicons_icon($language, $title = NULL){ if ($path = variable_get('i18n_icon_path', drupal_get_path('module', 'i18n').'/flags/*.png')) { $src = base_path().str_replace('*', $language->language, $path); $title = $title ? $title : $language->native; $attribs = array('class' => 'language-icon', 'alt' => $title); if ($size = variable_get('i18n_icon_size', '16x12')) { list($width, $height) = explode('x', $size); $attribs += array('width' => $width, 'height' => $height); } return ""; } } /** * Theme language icon and text */ function theme_languageicons_place($text, $icon, $separator = ' ') { switch(variable_get('languageicons_placement', 'before')) { case 'after': return $text . $separator . $icon; case 'replace': return $icon; case 'before': default: return $icon . $separator . $text; } }