Nasıl otomatik olarak PHP bir kullanıcının yerel ayarlarım?

4 Cevap php

Kullanıcının HTTP_ACCEPT_LANGUAGE ayrıştırmak ve PHP yerel ayarlamak için kolay bir yol var mı?

Ben Zend framework bunu yapmak için bir yöntem olduğunu biliyorum, ama ben yerine sadece kullanmak için bütün çerçevesini yüklemek istediğinizi işlevsellik bir bit.

ARMUT I18Nv2 paket beta ve neredeyse üç yıl boyunca değişmemiş, yani doğrusu bu mümkünse kullanmayın ediyorum.

Windows'ın yerel dizeleri dünyanın geri kalanından farklı olduğundan sunucusu (Alman "deu" ya da "Alman" yerine "de" of ..., Windows üzerinde çalışan ya da değil eğer anlamaya eğer da güzel olurdu. )

4 Cevap

Güzel bir çözüm on its way.

Bu olmadan bu başlık ayrıştırmak gerekir. Bu noktalı virgülle ayrılmış yerel ve niteliklerin bir virgülle ayrılmış listesi.

Bu gibi bakabilirsiniz:

en_US, en;q=0.8, fr_CA;q=0.2, *;q=0.1

setlocale() kabul edene ve ardından her yerel deneyin. Bunların hiçbiri maç olabilir hazırlıklı olun.

Bazı kullanıcılar yanlış tarayıcıları olabilir, çünkü bunun çok önemli bir şey üzerinde temel veya kullanıcıların geçersiz kılmak için izin vermeyin.


Windows yerel, belki de ISO 639-2/3 ISO 639-1 adlarını dönüştürmek için ihtiyacınız var?

Bu (benim düşünceme göre) olması gerektiği gibi kolay değil. Öncelikle size $_SERVER['HTTP_ACCEPT_LANGUAGE'] adlı yerel ayarlar ayıklamak ve q değerlerine göre sıralamak zorunda. Daha sonra (sen sadece doğru charset ile başa çıkmak zorunda kalabilirsiniz) * nix makinede hiçbir sorun olmalıdır verilen yerel, her biri için uygun sistem yerel almak zorunda ama Windows size yerellerde çevirmek gerekecek Windows yerel, örneğin de_DE German_Germany (yine de örneğin app UTF-8 kullanıyorsanız eğer charset sorunları ile başa çıkmak zorunda) olacaktır. Ben bu sorun için bir arama tablosu oluşturmak gerekir düşünüyorum - ve yerel bir yeri vardır ;-)

Hayır Eğer kullandığınız bir maç bulana kadar (q değerleri azalan sıralanır) birbiri ardına yerel try setlocale() (the function will return false verilen yerel set olamazdı eğer) .

Ama sonra ile başa çıkmak için son engel olacak:

The locale information is maintained per process, not per thread. If you are running PHP on a multithreaded server api like IIS or Apache on Windows you may experience sudden changes of locale settings while a script is running although the script itself never called setlocale() itself. This happens due to other scripts running in different threads of the same process at the same time changing the processwide locale using setlocale().

(Bkz: http://de2.php.net/manual/en/function.setlocale.php)

Bu set, farklı bir yerelle başka bir kullanıcı sadece web sayfasını vurmak çünkü bir komut dosyası yürütülmesi sırasında ani yerel değişiklikler yaşayacaksınız anlamına gelir.

Bu nedenle söz konusu Zend_Locale does not rely on the PHP function setlocale() (sadece sistem yerel bilgi almak için kullanılır), ancak bunun yerine Unicode CLDR Project tarafından sağlanan verilere dayalı bir sistem kullanır. Bu, tüm bu setlocale() konulardan bileşen bağımsız yapar ama bu aynı zamanda (örneğin, sıralama) yerele farkında string işlemleri için destek eksikliği gibi diğer bazı eksiklikleri tanıttı.

I know the Zend framework has a method to do this, but I'd rather not install the whole framework just to use that one bit of functionality.

Zend hakkında iyi haber, bunu tüm yüklemeniz gerekmez. Bu losely birleştiğinde çerçevesi bulunuyor ve sadece diğer bileşenlerin herhangi kullanmadan Zend_Locale yararlanabilirler. Belki Zend_Translate ile birleştirmek istiyorum.

Check it out