Làm thế nào để thay đổi hành vi hoặc hiển thị của trình chuyển đổi ngôn ngữ?


8

Trên các trang dịch, trình chuyển đổi ngôn ngữ hiển thị các liên kết đến các ngôn ngữ được dịch, nhưng đối với các ngôn ngữ chưa được dịch, không có liên kết, nhưng tên của ngôn ngữ không có liên kết. Trong trường hợp, không có nút tương ứng trong một ngôn ngữ nhất định, tôi muốn trình chuyển đổi ngôn ngữ hiển thị một liên kết đến trang trước thay thế.

Làm thế nào tôi có thể thực hiện hành vi này? Cảm ơn rât nhiều!


Bạn có thể làm điều đó chỉ bằng cách sử dụng trang, hoặc các mẫu nút và quy tắc CSS.
topcode4u

Câu trả lời:


13

Thêm tiếp theo vào tệp template.php của chủ đề của bạn:

<?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);
  }

Cảm ơn bạn vì câu trả lời. Có phải các liên kết <front> đã được bản địa hóa không?
người nhảy

1
Trang chủ / trang chủ này sẽ trỏ đến trang trước ngôn ngữ được chọn hiện tại.
Nikit

Cảm ơn bạn một lần nữa, tôi nghĩ rằng giải pháp của bạn tốt hơn rất nhiều so với giải pháp tôi đã sử dụng :)
jumper


1

Cuối cùng tôi đã sử dụng phương pháp này.

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>';
      }
    }
  }
}

Mà thay thế đoạn mã này trong mô-đun dịch gốc.

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

Tôi khá chắc chắn rằng giải pháp khác đẹp hơn, nhưng giải pháp này cũng đang hoạt động.


1
Giải pháp đầu tiên không hiệu quả với tôi ... Cái này có tác dụng như bùa mê! Cám ơn.
Carles Estevadeordal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.