2015-10-05 16 views
5

Muszę zrobić, aby przekierować użytkownika na inną stronę, zgodnie z językiem przeglądarki. Na przykład: jeśli język przeglądarki: english przekieruj do site.com/en/.Jak przekierować użytkownika na inną stronę?

staram się zrobić to tak:

$(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; 
    } 
}); 

To działa, ale strona jest ciągle przeładowane. Jak go rozwiązać lub zachęcić do innego rozwiązania?

+0

Jak mogłoby to praca czy wyjście userLang jest en-US? –

+0

wewnątrz domyślnego przypadku rejestruj wartość UserLang i popraw skrzynie oparte na tej wartości. – Vanojx1

+0

OP, na marginesie, nie starałbym się w ogóle tego robić na kliencie. Powinno to zostać wykonane na serwerze. –

Odpowiedz

4

Strona jest ciągle przeładowywana, ponieważ nie sprawdzasz, czy użytkownik jest już na właściwej stronie językowej.

Na twoich stronach możesz zapisać zmienną javascript dla stron utworzonych przez język po stronie serwera. Na przykład:

var thisLanguage = 'en'; 

Następnie zmień JavaScript logikę wziąć to pod uwagę i stosować tylko przekierowanie jeśli język użytkownika różni się thisLanguage:

$(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

Kiedy jest to "de", trafi przełącznik, przekieruje do '/ de', a następnie załaduje ponownie stronę i zrobi to samo. Nadal będzie w pętli. A jaki jest sens w twoim pierwszym przypadku? Nigdy nie trafi w ten pierwszy przypadek. –

+1

@JayMee, dlatego 'thisLanguage' zależy od konstrukcji po stronie serwera – Hacketo

+1

Na stronie'/de' będzie zmienna 'var userLanguage = 'de'' i dlatego będzie pasować do bieżącego' userLang' i nie będzie przekierować . Czy czegoś brakuje? – Curt

0

myślę, że należy wykryć języka poprzez czytanie to z adresu URL, ponieważ chcesz przekierować użytkowników do odpowiedniego adresu URL:

$(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

nie może działać, jeśli istnieją parametry GET – Hacketo

0

Możemy sprawdzić, czy adres URL jest taki sam, jak aktualny adres URL coś takiego:

$(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

nie może działać, jeśli istnieją parametry GET – Hacketo

+0

Dlaczego używać '$ (document) .ready' tutaj? – qup

0

Spróbuj coś jak poniżej:

$(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 
    } 
}); 
Powiązane problemy