Zum Inhalt springen

Sprachauswahl Codeschnipsel

Erstellt am 14. April 2003 · 3 Antworten · letzte Antwort am 12. Mai 2003

Tags: Frage

maxhb ·

Hi!
Vielleicht stört es andere Leute ja auch, dass man unter Typo bei der Feststellung der bevorzugten Sprache eines Benutzers auf Probleme stösst, wenn mehr als eine Sprache eingestellt ist.

[language = de]
  # Deuscthe Sprache
[else]
  # Andere Sprache, z.B. Englisch
[end]

Dieser Code sieht zwar sehr "sprechend" aus, produziert aber Fehler, wenn ein Benutzer z.B. Deutsch (Primäre Sprache) UND Englisch(Alternative Sprache) im Browser als Sprache eingestellt hat. Dies liegt daran, dass ein exakter Match mit $HTTP_ACCEPT_LANGUAGE gesucht wird, dieser Wert aber in meinem Beispiel mit "de,en" belegt ist. Ergebnis: Es wird der else-Zweig ausgeführt und Englisch als Sprache gewählt 🙁

Um dieses "Problem" zu lösen habe ich ein kleiens PHP-Script geschrieben, dass etwas genauer mit $HTTP_ACCEPT_LANGUAGE vergleicht...

function user_match($language) {
//--------------------------
// Purpose:      Detects the user-preferred languages, compares them with offered langauges and returns the best fitting language output
// Input:        Language to check for.
// Output:       Returns true if $wanted-language is the FIRST language of $array_offered_langs found, false otherwise
// Side Effects: None
//--------------------------
	global $HTTP_ACCEPT_LANGUAGE;
	// List of languages to check for
	$array_offered_langs = array("de","en");

	$array_accepted_langs = explode(",",$HTTP_ACCEPT_LANGUAGE);

	foreach ($array_accepted_langs as $str_testlang) {
	// Compares the browser-sent "accepted languages" step by step with the offered languages.
		foreach ($array_offered_langs as $tmp_off_lang) {
			if ( stristr($str_testlang,$tmp_off_lang) ) {
				$str_selected_lang = $tmp_off_lang;
				break;
			}
		}
		if (isset($str_selected_lang)) break;
	}
	return ($str_selected_lang == $language);
}

Dieses Scriptsucht aus den angebotenen Sprachen der Website (de,en) diejenige heraus, die laut Browsereinstellungen bevorzugt wird bzw. es überprüft ob die als Funktionsparameter übergebene Sprache gewählt werden sollt.

#--------------------- SPRACHSETUP START
config.linkVars = L

# Browsersprache Deutsch?
[userFunc = user_match(de) ]
  # Ja = Sprache auf Deutsch setzen
  config.sys_language_uid = 0 
  config.language = de 
  config.locale_all = de_DE
[else]
  # Nein, dann Englisch wählen
  config.sys_language_uid = 1 
  config.language = en 
  config.locale_all = english 
[global]

# Auswertung URL-Parameter
# Überschreiben Browsereinstellungen

# German language, sys_language.uid = 0 
[globalVar = GP:L = 0] 
config.sys_language_uid = 0 
config.language = de 
config.locale_all = de_DE 
[global] 

# English language, sys_language.uid = 1 
[globalVar = GP:L = 1] 
config.sys_language_uid = 1 
config.language = en 
config.locale_all = english 
[global]

#--------------------- SPRACHSETUP ENDE

Man sieht den gewohnten Code zur Sprachauswahl nur um den Funktionsaufruf des obigen Scriptes ergänzt. Dieser Code überprüft, ob Deutsch (de) die bevorzugte Sprache ist und trifft die entsprechenden Einstellungen, wenn dies der Fall ist. Anderenfalls wird Englisch als Sprache eingestellt. Anschliessend der gewünschte Code zur Auswertung der per URL übergebenen Sprachauswahl, der ggf. die Einstellungen überschreibt.

So, viele Wort für wenig Code verschwendet, aber mir hat dieses Script geholfen und vielleicht kann es noch jemand verwerten 😉

Fragen einfach als Reply and dieses Posting...

cu
maxhb

maxhb ·

Hi Sebastian!
Kannst Du gern machen, aber vielleicht sollten wir vorher noch ein paar Kommentare abwarten, denn da kommen bestimmt noch Fragen... Ist ja erst wenige Minuten online...

cu

maxhb

maxhb ·

Hi!
Scheinbar hat jemand die Idee der Spracherkennung aufgenommen und eine entsprechende Extension geschrieben, siehe

http://typo3.org/1383.0.html?&tx_extrepmgm_pi1[mode]=1&tx_extrepmgm_pi1[showUid]=565