2015-10-05 15 views
5

Ich muss den Benutzer zu einer anderen Seite umleiten, in Übereinstimmung mit der Sprache des Browsers. Zum Beispiel: wenn die Sprache des Browsers english auf site.com/en/ umleiten.Wie umleiten Benutzer auf andere Seite?

Ich versuche, wie dies zu tun:

$(document).ready(function() { 
    var userLang = navigator.language || navigator.userLanguage; 

    switch (userLang) { 
     case 'en': 
      window.location.href = window.location.origin + '/en'; 
      break; 
     case 'de': 
      window.location.href = window.location.origin + '/de'; 
      break; 
     default: 
      break; 
    } 
}); 

Es ist funktioniert, aber die Seite wird ständig neu geladen. Wie kann man es lösen oder eine andere Lösung vorschlagen?

+0

Wie könnte diese Arbeit, wenn userLang Ausgang en-US ist? –

+0

Im Standardfall protokollieren Sie den Wert von userLang und korrigieren Sie die Fälle basierend auf diesem Wert. – Vanojx1

+0

OP, nebenbei würde ich nicht versuchen, dies auf dem Client überhaupt zu tun. Dies sollte auf dem Server geschehen. –

Antwort

4

Die Seite wird ständig neu geladen, da Sie nicht prüfen, ob der Benutzer bereits auf der richtigen Sprachwebsite ist.

Auf Ihren Seiten können Sie eine Javascript-Variable für die serverseitig erzeugten Seiten speichern. Zum Beispiel:

var thisLanguage = 'en'; 

Dann Ihr Javascript Logik ändern, um dies zu berücksichtigen und gelten nur die Umleitung, wenn die Sprache des Benutzers zu thisLanguage unterscheidet:

$(document).ready(function() { 
    var userLang = navigator.language || navigator.userLanguage; 

    if (userLang != thisLanguage){ 

     switch (userLang) { 
      case 'en': 
       window.location.href = window.location.origin + '/en'; 
       break; 
      case 'de': 
       window.location.href = window.location.origin + '/de'; 
       break; 
      default: 
       break; 
     } 

    } 
}); 
+1

Wenn es 'de' ist, wird es den Schalter drücken, umleiten zu'/de', dann wird es die Seite neu laden, und dasselbe wieder tun. Es wird immer noch Schleife. Und was ist der Sinn in Ihrem ersten Fall? Es wird niemals diesen ersten Fall treffen. –

+1

@JayMee deshalb ist 'thisLanguage' abhängig von der serverseitigen Konstruktion – Hacketo

+1

Auf der'/de' Seite wird es eine Variable von 'var userLanguage = 'de'' geben und somit wird die aktuelle' userLang' angepasst und nicht umgeleitet . Fehle ich etwas? – Curt

0

Ich denke, Sie sollten die Sprache erkennen durch das Lesen es aus der URL, da Sie die Benutzer entsprechende URL umleiten möchten:

$(document).ready(function() { 

    var languageSuffix = window.location.pathname; 
    if(languageSuffix !== '/') { 
     return; 
    } 

    var userLang = navigator.language || navigator.userLanguage; 

    switch (languageSuffix) { 
     case '/en': 
      window.location.href = window.location.origin + '/en'; 
      break; 
     case '/de': 
      window.location.href = window.location.origin + '/de'; 
      break; 
     default: 
      break; 
    } 
}); 
+0

kann nicht funktionieren, wenn es GET-Parameter gibt – Hacketo

0

Wir können überprüfen, ob die URL als etwas aktuelle URL wie dieser ist gleich: etwas

$(document).ready(function() { 
    var userLang = navigator.language || navigator.userLanguage; 
    var urlToRedirect = ''; 

    switch (userLang) { 
     case 'en': 
      urlToRedirect = window.location.origin + '/en'; 
      break; 
     case 'de': 
      urlToRedirect = window.location.origin + '/de'; 
      break; 
     default: 
      break; 
    } 
    if(urlToRedirect!=='' && urlToRedirect!==window.location.href){ 
     window.location.href = urlToRedirect; 
    } 
}); 
+0

kann nicht funktionieren, wenn es GET-Parameter gibt – Hacketo

+0

Warum '$ (Dokument) .ready' hier verwenden? – qup

0

Versuchen wie unten:

$(document).ready(function() { 
    var url = $(location).attr('href'); 
    var userLang = navigator.language || navigator.userLanguage; 

    if(url.indexOf("/en") == -1 && userLang == 'en') { 
     window.location.href = window.location.origin + '/en'; 
    } else if (url.indexOf("/de") == -1 && userLang == 'de'){ 
     window.location.href = window.location.origin + '/de'; 
    } else { 
     // Do nothing 
    } 
}); 
Verwandte Themen