Anleitung: Sprachauswahl für User UND Gäste (mit Flaggen)

Started by Vargas, October 31, 2006, 09:14:11 AM

Previous topic - Next topic

Vargas

übrigens - Warum kann ich im anderen Forum (FAQs & Tutorials) kein Neues Thema erstellen?

Auf meinem Forum können auch Gäste mittels kleiner Flaggen ihre bevorzugte Sprache auswählen - wie das aussieht -> http://www.bookcrossing.at/forum.
Weiters hab ich etwa 10 verschiedene Themes zur auswahl für eingeloggte (Variationen vom standardCore und von YaBB-Themes)

Hier die Anleitung, wie ich das gemacht hab bei MIR - wie ihr das adaptiert für eure Zwecke kann ich nicht sagen, aber denke nicht, dass es Probleme gibt.


Sprachenauswahl über Flaggen für Gäste und Member
---------------------------------------------------

Man kann jede Sprache von der SMF-Startseite aus einfach aufrufen, indem man in die Adresse nach "/index.php" noch "?language=turkish" o. a. schreibt. (Bei bookcrossing.at ohne "-utf8" und generell immer genauso geschrieben, wie das Sprachverzeichnis am Server heißt).

Zum Ausprobieren:
http://web26.login-3.hoststar.at/forum/index.php?language=french
http://web26.login-3.hoststar.at/forum/index.php?language=spanish_es
etc.

Man kann auf dieselbe Art auch bei www.simplemachines.org in die Adresse schreiben, wenn man weiß, wie deren Sprachverzeichnisse heißen. Auch dort geht das Prinzip - und die Namen der Sprachen - aus dem Quellcode hervor.

Diese Art Links funktionieren - soferne die hinter dem Fragenzeichen und "language=" eingetragene Sprache in dem Forum installiert ist - für jeden Besucher, ohne dass er sich anmelden od. einloggen muss. Sollte ein Member eingeloggt sein und auf einen dieser Sprachauswahl-Links klicken, so hat dies keinen Einfluss auf seine bevorzugte Spracheinstellung im Profil und die auf diese Weise gewählte Sprache wird bei einer neuen Session nicht erkannt. Das heißt, die Flaggen-Sprachauswahl-Links sind in erster Linie für die Orientierung neuer User und/oder für das schnelle Zwischendurch-Umschalten eingeloggter Members gedacht.

Im Skript-Zusammenhang schreibt man am besten, wo immer es geht, in Variablen und nicht in absoluten Links. Die Variablen, die z. B. die Adresse der Index-Seite, die Bilderverzeichnisse etc. definieren, wurden bei der Forum-Installation erstellt, stehen in diversen "Settings"-Files und sollten immer verwendet werden.

Alles, was als HTML-Code gemeint ist und im Browser angezeigt werden soll, muss in einem PHP-Skript (das ist jeder Bereich von <?php bis ?> immer zwischen echo ' und '; eingeschlossen sein. Wird der HTML-Code durch den Aufruf von Variablen unterbrochen, muss das einfache Anfürungszeichen schließen, dann folgt ein Beistrich oder Punkt, dann die Variable, dann wird erneut das einfache Anführungszeichen geöffnet. Daher also:


echo '
<a href="', $scripturl, '?language=bulgarian"><img src="', $settings['images_url'], '/flaggen/bulgarian.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=croatian"><img src="', $settings['images_url'], '/flaggen/croatian.gif" /></a>&nbsp;
...
...
...
';


Infolgedessen lautet die komplette Linksammlung für Sprachfiles bei bookcrossing.at im Endeffekt so wie nachfolgend. Selbst wenn mit Variablen gearbeitet wird, kann man die Links von bookcrossing.at trotzdem nicht in irgendeinem anderen Forum verwenden, bevor man nicht ebenfalls ein "/flaggen"-Verzeichnis unter der "images_url" am Server angelegt hat und dort auch die Bilder gespeichert hat. Natürlich kann der Bildspeicherort und damit der Bildverweis individuell gewählt werden.


<a href="', $scripturl, '?language=bulgarian"><img src="', $settings['images_url'], '/flaggen/bulgarian.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=croatian"><img src="', $settings['images_url'], '/flaggen/croatian.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=czech"><img src="', $settings['images_url'], '/flaggen/czech.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=danish"><img src="', $settings['images_url'], '/flaggen/danish.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=dutch"><img src="', $settings['images_url'], '/flaggen/dutch.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=english"><img src="', $settings['images_url'], '/flaggen/english.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=finnish"><img src="', $settings['images_url'], '/flaggen/finnish.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=french"><img src="', $settings['images_url'], '/flaggen/french.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=german"><img src="', $settings['images_url'], '/flaggen/german.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=greek"><img src="', $settings['images_url'], '/flaggen/greek.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=hungarian"><img src="', $settings['images_url'], '/flaggen/hungarian.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=norwegian"><img src="', $settings['images_url'], '/flaggen/norwegian.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=polish"><img src="', $settings['images_url'], '/flaggen/polish.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=portuguese"><img src="', $settings['images_url'], '/flaggen/portuguese.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=romanian"><img src="', $settings['images_url'], '/flaggen/romanian.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=spanish_es"><img src="', $settings['images_url'], '/flaggen/spanish_es.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=swedish"><img src="', $settings['images_url'], '/flaggen/swedish.gif" /></a>&nbsp;
<a href="', $scripturl, '?language=turkish"><img src="', $settings['images_url'], '/flaggen/turkish.gif" /></a>&nbsp;


Ob das Forum-Skript an der Stelle, an der die Links eingefügt werden, allerding die Variablen des installierten Forums erkennt, hängt davon ab, ob diese mit der einleitenden "function" bereits aufgerufen wurden. Bei bookcrossing.at stehen die Links innerhalb der "function template_main_above()". Diese ruft bei bookcrossing.at in der ersten Zeile folgende Variablen auf: $context, $settings, $options, $scripturl, $boardurl, $txt, $modSettings. Es muss nicht sein, dass die genau dem Originalskript entspricht, sondern es kann sein, dass die Zeile für bookcrossing.at bereits erweitert wurde.

Da die Flaggen-Links neuen Besuchern ins Auge springen sollen und nicht nur auf der Board-Index-Seite, sondern beim Hineinlesen ins Forum auch noch auf der Message-Index-Seite und im einzelnen Thread zur Verfügung stehen sollen, haben wir uns dazu entschlossen, die Flaggen-Links in das Index-Template zu schreiben (und zwar innerhalb der "function template_main_above()"). So würden Sie grundsätzlich auf jeder Forum-Seite angezeigt werden. Im Gegensatz zur bookcrossing.at-Themeauswahl der Index-Seite befinden sich die Flaggen-Links außerhalb der auf- und zuklappbaren Bereiche und soll immer sichtbar sein.

Wir finden es allerdings ausreichend, wenn der (neue) User die Sprachauswahl-Links auf folgenden Seiten vorfindet: Board Index, Message Index, Topic und für die angemeldeten/eingeloggten User auch noch beim Antworten/Posten. Schließlich ist sie nur eine Zusatzfunktion neben der Sprach-Grundeinstellung, die über das Profil zugänglich ist. Daher wurde die Anzeige der Flaggen-Sprachauswahl-Links unter die folgende Bedingung gestellt:


if ($_REQUEST['action'] == 'post' || $_REQUEST['action'] == 'collapse' || empty($_REQUEST['action']))


Im Klartext: Die Flaggen-Links erscheinen, wenn wie am Board-Index und am Message-Index keine "action" in der URL steht oder wenn der "action"-Parameter "post" lautet (action=post) - also in der Antworten-Maske (Post-Template). Und sie verschwinden auch nicht, wenn der (eingeloggte) User irgendwelche Seitenteile auf- oder zuklappt (action=collapse).

Wir wollen außerdem, da die Links nur auf Bildern ohne Text bestehen, ALT- und TITLE-Tags für jede Sprache anzeigen. Der HTML-Teil der Flaggen-Links sieht bei bookcrossing.at nun folgendermaßen aus:


echo '
<div id="sprachauswahl">
<a href="', $scripturl, '?', $wohin, 'language=german"><img alt="Deutsch (German)" title="Deutsch (German)" src="', $settings['images_url'], '/flaggen/austrian.gif" /></a>&nbsp;
<a href="', $scripturl, '?', $wohin, 'language=german"><img alt="Deutsch (German)" title="Deutsch (German)" src="', $settings['images_url'], '/flaggen/swiss.gif" /></a>&nbsp;';
...
...
...
echo '
</div>';


Woher $scripturl und $settings['images_url'] kommen, wurde oben erläutert. $wohin ist ein von bookcrossing.at eingesetzter neuer Parameter, der festhält, auf welcher Seite sich der User befindet und auch nach der Sprachauswahl noch bleiben soll. Wie wir zu seinem Wert kommen, wird zum Schluß erklärt.

Zwei Flaggen-Sprachen-Links nehmen bei bookcrossing.at eine Sonderstellung ein: Da das Forum speziell für Besucher gedacht ist, die sich in Österreich aufhalten, und einige Schweizer Fans hat, wird außer der deutschen Flagge die österreichische und die Schweizer Flagge angezeigt und zwar an erster und zweiter Stelle. Diese beiden führen natürlich zum selben deutschen Sprachfile wie die deutsche Flagge, beinhalten aber abweichende Flaggen-Bilder.

Die Auflistung aller installierten Sprachen fassen wir noch mal in ein weiteres Skript zusammen, um den Code des Index-Templates schlank zu halten. Deshalb befinden sich in deren Muster-Link <a href="', $scripturl, '?', $wohin, 'language=', $key, '"><img alt="', $val, '" title="', $val, '" src="', $settings['images_url'], '/flaggen/', $key, '.gif" /></a>&nbsp;'; noch zwei weitere Variablen: "$key" für die Sprachdateien und "$val" für die Sprachbezeichnungen.

Die Namen für die Sprachverzeichnisse und Flaggenbilder haben wir vorweg in einem Array zusammengeschrieben ($sprachdatei). In einem weiteren Array werden die Sprachennamen (Texte für die ALT- und TITLE-Tags) in derselben Reihenfolge aufgelistet. Dies wird dem HTML-Teil vorangestellt:


$sprachdatei = array ("bulgarian", "croatian", "czech", ..., "turkish");
$sprachtag = array ("&#1041;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080; - Bulgarian", "Hrvatski - Croatian", "&#268;esky - Czech", ..., "(Turkish)");
$sprache = array();


Drittens werden die ersten beiden Arrays während der Anzeige zu einem Sprachdatei-Sprachnamen-Array kombiniert. Dieser Code-Teil folgt also nach den ersten beiden Flaggen-Links (Österreich und Schweiz), die eine Sonderstellung haben:


if(count($sprachdatei) == count($sprachtag))
{
for($i=0; $i <count($sprachdatei); $i++)
{
$sprache[$sprachdatei[$i]] = $sprachtag[$i];
}
}
while(list($key, $val) = each($sprache))
{
echo '
<a href="', $scripturl, '?', $wohin, 'language=', $key, '"><img alt="', $val, '" title="', $val, '" src="', $settings['images_url'], '/flaggen/', $key, '.gif" /></a>&nbsp;';
}


Zusammengesetzt ergibt sich jetzt das nachfolgende Skript:


if ($_REQUEST['action'] == 'post' || $_REQUEST['action'] == 'collapse' || empty($_REQUEST['action']))
{
$sprachdatei = array ("bulgarian", "croatian", "czech", ..., "turkish");
$sprachtag = array ("&#1041;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080; - Bulgarian", "Hrvatski - Croatian", "&#268;esky - Czech", ..., "(Turkish)");
$sprache = array();

echo '
<div id="sprachauswahl">
<a href="', $scripturl, '?', $wohin, 'language=german"><img alt="Deutsch - German" title="Deutsch - German" src="', $settings['images_url'], '/flaggen/austrian.gif" /></a>&nbsp;
<a href="', $scripturl, '?', $wohin, 'language=german"><img alt="Deutsch - German" title="Deutsch - German" src="', $settings['images_url'], '/flaggen/swiss.gif" /></a>&nbsp;';
if(count($sprachdatei) == count($sprachtag))
{
for($i=0; $i <count($sprachdatei); $i++)
{
$sprache[$sprachdatei[$i]] = $sprachtag[$i];
}
}
while(list($key, $val) = each($sprache))
{
echo '
<a href="', $scripturl, '?', $wohin, 'language=', $key, '"><img alt="', $val, '" title="', $val, '" src="', $settings['images_url'], '/flaggen/', $key, '.gif" /></a>&nbsp;';
}
echo '
</div>';
}


Wird ein oben dargestellter Sprachauswahl-Link bzw. Flagge angeklickt, stellt sich zwar die gewünschte Sprache ein. Ohne Zusatzprogrammierung würde allerdings der User dabei immer auf die Index-Seite zurückgeworfen werden, egal wo sich vor dem Auswählen der Flagge gerade befunden hat. Wir erweitern deshalb das Skript um eine Abfrage, auf welcher Seite sich der User gerade befindet, wenn er die Sprachauswahl anklickt. Das Ergebnis (das Auslesen der URL-Parameter) schreiben wir in die Variable "$wohin" und erhalten damit die nach dem Aufruf der Flaggen-Sprachauswahl-Links benötigte Parameterkette.


if (!empty($_REQUEST['action']))
{
if (!empty($_REQUEST['topic']))
{
if (!empty($_REQUEST['num_replies']))
$wohin = 'action=' . $_REQUEST['action'] . ';topic=' . $_REQUEST['topic'] . ';num_replies=' . $_REQUEST['num_replies'] . ';';
else
$wohin = 'action=' . $_REQUEST['action'] . ';topic=' . $_REQUEST['topic'] . ';';
}
else
$wohin = 'action=' . $_REQUEST['action'] . ';';
}
else if (!empty($_REQUEST['topic']))
$wohin = 'action=;topic=' . $_REQUEST['topic'] . ';';
else if (!empty($_REQUEST['board']))
$wohin = 'action=;board=' . $_REQUEST['board'] . ';';


Die komplette Flaggen-Sprachauswahl auf bookcrossing.at:
--------------------------------------------------------


if ($_REQUEST['action'] == 'post' || $_REQUEST['action'] == 'collapse' || empty($_REQUEST['action']))
{
$sprachdatei = array ("bulgarian", "croatian", "czech", "danish", "dutch", "english", "finnish", "french", "german", "greek", "hungarian", "norwegian", "polish", "portuguese", "romanian", "spanish_es", "swedish", "turkish");
$sprachtag = array ("&#1041;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080; - Bulgarian", "Hrvatski - Croatian", "&#268;esky - Czech", "Dansk - Danish", "Nederlands - Dutch", "English", "Suomenkielinen tuki - Finnish", "Fran&#231;ais - French", "Deutsch - German", "&#917;&#955;&#955;&#951;&#957;&#953;&#954;&#940; - Greek", "Magyar - Hungarian", "Norsk - Norwegian", "Polski - Polish", "Portugu&#234;s - Portuguese", "Rom&#226;n&#259; - Romanian", "Espa&#241;ol - Spanish", "Svenska - Swedish", "T&uuml;rk&#231;e - Turkish");
$sprache = array();

if (!empty($_REQUEST['action']))
{
if (!empty($_REQUEST['topic']))
{
if (!empty($_REQUEST['num_replies']))
$wohin = 'action=' . $_REQUEST['action'] . ';topic=' . $_REQUEST['topic'] . ';num_replies=' . $_REQUEST['num_replies'] . ';';
else
$wohin = 'action=' . $_REQUEST['action'] . ';topic=' . $_REQUEST['topic'] . ';';
}
else
$wohin = 'action=' . $_REQUEST['action'] . ';';
}
else if (!empty($_REQUEST['topic']))
$wohin = 'action=;topic=' . $_REQUEST['topic'] . ';';
else if (!empty($_REQUEST['board']))
$wohin = 'action=;board=' . $_REQUEST['board'] . ';';

echo '
<div id="sprachauswahl">
<a href="', $scripturl, '?', $wohin, 'language=german"><img alt="Deutsch - German" title="Deutsch - German" src="', $settings['images_url'], '/flaggen/austrian.gif" /></a>&nbsp;
<a href="', $scripturl, '?', $wohin, 'language=german"><img alt="Deutsch - German" title="Deutsch - German" src="', $settings['images_url'], '/flaggen/swiss.gif" /></a>&nbsp;';
if(count($sprachdatei) == count($sprachtag))
{
for($i=0; $i <count($sprachdatei); $i++)
{
$sprache[$sprachdatei[$i]] = $sprachtag[$i];
}
}
while(list($key, $val) = each($sprache))
{
echo '
<a href="', $scripturl, '?', $wohin, 'language=', $key, '"><img alt="', $val, '" title="', $val, '" src="', $settings['images_url'], '/flaggen/', $key, '.gif" /></a>&nbsp;';
}
echo '
</div>';
}



noex

Quote from: Vargas on October 31, 2006, 09:14:11 AM
übrigens - Warum kann ich im anderen Forum (FAQs & Tutorials) kein Neues Thema erstellen?
Weil viele Member den Sinn eines FAQ Boards nicht erkannt hatten und hier immer Fragen gepostet hatten.

Ich habe das Thema jetzt mal verschoben.

Danke für deinen Beitrag!

lg
noex
"Jetzt, wo ich weiß wie es geht, versteh ich auch die Gebrauchsanleitung"

Vargas


Osai

Danke, danke,
mir hats geholfen, allerdings habe ich es so gestaltet das die Sprachauswahl immer zur Verfügung steht.
Wahlweise könnte man das bei mir auch noch als Array gestalten, lohnte sich bei mir aber nicht!

Der str_replace Teil ist etwas hackisch, aber ohne könnte man unendlich lange URL's erzeugen wenn man immer wieder zwischen den Sprachen wechselt und das wäre unpraktisch.

$_SERVER['REQUEST_URI'] = str_replace( array("german", "english", "japanese-utf8"), "", $_SERVER['REQUEST_URI']);
$_SERVER['REQUEST_URI'] = str_replace( array(";language=", "?language="), "", $_SERVER['REQUEST_URI']);
$language_uri = parse_url($_SERVER['REQUEST_URI']);
$language_separator = empty($language_uri["query"]) ? "?" : ";";
$language_folder = "http://localhost/kenvo.de/website/css_img/flags";

echo'
<div id="header">
<a href="', $_SERVER['REQUEST_URI'], $language_separator, 'language=german" title="Deutsch (German)"><img src="'. $language_folder .'/de.gif" alt="Deutsch" /></a>
<a href="', $_SERVER['REQUEST_URI'], $language_separator, 'language=english" title="English"><img src="'. $language_folder .'/en.gif" alt="English"/></a>
<a href="', $_SERVER['REQUEST_URI'], $language_separator, 'language=japanese-utf8" title ="日本語 (Japanese)"><img src="'. $language_folder .'/jp.gif" alt="Japanese"/></a>
</div>';

Berti_G

Hallo, gibt es Leute dir mir das mit der Sprachauswahl mit Flaggen auf meine seite gegen Entgeld einrichten können. Ich selbst kann es nicht, da ich Neuling bin. Das ist aber genau das was ich haben möchte.
www.thaiforum24.de

Vielen Dank

silvana238

Ich mag deine hxxp:instructions.it [nonactive] ist mir wirklich geholfen.

Advertisement: