Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
// $Id$
/**
* @file
* Language icons
*
* Internationalization (i18n) package
*
* @author Jose A. Reyero, 2007
*
*/
/**
* Implementation of hook_theme()
*/
function languageicons_theme() {
return array(
'languageicons_icon' => 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 = '<p>'.t('This module manages language icons for multilingual sites:').'</p>';
$output .= '<ul>';
$output .= '<li>'.t('Automatically adds icons to language links').'</li>';
$output .= '<li>'.t('Provides related theme functions').'</li>';
$output .= '</ul>';
$output .= '<p>'. t('For more information please read the <a href="@i18n">on-line help pages</a>.', array('@i18n' =>'http://drupal.org/node/31631')) .'</p>';
return $output;
case 'admin/settings/languageicons':
$output .= '<p>'.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'), )).'</p>';
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,
);
$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,
);
return $items;
}
/**
* Implementation of hook_alter_translation_link().
*
* Adds language icons to normal translation links.
*/
function languageicons_translation_link_alter(&$links, $path) {
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 ($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;
}
}
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/**
* Form builder function.
*
*/
function languageicons_admin_settings() {
$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 "<img src=\"$src\" ".drupal_attributes($attribs)." />";
}
}
/**
* 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;
}
}