Sprachweiche

Urs

Legendäres Mitglied
Hallo

Ich mache eine 2 sprachige Site und möchte eingangs die Benutzer mit deutschen Browser auf die Seite /de und die mit englischen Browser auf /en schicken. Alle anderen Sprachen sollen auch auf /en verwiesen werden.

Kann man dies mit htaccess lösen? Wenn ja wie?

Ich hab einige gegoogelte Scripts probiert, aber funktioniert hat es nie, alle verweisen auf die Seite für die übrigen, egal welche Browsersprache ich habe.

Kann mir da jemand helfen?
Gibt es hier ein htaccess Genie?

Gruss

Urs
 
so ungefähr?
CODE RewriteEngine on
RewriteCond %{HTTP:Accept-Language} (de)
RewriteRule (.*) /de/$1 [R,L]
RewriteCond %{HTTP:Accept-Language} !(de)
RewriteRule (.*) /en/$1 [R,L]





QUOTE Gibt es hier ein htaccess Genie?

Vielleicht wohnt hier ja eins
wink.gif

http://www.ayom.com/faq/automatische-sprac...rfer-a-257.html

hier noch ein kleines nettes tool:
http://www.htaccesstools.com/redirection-by-language/


du solltest evtl. noch an ein cookie denken, welches du dann per
RewriteCond %{HTTP_COOKIE}
abfängst. sonst kann man ohne änderung der browsersprache nicht wechseln.


QUOTE Ich hab einige gegoogelte Scripts probiert, aber funktioniert hat es nie, alle verweisen auf die Seite für die übrigen, egal welche Browsersprache ich habe.

hast du vielleicht mehrere sprachen im browser aktiviert und nur die priorität geändert?
 
das funktioniert

CODE
RewriteEngine on
RewriteCond %{HTTP:Accept-Language} (de) [NC]
RewriteRule .* http://www.domain.com [R,L]

 
@René: poste doch deine lösung mal - denke es gibt nen haufen user (mich eingeschlossen) die gute scripte immer wieder gerne in ihr persönliches scripte-archiv aufnehmen würden...
 
Vielen Dank für Eure Hilfe, ich werds heute abend mal ausprobieren.

Gegoogelt hab ich aber nicht geayomelt, wofür ich mich entschuldigen möchte

en gruess

urs
 
ist aber nie getestet woden von mir auf zuverlässigkeit

CODE
<?php
if(strstr($HTTP_ACCEPT_LANGUAGE,"de"))
{Header("Location:http://www.link-xxx.com/textlinktausch.html");}


elseif(strstr($HTTP_ACCEPT_LANGUAGE,"en")) {
Header("Location:http://www.link-xxx.com/");
}
elseif(strstr($HTTP_ACCEPT_LANGUAGE,"de")) {
Header("Location:http://www.link-xxx.com/textlinktausch.html");
}
?>




alternative Java


CODE
<script LANGUAGE="JavaScript1.2">
<!-- Begin
if (navigator.appName == 'Netscape')
var language = navigator.language;
else
var language = navigator.browserLanguage;
if (language.indexOf('de') > -1) document.location.href = ' de.html';

// End -->
</script>

 
Was passiert, wenn der Browser sich als "de-De" oder "en-EN" outet?

Dann müßte man das auch noch reinsetzen. Ist mir in letzter Zeit öfters aufgefallen, dass es Browser gibt, die das mit dem Bindestrich vorwegschicken.
 
CODE
Was passiert, wenn der Browser sich als "de-De" oder "en-EN" outet?


de-de - wird als de erkant
de-ch - wird ebenfalss als de erkant
 
Eigentlich sind die Codebeispiele etwas unsauber.

Denn

CODE language.indexOf('de') > -1


liefert True, falls 'de' irgendwo vorkommt. Das stimmt für de, weil es keine andere Kultur gibt, die 'de' als lokalen Ausdruck kennt.

Im Allgemeinen ist das aber falsch - es gibt es-AR (Spanisch - Argentinien), aber auch Ar als Kulturbezeichner für Arabisch.

Sprich: Besser ist


CODE language.indexOf('de') = 0


wobei Browser unterschiedlich Groß/Kleinschreibung senden, man also im Zweifelsfall noch ein toLowerCase einfügen sollte.
 
CODE
Im Allgemeinen ist das aber falsch - es gibt es-AR (Spanisch - Argentinien), aber auch Ar als Kulturbezeichner für Arabisch.



stimmt soweit schreibst du aber \\ es-ar // in das script leitet es nur spanisch weiter hatte das nähmlich mit allen en Varianten getestet

funktioniert aber so hab das schon seit einigen Jahren im Einsatz und klappt tadellos
um ganz sicher zu gehen kann man es ja so wie hier machen ist aber überflüssig


CODE

<script LANGUAGE="JavaScript1.2">
<!-- Begin
if (navigator.appName == 'Netscape')
var language = navigator.language;
else
var language = navigator.browserLanguage;
if (language.indexOf('de') > -1) document.location.href = ' de.html';
else if (language.indexOf('de-ch') > -1) document.location.href = 'de.html';
else if (language.indexOf('de-li') > -1) document.location.href = 'de.html';
else if (language.indexOf('de-at') > -1) document.location.href = 'de.html';
// End -->
</script>


 
@Lanza: Der Code

CODE language.indexOf('ar') > -1


leitet alle Browser mit arabischen Spracheinstellungen auf die arabische Variante um - aber zusätzlich auch die spanisch-argentinischen Browser. Deshalb ist dieser Code im allgemeinen falsch. Im Sonderfall der deutschen stimmt er, weil es keine Kultur außer der deutschen gibt, die als Region das Kürzel 'de' nutzt.

Ebenso gibt es sv-FI, die Kultur Schwedisch mit der Region finnisch und gleichzeitig die Kultur Finnisch mit fi-FI. Oder es gibt Katalanisch ca-ES und Spanisch für die Region El Salvador es-SV, obwohl letzteres nichts mit schwedisch zu tun hat.

Sprich: Browser können alles mögliche schicken. Man muß deshalb die beiden ersten Zeichen gegen das Muster prüfen, nicht nur, ob das Muster irgendwo in den übermittelten Sprachen vorkommt.
 
Sorry für die lange Wartezeit. Wir hatten gestern wieder einmal in der ganzen Provinz einen Brown-Out.
mad.gif
Hier der Code:

CODE <script>


//Enter ISO 639-2 letter Language codes to detect (see: http://www.w3.org/WAI/ER/IG/ert/iso639.htm):
var langcodes=new Array("en", "fr", "es", "ja", "zh", "default")

//Enter corresponding redirect URLs (last one is for default URL):
var langredirects=new Array("index.htm", "french.htm", "spanish.htm", "japan.htm", "chinese.htm", "index.htm")

var languageinfo=navigator.language? navigator.language : navigator.userLanguage
var gotodefault=1

function redirectpage(dest){
if (window.location.replace)
window.location.replace(dest)
else
window.location=dest
}

for (i=0;i<langcodes.length-1;i++){
if (languageinfo.substr(0,2)==langcodes[i]){
redirectpage(langredirects[i])
gotodefault=0
break
}
}

if (gotodefault)
redirectpage(langredirects[langcodes.length-1])


</script>


Das Script funktioniert natürlich auch in PHP und kann da leicht eingebunden werden (include).

Chees, René
 
Zurück
Oben