Sprachumschalter: Nur die andere Sprache anzeigen
am 12.06.2012 - 19:36 Uhr in
Hallo,
ich glaube, die Lösung ist sehr einfach, aber ich stehe gerade irgendwie auf dem Schlauch. Bei einer Drupal 7.14-Seite habe ich die Mehrsprachigkeit aktiviert und konfiguriert. Es funktioniert auch alles wunderbar. Weiter ist vorgegeben, dass alle Beiträge übersetzt werden müssen.
Irgendwie schaffe ich es aber nicht, den Sprachumschalter so zu konfigurieren, dass er mir immer nur "die andere Sprache" anzeigt. Also, wenn beispielsweise der Besucher die Seite auf Deutsch betrachtet, soll der Sprachumschalter die englische Flagge anzeigen. Betrachtet der Besucher die Seite auf Englisch, soll der Sprachumschalter die englisch Sprache anzeigen. Ich bekomme das nicht hin :(
Weiter habe mithilfe des Moduls pathauto vorgegeben, dass die übersetzten Beiträge eine andere URL als die Quell-Beiträge erhalten. Daher kann ich es leider nicht so switchen, dass in der URL aus ".../de/..." einfach ".../en/..." wird bzw. umgekehrt.
Auch wichtig ist mir, dass über den Sprachumschalter dann zur gewünschten Übersetzung geswitcht werden kann.
Wer kann helfen oder verrät mir die Suchmaschinen-Schlagworte?
- Anmelden oder Registrieren um Kommentare zu schreiben
Du kannst das Ganze auch über
am 13.06.2012 - 08:23 Uhr
Du kannst das Ganze auch über CSS "machen".. Das i18n Modul schreibt dir im Normalfall die aktuelle Sprache in die body-Klassen.
Hier solltest du auf einer deutschen Seite die Klasse i18n-de finden.
Über folgenden Code-Snippet kannst du die aktuelle Sprache dann ausblenden:
.i18n-de .language-switcher-locale-url li.de {display:none}
.i18n-en .language-switcher-locale-url li.en {display:none}
Dies funktioniert in der Form aber nur, wenn du den Standard-Sprachumschalter von Drupal bzw. i18n verwendest.
Überprüfen kannst du das Ganze mit Firebug - hier siehst du genau, welche Klassen auf den Elementen liegen und kannst das Ganze so auch einfach testen..
SteffenR
http://www.twitter.com/_steffenr
Drupal-Initiative e.V.
Danke und Frage
am 15.05.2013 - 12:53 Uhr
Hat mir sehr geholfen
und gibt es noch eine Möglichkeit, das wenn eine Seite in der Sprache gar nicht gibt, die Sprach Auswahl ausgeblendet wird, anstelle durchgestrichen ?
Seite für nicht Vorhandene Seiten
am 17.05.2013 - 13:01 Uhr
Fals jemanden, gerne Sprachen Ausblenden will, wenn eine Seite nicht Existiert , kann man mit diesen CSS Befehl ausblenden lassen
.locale-untranslated{
display: none;
}
Gruss Stefano
Sprachumschalter
am 17.05.2013 - 13:40 Uhr
Falls Du bei Inhalten nur die Links zu Sprachen anzeigen willst, in die der Inhalt übersetzt wurde, geht das über diese Funktion (in einem eigenen kleinen Modul, welches ich der Einfachheit halber hier mal "DINGENS" genannt habe):
<?php
/**
* Implements hook_language_switch_links_alter().
*/
function DINGENS_language_switch_links_alter(array &$links, $type, $path) {
global $language;
$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]);
$content_language = entity_language('node', $node);
if ($content_language == LANGUAGE_NONE) {
$links = array();
return;
}
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) || $content_language == 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);
}
// Remove link to current language.
unset($links[$language->language]);
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.
unset($links[$langcode]);
}
}
}
}
?>
Damit werden Dir dann auch wirklich nur Links zu den verfügbaren Übersetzungen eines Inhalts angezeigt.
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Sprachumschalter
am 23.05.2013 - 09:52 Uhr
werde es mal austesten, im 2. release, aber hei Danke
Gruss Stefano