php‘de 2005 yılından beri tam olarak çözülmemiş bir Türkçe yereli problemi bulunuyor. http://bugs.php.net/bug.php?id=18556. Eğer LC_CTYPE yerel değişkenini tr_TR.utf-8, tr_CY.utf-8, az_AZ.utf-8, ku_TR.utf-8 olarak atarsanız, php içinde büyük harfle I geçen fonksiyonları, metodları, sınıfları veya değişkenleri tanımamaya başlıyor.  Halen daha herhangi bir php sürümünde çözülüp çözülmediğinden de emin değilim.

Bu problemi sıkça kullandığımı symfony programalama iskeletinde (Berk sana selam olsun ;) ) i18N kullanmaya başlayınca yaşadım. Ne zaman yereli tr olarak atasam, iskeletin büyük kısmı çalışmamaya başlıyor. Hatta uygulama anında ölümcül hata alarak ölüyor.

Fatal error: Call to undefined method sfContext::getInstance() in

Bu sorunu biraz derinlemesine araştırınca, problemin i18n/sfI18N.class.php dosyasında tanımlı olan sfI18N sınıfında bulunan setCulture metodunda olduğunu buldum. LC_CTYPE, setCulture içinde verdiğimiz tr_TR.utf8 yereli olarak atanıyor. Bu durumda da uygulama anında ölüyor.

Bunu çözmek için uygulamamın myUser sınıfında setCulture metodunu değiştirerek çözdüm. Böylece hem iskeletin kaynak koduna dokunmak zorunda kalmadım hem de hayatıma rahatça devam ettim. Eğer siz de bu sorunu yaşıyorsanız, aşağıdaki satırları uygulamanızda kullanbilirsiniz.

class myUser extends sfUser
{
public function setCulture($culture)
{
parent::setCulture($culture);
setlocale(LC_CTYPE, ‘en_US.utf8′);
}

}