Come modificare il comportamento o la visualizzazione del selettore di lingua?


8

Nelle pagine tradotte il selettore di lingua mostra i collegamenti alle lingue tradotte, ma per le lingue non tradotte non esiste alcun collegamento, ma il nome della lingua senza un collegamento. Nel caso in cui non esista un nodo corrispondente in una determinata lingua, vorrei che il selettore di lingua mostrasse un collegamento alla prima pagina.

Come posso realizzare questo comportamento? Grazie mille!


Puoi farlo semplicemente usando la pagina, o modelli di nodo e regole CSS.
topcode4u

Risposte:


13

Aggiungi il prossimo nel file template.php del tuo tema:

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

La ringrazio per la risposta. Questi collegamenti <front> sono quindi localizzati?
maglione

1
Questa pagina principale / home punterà alla pagina iniziale della lingua selezionata.
Nikit,

Grazie ancora, penso che la tua soluzione sia molto migliore di quella che ho finito per usare :)
jumper


1

Alla fine ho usato questo approccio.

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

Che sostituisce questo frammento di codice nel modulo di traduzione originale.

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

Sono abbastanza sicuro che l'altra soluzione sia più bella, ma questa soluzione funziona anche.


1
La prima soluzione non ha funzionato per me ... Questa ha funzionato come un fascino! Grazie.
Carles Estevadeordal,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.