2011-11-28 79 views
1

我試圖重定向英語瀏覽器xyz.com/?lang=en,同時讓那些瑞典留在xyz.com雙語言的瀏覽器重定向的Javascript

我一直在努力:

var type=navigator.appName 
if (type=="Netscape") 
var lang = navigator.language 
else 
var lang = navigator.userLanguage 

//cut down to first 2 chars of country code 
var lang = lang.substr(0,2) 

// Swedish 
if (lang == "sv") 
window.location.replace('????') 

// if none of above (default to English or any other) 
else 
window.location.replace('xyz.com/?lang=en') 
</script> 

但我不知道該怎麼寫瑞典的URL,因爲它不是重定向,因爲默認語言是瑞典語......編寫xyz.com讓我進入重定向循環


if ($_REQUEST["lang"] == "en") 
{ 
    echo '<div class="langlight"><a href="http://xyz.com/">Svenska</a></div>'; 
} 
else 
{ 
    echo '<div class="langbold"><a href="http://xyz.com/">Svenska</a></div>'; 

} 

if ($_REQUEST["lang"] == "en") 
{ 
    echo '<div class="langbold"><a href="http://xyz.com/">English</a></div>'; 
} 
else 
{ 
    echo '<div class="langlight"><a href="xyz.com/">English</a></div>'; 
} 

    enter code here 
+0

爲什麼在瑞典的情況下不做任何事情?只是在英語時做重定向,而在瑞典語時不做任何事情。 –

+3

檢測瀏覽器語言的正確方法是檢查服務器端的[接受語言HTTP標頭](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4)。客戶端語言檢測具有跨瀏覽器問題,有時僅檢測已安裝的語言(而不是首選語言) – hugomg

+0

,因爲所有瑞典語瀏覽器都有英語作爲輔助語言,可重定向它們 – user1046583

回答

2
if (lang !== "sv") { 
    window.location.replace(window.location.href + '?lang=en'); 
} 
0

您一直在檢查navigator的語言。

這種方式每次頁面加載時,它會嘗試重新加載頁面與改變或不url。

你需要放置一個條件,它不會重新加載頁面..
這應該是當有一個URL參數傳遞。

因此,檢查查詢字符串,並覆蓋默認值,如果URL中存在一個值。

<script type="text/javascript"> 
    (function(undefined){ 
     var queryString = {}, 
      search = window.location.search.substring(1), // read the current querystring 
      searchItems = search.length?search.split('&'):[]; // and split it at the different params if any exist 
     for(var i = 0, len = searchItems.length; i < len; i++){ // for each parameter passed 
      var parts = searchItems[i].split('='); // split the key/value pair 
      queryString[parts[0].toLowerCase()] = parts[1]; // and store it to our queryString variable 
     } 

     if (queryString.lang === undefined){ // if there is no lang parameter passed do your checking otherwise skip this step completely and use the url lang parameter. 
      var type=navigator.appName, lang = ''; 
      if (type=="Netscape") { 
       lang = navigator.language.substr(0,2); 
      } else { 
       lang = navigator.userLanguage.substr(0,2); 
      } 
      if (lang != "sv"){ 
       if (searchItems.length){ 
        window.location.replace(window.location.href + '&lang=en'); 
       } else { 
        window.location.replace(window.location.href + '?lang=en'); 
       } 
      } 
     } 
    }()); 
</script> 

注意:雖然如@missingno提到了他對你的問題的評論,這是最好的處理服務器端比客戶端。

+0

它worx!謝謝:) – user1046583

+0

噢,有一個問題thoe :(有一個語言切換器在網站上,如果和英語瀏覽器試圖切換到瑞典語腳本將他重定向到英語。是否有解決方法? – user1046583

+0

@ user1046583你可以發佈切換器代碼嗎?或者鏈接到現場版本的網站..? –