2015-10-05 17 views
5

Tôi cần thực hiện để chuyển hướng người dùng đến một trang khác, theo ngôn ngữ của trình duyệt. Ví dụ: nếu ngôn ngữ của trình duyệt english chuyển hướng đến site.com/en/.Cách chuyển hướng người dùng đến trang khác?

tôi cố gắng làm như thế này:

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

công trình này nhưng trang web được liên tục nạp lại. Làm thế nào để giải quyết nó hoặc nhắc một giải pháp khác?

+0

Làm thế nào có thể làm việc này nếu userLang ra là en-US? –

+0

bên trong trường hợp mặc định ghi lại giá trị của userLang và sửa các trường hợp dựa trên giá trị đó. – Vanojx1

+0

OP, như một sang một bên, tôi sẽ không cố gắng để làm điều này trên máy khách ở tất cả. Điều này nên được thực hiện trên máy chủ. –

Trả lời

4

Trang được tải lại liên tục khi bạn không kiểm tra xem người dùng đã ở đúng trang ngôn ngữ chưa.

Trên các trang của bạn, bạn có thể lưu trữ biến javascript cho ngôn ngữ trang được tạo phía máy chủ. Ví dụ:

var thisLanguage = 'en'; 

Sau đó thay đổi logic javascript của bạn để thực hiện việc này vào tài khoản và chỉ áp dụng chuyển hướng nếu ngôn ngữ của người dùng là khác nhau để 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; 
     } 

    } 
}); 
+1

Khi đó là 'de', nó sẽ nhấn công tắc, chuyển hướng đến'/de', sau đó nó sẽ tải lại trang và thực hiện lại tương tự. Nó vẫn sẽ lặp lại. Và điểm trong trường hợp đầu tiên của bạn là gì? Nó sẽ không bao giờ xảy ra trường hợp đầu tiên. –

+1

@JayMee đó là lý do tại sao 'thisLanguage' phụ thuộc vào xây dựng phía máy chủ – Hacketo

+1

Trên trang'/de' sẽ có biến 'var userLanguage = 'de'' và do đó nó sẽ khớp với' userLang' hiện tại và sẽ không chuyển hướng . Tui bỏ lỡ điều gì vậy? – Curt

0

Tôi nghĩ bạn nên phát hiện ngôn ngữ bằng cách đọc từ URL, vì bạn muốn chuyển hướng người dùng đến URL thích hợp:

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

không thể hoạt động nếu có tham số GET – Hacketo

0

Chúng tôi có thể kiểm tra xem url có giống với url hiện tại như sau:

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

không thể hoạt động nếu có tham số GET – Hacketo

+0

Tại sao lại sử dụng '$ (tài liệu) .ready' tại đây? – qup

0

Hãy thử một cái gì đó như dưới đây:

$(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 
    } 
}); 
Các vấn đề liên quan