Autom. Auswahl der Sprache im Frontend

Gesperrt
Brazo Alkher
Beiträge: 103
Registriert: Fr 28. Jan 2005, 15:15
Wohnort: Unna
Kontaktdaten:

Autom. Auswahl der Sprache im Frontend

Beitrag von Brazo Alkher »

Hallo,

ich hatte einen Kunden der seine Seite in (aktuell) 4 Sprachen anbietet und wollte, das automatisch die Sprache angezeigt wird, die je nach Browsereinstellung am ehesten dem User entspricht.

Hierzu habe ich zuerst die Sprachen im Backend so umbenannt, das sie den Länderkürzeln entsprechen.

z.B.:
de = deutsch
en = englisch
pb = portugiesisch
cz = chinesich


Als Zweites passe ich im Mandanten Ordner die "front_content.php" an.

Und zwar ab dem Block

Code: Alles auswählen

// Initialize language
if (!isset($lang)) {
(ca. Zeile 150)

hab ich folgenden PHP Code geschrieben und eingefügt:

Code: Alles auswählen

	##################################################
	# wenn keine Sprache definiert ist
	# => Sprache an Hand der Browsereinstellung
	#    $_SERVER["HTTP_ACCEPT_LANGUAGE"] laden
	#
	# -BEGIN-
	##################################################

	##################################################
	# alle verfügbaren Sprachen laden
	##################################################
	$sql = '
		SELECT
			*
		FROM
			'.$cfg['tab']['lang'].'

		WHERE
			active	= "1"
		';
	$db->query($sql);
	while ($db->next_record())
		$myLanguages[strtolower($db->f('name'))] = $db->f('idlang');


	##################################################
	# gewünsche Sprachen aus
	# $_SERVER["HTTP_ACCEPT_LANGUAGE"] laden
	##################################################
	$accepted_languages	= split(',', strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']));

	$preferredLang	= null;

	foreach($accepted_languages as $aLang)
	{
		if ($preferredLang === null)
		{
			##################################################
			# Sprachkuerzel finden
			##################################################
			list($sprachkuerzel, $sprachQ)	= split(';', $aLang);

			if (array_key_exists($sprachkuerzel, $myLanguages))
			{
				$preferredLang	= $myLanguages[$sprachkuerzel];
			}
			else
			{
				list($sprachkuerzel_teil1, $sprachkuerzel_teil2)	= split('-', $sprachkuerzel);

				if (array_key_exists($sprachkuerzel_teil1, $myLanguages))
				{
					$preferredLang	= $myLanguages[$sprachkuerzel_teil1];
				}
			}
		}
	}

	if ($preferredLang !== null)
		$load_lang	= $preferredLang;

	##################################################
	# wenn keine Sprache definiert ist
	# => Sprache an Hand der Browsereinstellung
	#    $_SERVER["HTTP_ACCEPT_LANGUAGE"] laden
	#
	# -ENDE-
	##################################################

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Grundsätzlich eine schöne Idee.

Vielleicht gibt es ja zur Änderung direkt in der front_content noch einen anderen Weg (ich habe gerade nicht geguckt). Ansonsten würde ich Dir empfehlen, noch den Tabelle client_lang zu berücksichtigen, da der Code bei mehr als einem Mandanten (und dessen Sprachen) ins Straucheln kommen dürfte.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Brazo Alkher
Beiträge: 103
Registriert: Fr 28. Jan 2005, 15:15
Wohnort: Unna
Kontaktdaten:

Beitrag von Brazo Alkher »

HerrB hat geschrieben:Vielleicht gibt es ja zur Änderung direkt in der front_content noch einen anderen Weg (ich habe gerade nicht geguckt).
Ich hab mir angeschaut wo der Wert $lang gesetzt wird wenn der noch nicht vorhanden ist. Also die Stelle finden in der der Wert aus der config.php des Mandanten verwendet wird.
HerrB hat geschrieben:Vielleicht gibt es ja zur Änderung direkt in der front_content noch einen anderen Weg (ich habe gerade nicht geguckt). Ansonsten würde ich Dir empfehlen, noch den Tabelle client_lang zu berücksichtigen, da der Code bei mehr als einem Mandanten (und dessen Sprachen) ins Straucheln kommen dürfte.
Das ist ein guter Einwand :-) Da der Kunde nur einen Mandanten hat viel das Problem nicht auf ;-) Ich werde das dann noch einbauen und die Änderung hier posten.
Brazo Alkher
Beiträge: 103
Registriert: Fr 28. Jan 2005, 15:15
Wohnort: Unna
Kontaktdaten:

Beitrag von Brazo Alkher »

Als Wunsch zur Erweiterung wäre, das in der Datenbanktabelle und im Backend in den Pflegemasken einer Sprache ein Länderkürzel zugewiesen werden kann, damit der Sprache nicht als Namen das Länderkürzel gegeben werden muss.
Gesperrt