Language Switcher / Sprachumschalter anpassen (Modul I18N)
am 26.02.2009 - 19:01 Uhr in
Hallo,
ich bin hier solangsam am Verzweifeln beim Versuch den Sprachumschalter auf der Seite ganz oben zu plazieren. Ich arbeite mit der Version 6.9 und dem Theme "A3 Atlantis".
Die Vorgeschichte (die sich kürzer liest als sie war):
- Modul I18N ist installiert und funktioniert soweit ich beurteilen kann
- Die Einarbeitung war nicht einfach, denn die Doku auf drupal.org ist aktuell zerschossen (siehe http://drupal.org/node/133977)
- Deshalb bin ich auch nicht sicher, ob mir ein Block von I18N fehlt. Man liest von zwei Blöcken: a) Language Switcher (Admin-Oberfläche / aus dem Core-Modul?) b) Content Switcher ... ich finde bei mir nur Block a :( ... fehlt hier ein Block?
- Für den Sprachumschalter habe ich eine neue Region definiert (top_header)
- Die Region funktioniert mit Dummy-Text. Angepasst hierfür habe ich CSS und eine neue "block-top_header.tpl.php" im Theme eingestellt
- Durch den PHP Code des folgenden Foren-Beitrags kann ich nun auch schon den Sprachumschalter anzeigen lassen: http://drupal.org/node/242646#comment-832367
Und nun zu meinem eigentlichen Problem an dem ich einfach nicht weiterkomme. :(
Nun möchte ich noch die HTML "li-Elemente" richtig anpassen. An die komme ich jedoch einfach nicht ran. Die li´s sollen NICHT als Aufzählung sondern die Sprachen nebeneinander (also: Englisch Español) darstellen, sprich "display: inline". Bin nach Stunden rumprobieren mit meinem Latein am Ende. Wahrscheinlich übersehe ich was ganz einfaches!?
Weitere Hintergrundinfos
Seht es euch an auf meinem Testsystem: http://wp1133270.wp171.webpack.hosteurope.de/drupal6
(Gerade ist mir noch aufgefallen, dass man im IE den Sprachumschalter oben rechts überhaupt nicht sieht. Im Firefox ist er zu sehen. Woran kann das nun wieder liegen??? Wahrscheinlich durch mein rum-experimentiertes CSS)
Das PHP-Skript vom Block "Custom language switcher" (1:1 übernommen aus dem o.g. Forenbeitrag)
<?php
// this is copy&paste from locale_block in locale.module
$languages = language_list('enabled');
$links = array();
foreach ($languages[1] as $language) {
if ($language->language != $current) {
$links[$language->language] = array(
'href' => $_GET['q'],
'title' => $language->native,
'language' => $language,
'attributes' => array('class' => 'language-link'),
);
}
}
// this adds the real paths, i.e. if we are on a german page,
// the british flag will point to en/english_alias instead of
// en/node_with_german_content
translation_translation_link_alter($links, $_GET['q']);
// This one adds extended languages, i.e. those that are not enabled.
// Disable if you want only flags for enabled languages.
i18n_translation_link_alter($links, $_GET['q']);
// now add or replace text links by flags, according to your i18n settings.
if (function_exists('languageicons_translation_link_alter'))
languageicons_translation_link_alter($links, $_GET['q']);
// Or do your own stuff, e.g. set the flags and no lang names,
// no matter what the i18n icon settings say.
if ($icon = theme('languageicons_icon', $language, NULL)) {
$links[$language->language]['title'] = theme('languageicons_place', $link['title'], $icon);
$links[$language->language]['html'] = TRUE;
}
// remove the current language again. We cannot do that
// earlier because i18n_translation_link_alter would add it
// again, thinking it was an extendeg language because it
// was not yet contained in $links. If you don't use
// i18n_translation_link_alter, you can also make a case distinction
// in the foreach loop
$current = i18n_get_lang();
unset($links[$current]);
// format as you like, e.g.
echo theme('links', $links, array());
?>
style.css (Auszug):
#top-header {
position: absolute;
top: 0px;
left: 40px;
width: 700px;
height: 20px;
margin: 0px;
padding: 3px;
text-align: right;
font-size: 10px;
}
#top-header ul li a li.first li.last li.en li.es li.de {
margin: 0px;
padding: 3px;
display: inline;
list-style: none;
}
Beispiel generiertes HTML (Auszug):
<div id="top-header">
<ul>
<li class="en first"><a href="/drupal6/en/home" class="language-link">English</a></li>
<li class="es last"><a href="/drupal6/es/homa" class="language-link">Español</a></li>
</ul>
</div>
Bitte um Hilfe! Gerne reiche ich auch noch weitere Hintergrundinfos wenn nötig nach.
Danke :)
- Anmelden oder Registrieren um Kommentare zu schreiben
hat sich das problem
am 27.02.2009 - 00:38 Uhr
hat sich das problem erledigt?
ansonsten wärs mit
float:left
z.b. gegangen... ;-)
noch n tip:
modul: languageicons
dann kannst du statt dem wort die fähnchen einblenden... sieht auch ganz hübsch aus find ich... ;-)
grüße
-------------------------------------------------
arguing on the internet is like competing in the special olympics
- even if you win, you are still retarded.
-------------------------------------------------
arguing on the internet is like competing in the special olympics
- even if you win, you are still retarded.
Problem erledigt! Kleinigkeit bleibt noch
am 27.02.2009 - 01:12 Uhr
hat sich das problem erledigt?
Ja. Trotzdem vielen Dank für den schnellen Feedback. Es waren dann tatsächlich nur noch ein paar Feinheiten im CSS-File.
Eine Kleinigkeit bleibt noch zurück, vor allem dann wenn man (noch) nicht alle Inhalte übersetzt hat.
Die Sprach-Links werden auch angezeigt, wenn eine Seite (bspw. intern node1) bisher noch keine Übersetzungen hat. Klickt man dann auf eine Sprache (bspw. en) kommt man auf "/en/node/1". Inhalt ist natürlich immer noch deutsch. Adminoberfläche wird auf englisch umgestellt.
Für mich ist das Verhalten noch nicht ganz klar. Wenn ich es auf die Schnelle richtig gesehen habe, gibt es hierzu einen Thread auf drupal.org inkl. erstem Lösungsversuch (hack):
http://drupal.org/node/250124
Der Vollständigkeit halber anbei der funktionierende CSS-Auszug:
#top-header {
top: 0;
left: 0;
height: 20px;
width: 700px;
margin: 0px;
padding: 6px 0 0 0;
text-align: right;
font-size: 10px;
}
#top-header ul {
margin: 0;
padding: 0;
display: inline;
}
#top-header li {
margin: 0;
padding: 0;
display: inline;
font-size: 10px;
}
#top-header a {
text-decoration: none;
color: #fff;
}
#top-header a:hover { text-decoration: underline;}
also mit den sprachen ist
am 27.02.2009 - 09:03 Uhr
also mit den sprachen ist das bissle kompliziert, das hab ich auch schon gemerkt ;-)
aber wiedrum auch ganz logisch... ;-)
wenn du für ne seite noch keine übersetzung angelegt hast, dann wird halt die version angezeigt, die schon da is... in dem fall halt die un-übersetzte...
und dein css:
soll jetzt nicht klugscheisserisch rüberkommen, aber du könntest teile von deinem css etwas "komprimieren" was es dan natürlich schlanker und übersichtlicher macht. macht jetzt in dem fall nicht viel, aber wenn dus öfter in der css machst, dann bringts schon bissle was...
so z.b.
<---- Code alt ---->
#top-header ul {
margin: 0;
padding: 0;
display: inline;
}
#top-header li {
margin: 0;
padding: 0;
display: inline;
font-size: 10px;
}
<---- Code neu ---->
#top-header ul,
#top-header li {
margin: 0;
padding: 0;
display: inline;
}
#top-header li {
font-size: 10px;
}
spart hier zwar nur 3 zeilen, aber immerhin... ;-)
wichtig is das " , " nach dem ersten #top-header. sonst gehts nicht.
sprich wenn klassen oder ids sachen gemeinsam haben, kannst du sie durch ein " , " getrennt aufzählen und musst den kram nur einmal hinschreiben...
naja... so far... schön dass es geklappt hat :-)
grüße
-------------------------------------------------
arguing on the internet is like competing in the special olympics
- even if you win, you are still retarded.
-------------------------------------------------
arguing on the internet is like competing in the special olympics
- even if you win, you are still retarded.
Nicht übersetzte Seiten
am 27.02.2009 - 10:36 Uhr
wenn du für ne seite noch keine übersetzung angelegt hast, dann wird halt die version angezeigt, die schon da is... in dem fall halt die un-übersetzte...
Naja das ist für mich nur mehr oder weniger nachvollziehbar. Problematisch bleibt es ... folgende Anmerkungen hierzu:
Den Punkt finde ich deshalb störend, weil man die Seitenbesucher verwirrt und sich dadurch auch die Statistiken verhaut (wenn man saubere URLs nutzt)
Vielleicht hat ja jemand eine Lösung oder eine Optimierung für das o.g. PHP-Skript!?
soll jetzt nicht klugscheisserisch rüberkommen, aber du könntest teile von deinem css etwas "komprimieren" was es dan natürlich schlanker und übersichtlicher macht. macht jetzt in dem fall nicht viel, aber wenn dus öfter in der css machst, dann bringts schon bissle was...
Nur von Klugscheissern ;-) kann ich was lernen. Vielen Dank für den Hinweis!
eine einfache lösung wäre
am 27.02.2009 - 10:57 Uhr
eine einfache lösung wäre z.b. die unübersetzten seiten "proforma" zu übersetzen.
d.h. wenn du als admin drin bist, gehst du auf die seite und klickst "übersetzen".
den inhalt einfach lassen, nur eine entsprechende URL anlegen.
z.b. "home" anstatt "startseite" oder so ähnlich halt...
dann hast du zwar keine übersetzte seite in dem sinn, aber auf jeden fall ne saubere url.
überhaupt ist dieses übersetzungsgedöns ne kunst für sich bis man das mal einigermaßen auf der kette hat... ;-)
ergänzend würd ich dir noch raten trenne die sprachen.
soll heissen: bau für jede sprache ein eigenes menü in einem eigenen block.
das macht es zumindest aus meinen augen sehr viel strukturierter als wenn du jetzt alle menüpunkte in einem menü hast und dauernd schauen musst "äääh... blend ich den jetzt bei einer sprache ein oder bei beiden oder wie..."
ich hab auch 2 menüs gemacht (bzw. bin dran), und das is doch irgendwie klarer. is zwar arbeit, aber ich finds besser so.. ;-)
-------------------------------------------------
arguing on the internet is like competing in the special olympics
- even if you win, you are still retarded.
-------------------------------------------------
arguing on the internet is like competing in the special olympics
- even if you win, you are still retarded.