如何在检测浏览器语言的同时停止JavaScript的无限循环

How to stop infinite loop of javascript while detecting browser language

本文关键字:JavaScript 无限循环 检测 浏览器 语言      更新时间:2023-09-26

我的目标是检测用户的语言并将其重定向到法语页面或英语,英语是默认值。 如果我只将代码放在法语页面上并尝试打开法语页面,这就会起作用,这会自动检测并加载英语。 如果我两者都有代码,那么它就会陷入无限循环。 任何帮助将不胜感激。 这是代码。

<script language="javascript"> 
var langcodes=new Array("en", "fr", "default") ;
var langredirects=new Array("http://defaulten.asp", 
"http://default-fr.asp", 
"http://default.asp"); 
var languageinfo=navigator.language? navigator.language : navigator.userLanguage ;
var gotodefault=1 ;
function redirectpage(dest){ 
if (window.location.replace) 
window.location.replace(dest) 
else 
window.location=dest 
} 
for (i=0;i<langcodes.length-1;i++){ 
if (languageinfo.substr(0,2)==langcodes[i]){ 
redirectpage(langredirects[i]) 
gotodefault=0 
break 
} 
} 
if (gotodefault) 
redirectpage(langredirects[langcodes.length-1]) 
</script>

如果您已经在正确的页面上,您需要确保不要重定向,例如

if (languageinfo.substr(0,2)==langcodes[i]) {
    gotodefault = 0;
    var redirPage = langredirects[i];
    if (redirPage != document.URL)
        redirectpage(redirPage);
    break 
}

此外,如果en是默认值,我不会有一个特定的页面,即 defaulten.asp .我只会提供特定于语言的页面,即 default-fr.asp/default-us.asp,如果你遵循这种方法,你的代码会更简单,例如

var languageinfo = navigator.language ? navigator.language : navigator.userLanguage;
languageinfo = languageinfo == "en" ? "" : languageinfo;
var langUrl = sprintf("http://default%s.asp", languageinfo);
if (document.URL != langUrl)
    redirectpage(langUrl);