Javascript 如何将用户重定向到不同的页面?
我需要根据浏览器的语言将用户重定向到另一个页面。例如:如果浏览器的语言为Javascript 如何将用户重定向到不同的页面?,javascript,jquery,Javascript,Jquery,我需要根据浏览器的语言将用户重定向到另一个页面。例如:如果浏览器的语言为english则重定向到site.com/en/ 我试着这样做: $(document).ready(function () { var userLang = navigator.language || navigator.userLanguage; switch (userLang) { case 'en': window.location.href = windo
english
则重定向到site.com/en/
我试着这样做:
$(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;
}
});
$(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;
}
});
它的作品,但网页不断被重新加载。如何解决该问题或提示其他解决方案?由于您没有检查用户是否已在正确的语言站点上,因此页面会不断重新加载 在页面上,您可以为服务器端语言生成的页面存储javascript变量。例如:
var thisLanguage = 'en';
然后更改javascript逻辑以考虑这一点,并且仅当用户的语言与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;
}
}
});
我认为您应该通过从URL读取来检测语言,因为您希望将用户重定向到适当的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;
}
});
我们可以检查url是否与当前url相同,如下所示:
$(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;
}
});
$(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;
}
});
请尝试以下操作:
$(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
}
});
如果userLang输出是en-US,这怎么可能工作呢?在默认案例中,记录userLang的值并根据该值更正案例。顺便说一句,我根本不会在客户端上尝试这样做。这应该在服务器上完成。当它是
de
时,它会点击开关,重定向到/de
,然后重新加载页面,然后再次执行相同的操作。它仍然会循环。你的第一个案子有什么意义?它永远不会碰到第一种情况。@JayMee这就是为什么thisLanguage
依赖于服务器端构造在/de
页面上会有一个变量var userLanguage='de'
,因此它将匹配当前的userLang
,并且不会重定向。我遗漏了什么吗?您刚刚对其进行了编辑,添加了“生成的服务器端”,现在有了意义。这在第一个例子中并不清楚,所以我认为你的意思是你在硬编码en
。事实上,你建议使用服务器端实现(某种程度上)得到了我的支持。这不应该只在客户机上完成。