2015-10-05 16 views
5

Devo effettuare il reindirizzamento dell'utente a un'altra pagina, in base alla lingua del browser. Ad esempio: se la lingua del browser english reindirizza a site.com/en/.Come reindirizzare l'utente a una pagina diversa?

che cerco di fare in questo modo:

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

opere di esso, ma la pagina è in costante ricaricato. Come risolverlo o richiedere un'altra soluzione?

+0

Come potrebbe questo lavoro se l'uscita userLang è en-US? –

+0

all'interno del caso predefinito registra il valore di userLang e corregge i casi in base a quel valore. – Vanojx1

+0

OP, a parte, non vorrei assolutamente fare questo sul client. Questo dovrebbe essere fatto sul server. –

risposta

4

La pagina viene costantemente ricaricata perché non si sta verificando se l'utente è già sul sito della lingua corretta.

Sulle pagine è possibile memorizzare una variabile javascript per le pagine prodotte sul lato server. Per esempio:

var thisLanguage = 'en'; 

quindi modificare la logica di javascript per tener conto di questo e si applicano solo il reindirizzamento se la lingua dell'utente è diverso da 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

Quando è 'de', tocca l'interruttore, reindirizza a'/de', quindi ricarica la pagina e fa lo stesso di nuovo. Andrà ancora in loop. E qual è il punto nel tuo primo caso? Non colpirà mai il primo caso. –

+1

@JayMee ecco perché 'thisLanguage' dipende dalla costruzione lato server – Hacketo

+1

Nella pagina'/de' ci sarà una variabile di 'var userLanguage = 'de'' e quindi questo corrisponderà all'attuale' userLang' e non reindirizzerà . Mi sto perdendo qualcosa? – Curt

0

Penso che si dovrebbe rilevare la lingua attraverso la lettura dal URL, dal momento che si desidera reindirizzare gli utenti di appropriate 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

non funziona se ci sono parametri GET – Hacketo

0

possiamo controllare se l'URL è lo stesso come qualcosa di URL corrente come questo:

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

non può funzionare se ci sono parametri GET – Hacketo

+0

Perché usare '$ (document) .ready' qui? – qup

0

provare qualcosa di simile di seguito:

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