Bagaimana cara mengubah perilaku atau tampilan pengalih bahasa?


8

Pada halaman yang diterjemahkan, pengalih bahasa menunjukkan tautan ke bahasa yang diterjemahkan, tetapi untuk bahasa yang tidak diterjemahkan tidak ada tautan, tetapi nama bahasa tanpa tautan. Dalam hal ini, bahwa tidak ada simpul yang sesuai dalam bahasa yang diberikan, saya ingin pengalih bahasa untuk menampilkan tautan ke halaman depan.

Bagaimana saya bisa menyelesaikan perilaku ini? Terima kasih banyak!


Anda dapat melakukannya hanya dengan menggunakan halaman, atau templat simpul dan aturan CSS.
topcode4u

Jawaban:


13

Tambahkan selanjutnya ke file template.php tema Anda:

<?php 
  function YOURTHEMENAME_links__locale_block($variables) {
    foreach($variables['links'] as $key => $lang) {
      if (isset($lang['attributes']['class']) && in_array('locale-untranslated', $lang['attributes']['class'])) {
        // Set here any page link.
        $variables['links'][$key]['href'] = '<front>';
      }
    }
    return theme_links($variables);
  }

Terima kasih atas jawaban Anda. Apakah tautan <front> ini dilokalkan?
jumper

1
Halaman depan / beranda ini akan mengarah ke halaman depan bahasa yang dipilih saat ini.
Nikit

Terima kasih lagi, saya pikir solusi Anda jauh lebih baik daripada yang saya akhirnya gunakan :)
jumper


1

Pada akhirnya saya menggunakan pendekatan ini.

function YOURTHEME_language_switch_links_alter(array &$links, $type, $path) {
  $language_type = variable_get('translation_language_type', LANGUAGE_TYPE_INTERFACE);

  if ($type == $language_type && preg_match("!^node/(\d+)(/.+|)!", $path, $matches)) {
    $node = node_load((int) $matches[1]);

    if (empty($node->tnid)) {
      // If the node cannot be found nothing needs to be done. If it does not
      // have translations it might be a language neutral node, in which case we
      // must leave the language switch links unaltered. This is true also for
      // nodes not having translation support enabled.
      if (empty($node) || entity_language('node', $node) == LANGUAGE_NONE || !translation_supported_type($node->type)) {
        return;
      }
      $langcode = entity_language('node', $node);
      $translations = array($langcode => $node);
    }
    else {
      $translations = translation_node_get_translations($node->tnid);
    }

    foreach ($links as $langcode => $link) {
      if (isset($translations[$langcode]) && $translations[$langcode]->status) {
        // Translation in a different node.
        $links[$langcode]['href'] = 'node/' . $translations[$langcode]->nid . $matches[2];
      }
      else {
        // No translation in this language, or no permission to view.
        $links[$langcode]['href'] = '<front>';
      }
    }
  }
}

Yang menggantikan fragmen kode ini dalam modul Terjemahan asli.

  else {
    // No translation in this language, or no permission to view.
    unset($links[$langcode]['href']);
    $links[$langcode]['attributes']['class'][] = 'locale-untranslated';

Saya cukup yakin solusi lain lebih indah, tetapi solusi ini juga berfungsi.


1
Solusi pertama tidak bekerja untuk saya ... Yang ini berfungsi sebagai pesona! Terima kasih.
Carles Estevadeordal
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.