Вы здесь

Блок. Internationalization: исключение из списка текущего языка

Версия системы: 
Друпал 6
Друпал 5

Этот сниппет появился из-за желания исключить текущий язык из блока со списком языков. На сайте используются два языка, таким образом, с этим сниппетом в блоке выбора языков показывается только один из них: Nederlands или English. Блок который создаётся модулем Internationalization не позволяет сделать это. Этот сниппет представляет из себя слегка изменённую версию стандартного сниппета используемого модулем. Блок с этим сниппетом не будет включать активный в данный момент язык.

Друпал 5

<?php
// modified function
function excl_translation_get_links($path = '', $query = NULL, $names = NULL) {
 
$current = i18n_get_lang();
 
$names = $names ? $names : i18n_languages('native');
  foreach (
array_keys(i18n_supported_languages()) as $lang){
  if (
$lang != $current) {
   
$url = translation_url($path, $lang);
   
$links[]= theme('i18n_link', $names[$lang], i18n_path($url, $lang) , $lang, $query);
  }}
  return
$links;
}
$lang_list = theme('item_list', excl_translation_get_links($_GET['q'], empty($query) ? NULL : $query));
echo
$lang_list;
?>

Друпал 6

<?php
 
// this is copy&paste from locale_block in locale.module
 
$languages = language_list('enabled');
 
$links = array();
  foreach (
$languages[1] as $language) {
    if (
$language->language != $current) {
     
$links[$language->language] = array(
       
'href'       => $_GET['q'],
       
'title'      => $language->native,
       
'language'   => $language,
       
'attributes' => array('class' => 'language-link'),
      );
    }
  }

 
// this adds the real paths, i.e. if we are on a german page,
  // the british flag will point to en/english_alias instead of
  // en/node_with_german_content
 
translation_translation_link_alter($links, $_GET['q']);

 
// This one adds extended languages, i.e. those that are not enabled.
  // Disable if you want only flags for enabled languages.
 
i18n_translation_link_alter($links, $_GET['q']);

 
// now add or replace text links by flags, according to your i18n settings.
 
if (function_exists('languageicons_translation_link_alter'))
   
languageicons_translation_link_alter($links, $_GET['q']);

 
// Or do your own stuff, e.g. set the flags and no lang names,
  // no matter what the i18n icon settings say.
  //if ($icon = theme('languageicons_icon', $language, NULL)) {
  //   $links[$language->language]['title'] = theme('languageicons_place', $link['title'], $icon);
  //   $links[$language->language]['html'] = TRUE;        
  //}

  // remove the current language again. We cannot do that
  // earlier because i18n_translation_link_alter would add it
  // again, thinking it was an extendeg language because it
  // was not yet contained in $links. If you don't use
  // i18n_translation_link_alter, you can also make a case distinction
  // in the foreach loop
 
$current = i18n_get_lang();
  unset(
$links[$current]);

 
// format as you like, e.g.
 
echo theme('links', $links, array());
?>