Cách thích hợp là xem tiêu đề Ngôn ngữ chấp nhận HTTP được gửi đến máy chủ. Điều này chứa danh sách các ngôn ngữ có trọng số theo thứ tự mà người dùng đã định cấu hình trình duyệt của họ để thích.
Thật không may, tiêu đề này không có sẵn để đọc bên trong JavaScript; tất cả những gì bạn nhận được là navigator.language
, nó cho bạn biết phiên bản trình duyệt web đã được cài đặt. Điều này không nhất thiết giống với ngôn ngữ ưa thích của người dùng. Trên IE, thay vào đó, bạn nhận được systemLanguage
(ngôn ngữ được cài đặt hệ điều hành), browserLanguage
(giống như language
) và userLanguage
(khu vực hệ điều hành được cấu hình bởi người dùng), tất cả đều không có ích tương tự.
Nếu tôi phải lựa chọn giữa các thuộc tính đó, userLanguage
trước tiên tôi sẽ đánh hơi , quay lại language
và chỉ sau đó (nếu những ngôn ngữ đó không phù hợp với bất kỳ ngôn ngữ có sẵn nào) browserLanguage
và cuối cùng systemLanguage
.
Nếu bạn có thể đặt tập lệnh phía máy chủ ở một nơi khác trên mạng chỉ cần đọc tiêu đề Ngôn ngữ chấp nhận và gửi nó ra dưới dạng tệp JavaScript có giá trị tiêu đề trong chuỗi, ví dụ:
var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3';
sau đó, bạn có thể bao gồm <script src> trỏ đến dịch vụ bên ngoài đó trong HTML và sử dụng JavaScript để phân tích tiêu đề ngôn ngữ. Tuy nhiên, tôi không biết bất kỳ mã thư viện hiện có nào để thực hiện việc này, vì phân tích ngôn ngữ Chấp nhận hầu như luôn được thực hiện ở phía máy chủ.
Dù cuối cùng bạn làm gì, bạn chắc chắn cần một người dùng ghi đè vì nó sẽ luôn đoán sai đối với một số người. Thông thường, dễ nhất là đặt cài đặt ngôn ngữ trong URL (ví dụ: http: //www.example.com/en/site so với http: //www.example.com/de/site) và cho phép người dùng nhấp vào liên kết giữa hai. Đôi khi bạn muốn có một URL duy nhất cho cả hai phiên bản ngôn ngữ, trong trường hợp đó bạn phải lưu trữ cài đặt trong cookie, nhưng điều này có thể gây nhầm lẫn cho các tác nhân người dùng không hỗ trợ cookie và công cụ tìm kiếm.