localizer - Sprachauswahl Darstellung über Drop Down
Eingetragen von sebastianv (10)
am 02.04.2007 - 15:31 Uhr in
am 02.04.2007 - 15:31 Uhr in
Hallo Community,
ich möchte eine Seite erstellen wo es sehr viele unterschiedliche sprachen geben wird.
Aus diesem Grund möchte ich die Sprachauswahl ungern über eine Liste mit Links realisieren, sondern hätte die zur Auswahl stehenden Sprachen gerne in einem DropDown (PullDown?) Menü.
Habt ihr eine Idee wie ich dies so anpassen kann?
Für die mehrsprachigkeit nutze ich derzeit das Modul localizer auf der 4er Drupal Versionmit welchem ich sehr zufrieden bin.
Freu mich auf eure Antworten.
Danke
- Anmelden oder Registrieren um Kommentare zu schreiben
Mit dem Modul localizer habe
am 02.04.2007 - 20:54 Uhr
Mit dem Modul localizer habe ich nocht nicht gearbeitet.
Nachfolgend rede ich von der Verwendung eines PHP Template Theme.
Blabla:
Ich koennte mir vorstellen das die Ausgabe der Umschaltung der Sprachen gethemed werden kann. Was durchaus einen hohen Sinn macht. Sehe Dir also im localizer Modul die "function theme_"... an. Wenn ich richtig liege solltest Du fuendig werden.
Na und dann heisst es ein Template fuer einen Block anlegen. Fuer den Block "block-localizer". In diesem Template kannst Du die Liste in ein Dropdown umwandeln koennen.
Konkret:
Bitte hier weiterlesen: Customizing the ui locale switching block
Dort wird aber nur lapidar gesagt "In a block with input format PHP add this code". Wo das nun sein soll bleibt offen.
So hab ich es bisher gemacht:
Der Ansatz an dieser Stelle ist ein Blocktemplate. Es gibt eine "block.tpl.php". In 5.x so:
<div id="block-<?php print $block->module .'-'. $block->delta; ?>" class="block block-<?php print $block->module ?>">
<?php if ($block->subject): ?>
<h2><?php print $block->subject ?></h2>
<?php endif;?>
<div class="content"><?php print $block->content ?></div>
</div>
Hier fuegst Du eine Erweiterung ein in der Du in Abhaengigkeit von einem bestimmten $block->delta eine eigene Templatedatei mit beliebigem Namen ansprichst.
Sehe Dir den HTML-Code des normalen localizer Menublockes an. Vermutlich etwa so:
<div class="block block-localizer" id="block-localizer-0">
<h2 class="title">Language</h2>
<div class="content"><div class="item-list"><ul><li><a href="/switchuilocale/en?destination=home" title="English"><img src="/modules/localizer/flags/en.png" class="localizer-flag" alt="English" height="12" width="16"> English</a></li><li><a href="/switchuilocale/it?destination=it%2Fhome" title="Italiano"><img src="/modules/localizer/flags/it.png" class="localizer-flag" alt="Italiano" height="12" width="16"> Italiano</a></li></ul></div></div>
</div>
In diesem Beispiel ist das Block-Delta: 0
Damit bastelst Du im "block.tpl.php" nun die Abfrage. Etwa so:
<?php //$Id: block.tpl.php, v 1.1 2007/04/02 quiptime Exp $
if ( $block->module == 'block-localizer' && $block->delta == '0' ) {
include 'block-languages.tpl.php';
return; }
?>
/* Hier der normale Blockcode */
<div id="block-<?php print $block->module .'-'. $block->delta; ?>" class="block block-<?php print $block->module ?>">
<?php if ($block->subject): ?>
<h2><?php print $block->subject ?></h2>
<?php endif;?>
<div class="content"><?php print $block->content ?></div>
</div>
"block-languages.tpl.php" ist der selbst gewaehlte Name des Template. In dieses Template kommt der normale Code aus "block.tpl.php" rein.
An dieser Stelle ist aber noch nicht der Zusammenhang mit dem Code aus dem obigen Link hergestellt.
Das Template "block-languages.tpl.php" koennte mit dem Code aus dem obigen Link so aussehen:
<?php //$Id: block-languages.tpl.php, v 1.0 2007/04/02 quiptime Exp $
$languages=localizer_block_switchuilocale_links(variable_get('localizer_switchblock_showflags', TRUE), variable_get('localizer_switchblock_showlangname',TRUE), variable_get('localizer_switchblock_flagseparator', ' ', FALSE))
?>
<div id="block-<?php print $block->module .'-'. $block->delta; ?>" class="block block-<?php print $block->module ?>">
<?php if ($block->subject): ?>
<h2><?php print $block->subject ?></h2>
<?php endif;?>
<div class="content">
<?php
echo '<ul>';
foreach($languages as $i=>$link) {
echo '<li>' . $link . '</li>';
}
echo '</ul>';
?>
</div>
</div>
Nun muss die normale Listenausgabe
echo '<ul>';
foreach($languages as $i=>$link) {
echo '<li>' . $link . '</li>';
}
echo '</ul>';
noch in ein Dropdownmenu geaendert werden.
PS
@sebastianv
Den Code hier habe ich nicht getestet. Ich habe ihn nur auf die Schnelle nach meiner Logik zusammengestellt um Dir einen Loesungsweg aufzuzeigen.
-------------
quiptime
Da geht noch was.
Selected-Item in Drop-Down Menü Problem
am 03.08.2007 - 17:26 Uhr
Die Sprachauswahl mit dem Modul Localizer habe ich über Auswahllisten per Drop-Down Menü gelöst.
Das Problem ist, dass ich gerne die ausgewählte Sprache als "selected" markiert haben möchte, was mit meiner Lösung nicht geht.
Gibt es eine Möglichkeit mit der Form-API so was hinzu bekommen?
Da ich wenig Ahnung von PHP habe, würde ich auf etwas Unterstützung freuen.
Im Prinzip möchte ich die Sprachauswahl genau so wie auf der Webseite von www.mozilla.com im Footer.
Wie ich gelesen habe wurde die Mozilla auch mit Drupal umgesetzt.
Das müsste sich machen
am 03.08.2007 - 18:28 Uhr
Das müsste sich machen lassen, wie ist denn dein bisheriger Code?
gruß pebosi
gruß pebosi
--
https://pebosi.net
Mein Code habe ich direkt in
am 03.08.2007 - 21:47 Uhr
Mein Code habe ich direkt in page.tpl.php eingebunden und sieht folgender Maßen aus:
<form id="lang_form" dir="ltr" method="get" action="">
<label for="locale">Sprache wählen:</label>
<select id="locale" name="locale" dir="ltr" onchange="this.form.submit()">
<option selected="selected">Deutsch</option>
<option value="de" >Deutsch</option>
<option value="en" >English</option>
<option value="it" >Italiano</option>
</select>
</form>
Wie schon erwähnt, sollte die Option selected="selected" dynamisch sein. Moment ist das fest.
Im Moment habe ich keine Ahnung, was man da machen kann...
Irgendwie muss Mozilla, dass ja programmiert haben. Ich frage mich nur wie :)
Schaut euch den Quelltext
am 03.08.2007 - 22:02 Uhr
Schaut euch den Quelltext doch einfach an! bzw die ggf css attribute!
<select id="flang" name="flang" dir="ltr" onchange="this.form.submit()"> <option value="ca" >Català</option>
<option value="cs" >Čeština</option>
<option value="da" >Dansk</option>
<option value="de" >Deutsch</option>
<option value="el" >Ελληνικά</option>
<option value="es" >Español</option>
<option value="eu" >Euskara</option>
<option value="en-GB" >English (British)</option>
<option value="en-US" selected="selected">English (US)</option>
<option value="fr" >Français</option>
<option value="he" >עברית</option>
<option value="it" >Italiano</option>
<option value="lt" >Lietuvių</option>
<option value="hu" >Magyar</option>
<option value="nl" >Nederlands</option>
<option value="no" >Norsk bokmål</option>
<option value="pl" >Polski</option>
<option value="pt-BR" >Português (do Brasil)</option>
<option value="pt-PT" >Português (Europeu)</option>
<option value="ro" >Română</option>
<option value="ru" >Русский</option>
<option value="sk" >Slovenský</option>
<option value="fi" >Suomi</option>
<option value="tr" >Türkçe</option>
<option value="zh-CN" >中文 (简体)</option>
<option value="ja" >日本語</option>
<option value="ko" >한국어</option>
<option value="zh-TW" >正體中文 (繁體)</option>
</select>
http://kochazubi.net
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.
Den Queltext habe ich mir
am 03.08.2007 - 22:13 Uhr
Den Queltext habe ich mir schon angeschaut. Hilf mir aber nicht weiter. Ich weiß nicht, wie diese Zeile dynamisch gesetzt wird:
<option value="en-US" selected="selected">English (US)</option>
Dort befindet man sich ja gerade auf der englischen Seite. Wenn man auf die deutsche Seite geht, wird dann die dt. option auf "selected" gesetzt.
Hier mal ein Ansatz mit der
am 04.08.2007 - 12:21 Uhr
Hier mal ein Ansatz mit der Forms API:
<?php
function lang_form () {
$options_lang = array (
'de' => 'Deutsch',
'en' => 'Englisch',
'it' => 'Italiano',
);
$form['lang_form'] = array(
'#type' => 'select',
'#title' => 'Sprache wählen',
'#default_value' => (arg(0) ? arg(0) : 'de'),
'#options' => $options_lang,
);
return $form;
}
print drupal_get_form('lang_form');
?>
gruß pebosi
gruß pebosi
--
https://pebosi.net
DropDown Menü select für 4.7
am 04.08.2007 - 15:52 Uhr
Hi peposi,
danke für Deinen Lösungs-Ansatz. Ich beschäftige mich gerade etwas mit der forms api.
Wie ich festgestellt habe, funktioniert Dein Code in Drupal 5.0 aber nicht in Drupal 4.7.
Die Funktion drupal_get_form in 4.7 wird etwas anders aufgerufen. So sieht der Code jetzt für 4.7 aus:
<?php
$options_lang = array (
'de' => 'Deutsch',
'en' => 'Englisch',
'it' => 'Italiano',
);
$form['testform'] = array(
'#type' => 'select',
'#title' => 'Sprache wählen',
'#default_value' => (arg(0) ? arg(0) : 'de'),
'#options' => $options_lang,
);
$output = drupal_get_form('testform', $form);
print $output;
?>
Funktioniert soweit gut. Ich kann die Sprachen auswählen. Wie bekomme ich es aber hin, dass die Auswahl auch per get-Methode gesendet wird. Damit ich die erforderlichen Parameter ?locale=de in der URL erhalte.
Schönen Gruß,
bit7
Laut
am 04.08.2007 - 16:10 Uhr
Laut http://api.drupal.org/api/function/drupal_get_form/4.7 musst du als ersten Paramenter "NULL" übergeben für "GET"
gruß pebosi
gruß pebosi
--
https://pebosi.net
Wie sieht der Aufruf-Code
am 04.08.2007 - 16:27 Uhr
Wie sieht der Aufruf-Code den konkret aus peposi? Sorry, dass ich auch hier nochmal nachfrage.
Das mit den Callback habe ich noch nicht ganz verstanden...
probiers mal so: $output =
am 04.08.2007 - 16:45 Uhr
probiers mal so:
$output = drupal_get_form(NULL, $form);
gruß pebosi
gruß pebosi
--
https://pebosi.net
Die mozilla Lösung
am 28.10.2007 - 12:47 Uhr
Ganz unten im Footer Bereich:
http://svn.mozilla.org/projects/kubla/trunk/sites/all/themes/rustico/pag...
und demnächst auch auf: http://extensions.services.openoffice.org/ :-)
Gruss
Thorsten
Super Idee dort
am 28.10.2007 - 23:01 Uhr
Super Idee dort reinzuschauen. Das Template von Mozilla werde ich mir mal genauer anschauen. Danke für den Link.