2016-11-17 1 views
3

J'espère que vous serez en mesure de m'aider avec mon problème. J'ai 3 langues sur mon site html statique. Je souhaite rediriger un utilisateur en fonction des paramètres de langue de son navigateur.La redirection javascript multilangue statique continue de recharger une page

Ceci est mon code:

var lang = navigator.language; 
if (lang == 'pl'){ 
    document.location.href = 'index_pl.html'; 
} 
else if (lang == 'fr'){ 
    document.location.href = 'index_fr.html'; 
} 
else { 
    document.location.href = 'index.html'; 
} 
alert(lang); 

Le problème est chaque fois l'utilisateur entrera dans le site ce script conserve rafraîchissant/rediriger un site. Ma question est de savoir comment vérifier le navigateur de l'utilisateur une fois, puis rediriger l'utilisateur vers une page Web dédiée.

Merci d'avance.

Répondre

2

Si vous ne souhaitez pas que la redirection continue, vous devez rechercher la page dans l'URL actuelle. Par exemple:

var lang = navigator.language; 
var redirectURL = 'index.html'; 

if (lang == 'pl'){ 
    redirectURL = 'index_pl.html'; 
} else if (lang == 'fr'){ 
    redirectURL = 'index.html'; 
} 

if (document.location.pathname.indexOf(redirectURL) == -1) { 
    document.location.href = redirectURL; 
} 

Cela permet de vérifier que le redirectURL est pas dans le chemin.

+0

Merci pour votre réponse. Tous les fichiers sont dans le répertoire racine et le code ci-dessus vérifie quelle est la langue du navigateur de l'utilisateur et, sur la base de ces informations, redirige vers une page spécifique. Une fois l'utilisateur redirigé, la scipt vérifie à nouveau la langue de l'utilisateur. (boucle infinie). Peut-être que je devrais ajouter quelque chose à l'url après la première redirection ou peut-être utiliser localstorage? – Kamil

+0

Vous pouvez utiliser localstorage ou des cookies si vous voulez stocker ce que l'option était, mais vous ne devriez pas avoir besoin de. Si c'est encore rediriger, quelque chose ne correspond pas à la vérification du chemin. Commentez le document.location.href et le résultat (alert ou console.log) ce qu'il montre. Par exemple: alert (document.location.path + "! = /" + RedirectURL) – fanfavorite

+0

renvoie Undefinded! = /index_pl.html Mais tous les fichiers sont dans le même répertoire racine – Kamil

0

Salut les gars, je pense que j'ai résolu ce problème en utilisant localStorage. code ci-dessous:

 if (localStorage.getItem("visit") == null) 
{ 
    // Show Welcome message 
    var lang = navigator.language; 
    if (lang == 'pl'){ 
     document.location.href = 'index_pl.html'; 
    } 
    else if (lang == 'fr'){ 
     document.location.href = 'index_fr.html'; 
    } 
    else { 
     document.location.href = 'index.html'; 
    } 
} 

localStorage.setItem("visit", new Date()); 

Pourriez-vous s'il vous plaît me conseiller si je ne me trompe pas? Merci d'avance

+0

Le problème avec cette solution est que vous définissez la date après qu'elle est définie sur rediriger. Je ne pense toujours pas que tu en aies besoin. Vous pouvez voir ma solution révisée pour vérifier l'instance de redirectURL dans la chaîne, donc cela fonctionnera sur votre localhost. Ce type de méthode fonctionne également, mais vous devez définir l'élément avant les redirections. Vous pourriez mettre comme le premier élément à l'intérieur de l'instruction if. – fanfavorite