Cara yang tepat adalah dengan melihat tajuk Bahasa Terima HTTP yang dikirim ke server. Ini berisi daftar bahasa yang dipesan dan tertimbang yang telah dikonfigurasikan pengguna untuk browser mereka.
Sayangnya tajuk ini tidak tersedia untuk dibaca di dalam JavaScript; yang Anda dapatkan hanyalah navigator.language
, yang memberi tahu Anda versi lokal dari browser web yang diinstal. Ini tidak harus sama dengan bahasa pilihan pengguna. Pada IE Anda malah mendapatkan systemLanguage
(bahasa yang diinstal OS), browserLanguage
(sama dengan language
) dan userLanguage
(wilayah OS yang dikonfigurasi pengguna), yang semuanya sama-sama tidak membantu.
Jika saya harus memilih di antara sifat-sifat itu, saya akan mengendus userLanguage
terlebih dahulu, kembali ke language
dan hanya setelah itu (jika itu tidak cocok dengan bahasa yang tersedia) melihat browserLanguage
dan akhirnya systemLanguage
.
Jika Anda dapat menempatkan skrip sisi-server di tempat lain di internet yang cukup membaca header Terima-Bahasa dan meludahkannya kembali sebagai file JavaScript dengan nilai header di string, mis .: .:
var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3';
maka Anda dapat menyertakan <script src> yang menunjuk pada layanan eksternal dalam HTML, dan menggunakan JavaScript untuk mem-parsing header bahasa. Saya tidak tahu kode perpustakaan yang ada untuk melakukan ini, karena parsing Accept-Language hampir selalu dilakukan di sisi server.
Apa pun yang Anda lakukan pada akhirnya, Anda tentu saja harus menimpa pengguna karena akan selalu menebak salah untuk beberapa orang. Seringkali lebih mudah untuk meletakkan pengaturan bahasa di URL (mis. Http: //www.example.com/en/site vs http: //www.example.com/de/site), dan biarkan pengguna mengklik hubungan antara keduanya. Kadang-kadang Anda memang menginginkan satu URL untuk kedua versi bahasa, dalam hal ini Anda harus menyimpan pengaturan di cookie, tetapi ini dapat membingungkan agen pengguna tanpa dukungan untuk cookie dan mesin pencari.