2015-10-05 11 views
5

ブラウザの言語に合わせて、別のページにリダイレクトする必要があります。たとえば、ブラウザの言語がにリダイレクトする場合は、englishとなります。ユーザーを別のページにリダイレクトする方法は?

私はこのようにやろう:

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

それは作品ですが、ページを常に再ロードされます。どのようにそれを解決するか、別の解決策を促す?

+0

どのようにこの作品ができたuserLang出力は、EN-USの場合は?デフォルトケース内の –

+0

は、userLangの値を記録し、その値に基づいてケースを修正します。 – Vanojx1

+0

OPのように、私はクライアントでこれをやっているつもりはありません。これはサーバー上で行う必要があります。 –

答えて

4

ユーザーが既に正しい言語サイトにいるかどうかをチェックしていないため、ページは常にリロードされます。

ページには、サーバー側で生成されたページ言語用のjavascript変数を格納できます。たとえば:

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

'de'のときは、スイッチを押して'/de'にリダイレクトし、ページをリロードして再び同じことをします。それはまだループします。あなたの最初のケースでは何がポイントですか?その最初のケースを打つことは決してありません。 –

+1

@JayMeeだから 'thisLanguage'はサーバー側の構造に依存しています – Hacketo

+1

'/de'ページには 'var userLanguage = 'de''という変数があり、これは現在の' userLang'と一致し、リダイレクトされません。何か不足していますか? – Curt

0

私はあなたが読んで言語を検出する必要があると思う:ユーザーの言語がthisLanguageに異なる場合

var thisLanguage = 'en'; 

次にこのことを考慮に入れて、唯一のリダイレクトを適用するにはJavaScriptのロジックを変更します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; 
    } 
}); 
+0

GETパラメータがある場合、動作しない – Hacketo

0

URLは、このような現在のURLの何かと同じであれば我々は確認することができます。

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

GETパラメータがある場合は動作しません – Hacketo

+0

ここで '$(document).ready'を使用する理由は? – qup

0

以下のようなものを試してみてください:

$(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 
    } 
}); 
関連する問題