如何更改语言切换器的行为或显示?


8

在已翻译的页面上,语言切换器显示了已翻译语言的链接,但是对于未翻译的语言,则没有链接,但是语言名称没有链接。在这种情况下,没有给定语言的相应节点,我希望语言切换器显示指向首页的链接。

我该如何完成这项行为?非常感谢你!


您可以仅使用页面,节点模板和CSS规则来完成此操作。
topcode4u

Answers:


13

接下来将其添加到主题的template.php文件中:

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

谢谢您的回答。这些<front>链接是否已本地化?
跳线

1
该首页/首页将指向当前选择的语言首页。
Nikit

再次感谢您,我认为您的解决方案比我最终使用的解决方案好很多:)
跳线


1

最后,我使用了这种方法。

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

它将替换原始翻译模块中的此代码片段。

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

我很确定其他解决方案会更漂亮,但是该解决方案也可以正常工作。


1
第一个解决方案对我不起作用...这很吸引人!谢谢。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.