PHP ile çok dilli uygulamalar, web siteleri geliştiriyorsanız mutlaka HTTP_ACCEPT_LANGUAGE‘yi kullanmanız gerekiyor. Her tarayıcı farklı sonuçlar verecektir bunu örneklerle öncelikle görelim daha sonra bunları temizlemeyide göstereceğim. Boş bir php dosyası oluşturup içerisine alttaki kodu yazın;
<?php echo $_SERVER['HTTP_ACCEPT_LANGUAGE']; ?>
Daha sonra bu dosyayı sunucuya yada localhost’unuza atın ve tüm tarayıcılarınızda çalıştırın. Sonuçlar şu şekilde çıkacaktır;
- Firefox: tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3
- Chrome: tr
- Internet Explorer: tr
- Opera: tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4
- Safari: tr-TR
Sonuçlar birbirinden farklı olduğu için sadece tarayıcının varsayılan dilini almak için alttaki kod ile sadece varsayılan dili temizleyip alabilirsiniz;
<?php $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2); ?>
Bu şekilde ilk 2 karakteri alıp tr seçeneğine ulaşmış olduk. Ama biz bu kadarını öğrenmek istemiyoruz daha çok öğrenmek istiyoruz mesela alternatif dil sunmak, coğrafi bölgelere farklı diller sunmak isteyebiliriz.
Tarayıcılara sunucuya tarayıcının kullanabildiği mevcut dilleri HTTP_ACCEPT_LANGUAGE başlığı ile gönderirler. “tr-TR” ifadesinde “tr” mevcut dili belirtirken, –‘den sonra gelen “TR” ifadesi ise yerleşim bölgesi olarak ifade edilir. Türkiye bunu tam olarak anlayamayız ancak Amerika birleşik devletlerinde şu şekilde bir sonuç almaktayız “en-US” ile “en-CA” arasında daha net anlayacağız. Her iki ifadede tarayıcının dili “en” yani ingilizce olmakla birlikte, yerleşim bölgeleri ISO formatına göre ilkinde Amerika Birleşik Devletleri diğerinde ise Kanada olarak görülür. Buraya kadar anladık peki “q=” ne anlama geliyor? “q” ifadesi öncelik anlamına gelmektedir. q ifadesi 0 (sıfır) ile 1 (bir) arasında bir değer almak zorundadır. Örneğin “tr-TR;q=x” şeklinde bir ifadede “q=x” değeri ne kadar büyükse varsayılan olarak o kullanılır. Firefox’taki sonucumuzu incelersek: tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3 burada tr dilinin 0.8 aldığını görebiliriz.
Bir kaç örneğide incelemek lazım;
- tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3 = tr varsayılan dildir.
- tr-TR,tr;q=0.8,en-US;q=0.9,en;q=0.9 = en varsayılan dildir.
q= : Öncelik anlamına gelir.
tr-TR, en-US, en-CA : TR,US,CA yerleşim bölgelerini ifade etmektedir.