Tarayıcı dili destekliyorsa nasıl algılamak?

4 Cevap php

Ben çok dilli bir web sitesi inşa ediyorum. Bu PHP veya JavaScript kullanarak belirli bir dil yüklüyse / kullanıcının makinede desteklenen kontrol etmek mümkün mü? Bu tespit ve dil yüklü / desteklenen değilse kullanıcıya bir mesaj görüntülemek için istiyorum.

Thanks, Mark.

4 Cevap

Tespit hangi dilleri de oldukça mümkün olmayabilir installed vardır ...

Yani, genel olarak, o anlayabileceği dilde - ... Ama kullanıcı web sitelerinden almak için istekli olduğu dilleri algılayabilir.

Çoğu tarayıcı gibi "fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3" (this is what my current browser send to websites I am visiting) gibi bir değeri olabilir "Accept-Language" adında bir HTTP Üstbilgi, göndermek

PHP tarafında, $_SERVER dizide bu alabilirsiniz:

var_dump($_SERVER['HTTP_ACCEPT_LANGUAGE']);

Çıktısı:

string 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3' (length=35)

İşte, ben web siteleri fransız beni içerik göndermek istediğinizi belirtir; ama ben de ingilizce (tercihen ABD İngilizce, ama ben de sadece düz varsayılan ingilizce varım) kabul etmesini


You can find quite a lot of examples of how to parse this in PHP ; for instance : Parse Accept-Language to detect a user's language.

Bu makalede sağlanan kodu kullanarak, ben dillerin bu dizi olsun:

array
  'fr' => int 1
  'fr-fr' => string '0.8' (length=3)
  'en-us' => string '0.5' (length=3)
  'en' => string '0.3' (length=3)

yani:

  • Ben fransız tercih
  • "fr" mümkün değilse, ben "Fransa'da fransız" gibi
  • bu da mümkün değilse, ben "ABD ingilizce" kabul
  • bu çok mümkün değilse ve ben "ingilizce" ile qite iyiyim

Web sitesi bu herhangi bir hizmet edemez Ve eğer ... Eh, ben bir seçim pek yok ve bana göndermek istediğini alacak herhalde ...

Tarayıcılar genellikle size kişinin görmesini beklediğini dili hakkında biraz ipucu verebilir bir Accept-Language başlık göndermek. Benim durumumda, benim tarayıcı stackoverflow.com bu başlığı gönderdi:

Accept-Language: en-us,en;q=0.5

Eğer sunucu tarafında PHP kullanarak olduğunuzu varsayarsak, $ _SERVER değişkeni bu bilgiyi arama yapabilirsiniz:

$_SERVER["HTTP_ACCEPT_LANGUAGE"]

Bu kabul başlığını inceleyerek kullanıcının dil tercihlerini öğrenmek mümkündür. Ben yazdım a paper on the subject tamamen birkaç yıl önce (2000, phew!) bu ve alternatif mekanizmalar bir çift keşfetmek.

Epeyce ilginç kaynaklar yana geldi var; Özellikle, PHP için pragmatik bir yaklaşım ki, this article gibi.

İyi şanslar!

Ben son on yıldır çok dilli şeyler yapıyorum ve benim izlenimim bunu abartmak için çalışıyoruz ki: Eğer ona yanlış bir şekilde bakıyoruz. Sen (OS veya tarayıcı için ya) hangi dili takmamalıydım kullanıcının makinesinde yüklü: OS dil farketmez, ve modern tarayıcılar, etrafında hemen hemen tüm dilleri desteklemektedir (ve NN4, tüm yazı ölümünden beri sistemleri / Unicode standardında bir yer buldu alfabeler). Ne sürdürmelidir user tercih ne dilidir. Kullanıcı 'desteklenen' dillerin sayısına ilişkin darboğaz olduğunu.

Accept-Language başlık iyi bir çözüm olabilir - eğer o amele. Benim deneyim, öyle değil - çok çok sık. Bugün ortalama kullanıcı hala URL adres çubuğuna değil, onun anasayfa arama forma gider olduğunu öğrenmek için var - evet, ben (HTTP başlıkları hakkında bilmek Net nüfusunun fazla% 1-2 istemem iyimser bir ruh hali içinde m gece). Kullanıcılar, mutlu bir şekilde tarayıcı aslında iddia kurulmuştur ne olursa olsun dil ile web sitenize gelecek. Bu dünyada cybercafes gelen turist içerir politikaları "yapılandırma ile ilgisi olmayan karmaşa" güçlü olan şirketler için yurt dışında çalışan gurbetçilerin, eski millet IT yetenekli torunları böylece mizah, paylaşılan makineleri ve bir bizzarre duygusu var whase. Yanlış daha sık değil sanırım gidiyoruz.

Desteklenmeyen diller için bir mesaj görüntüleme kavramı çok şüphelidir. Mesajları ile yaptığı tarama kesmek gerek yok - bir ile kullanıcı, diyelim ki, Pencap tarayıcı sitenize gezinmek mümkün ise o muhtemelen kendi Punjabi kaynağı yok görmek mümkün olacaktır.

Tüm bu bazen basit çözüm en iyisi, şöyle dedi: Ben size kullanıcı seçsin öneririm. Mevcut dillerin listesini koyun ve kullanıcı kodu varsayımları almak için daha mutlu olacaktır. Ve o / o doğru her zaman onu alırsınız.