
Alfabetik sıralama yaptığınızda Türkçe karakterli kelimeler yanlış yere düşüyor. Küçük harfe çevirme işlemi "I" harfini beklediğiniz gibi dönüştürmüyor. Tarih biçimi bir sunucuda farklı, diğerinde farklı görünüyor.
Bu sorunların ortak kaynağı, sunucunun dil ve bölge ayarlarıdır. Bu yazı, VDS sunucu üzerinde bu ayarları anlatıyor.
Bölge Ayarı Neyi Belirler?
| Alan | Etkilenen davranış |
|---|---|
| Sıralama | Alfabetik sıra, karakter önceliği |
| Büyük-küçük harf dönüşümü | Hangi harfin hangi karşılığa döndüğü |
| Tarih ve saat biçimi | Gün-ay sırası, ay adları |
| Sayı biçimi | Ondalık ayırıcı, binlik ayırıcı |
| Para birimi | Sembol ve konumu |
| Karakter kodlaması | Hangi karakter setinin kullanılacağı |
Dördüncü satır, veri işleme açısından en tehlikeli olanıdır: bazı bölgelerde ondalık ayırıcı nokta, bazılarında virgüldür. Bir sayıyı metne çevirip sonra tekrar sayıya döndüren bir kod, sunucunun ayarına göre farklı sonuç üretebilir.
Türkçe'nin Özel Durumu
Türkçe, büyük-küçük harf dönüşümünde diğer dillerden ayrılan bir kurala sahiptir:
- Noktalı ve noktasız i ayrımı. Türkçe'de büyük "I" harfinin küçüğü noktasız, büyük "İ" harfinin küçüğü noktalıdır.
- Diğer dillerde bu ayrım yoktur. Büyük "I" küçüldüğünde noktalı "i" olur.
Bu, gerçek sorunlar üretir. Klasik örnek: bir dosya adı veya komut karşılaştırması küçük harfe çevrilerek yapılır ve Türkçe bölge ayarı olan bir sunucuda beklenmedik sonuç verir.
Pratik sonuç: kullanıcıya gösterilmeyen, teknik amaçlı karşılaştırmalarda dile bağlı dönüşüm kullanmayın. Bu tür karşılaştırmalar için dilden bağımsız bir yöntem tercih edilmelidir.
Sıralama Sorunu
Alfabetik sıralama, bölge ayarına göre değişir. Türkçe alfabede ç, ğ, ı, ö, ş ve ü harfleri belirli konumlardadır — ama sunucu farklı bir bölge ayarındaysa bu harfler sona atılır veya yanlış yere yerleştirilir.
Bu, kullanıcıya doğrudan görünen bir hatadır: ürün listesi veya isim listesi alfabetik sıralandığında Türkçe karakterli kayıtlar yanlış yerde çıkar.
Çözüm iki katmanda olabilir:
- Veritabanı seviyesinde. Tablo ve sütunlarda Türkçe sıralama kuralı tanımlanır.
- Uygulama seviyesinde. Sıralama, dil bilgisiyle birlikte yapılır.
Birinci yöntem daha temizdir ve tutarlıdır: veritabanı doğru sıralarsa uygulamanın ek iş yapması gerekmez. Ancak sıralama kuralının doğru seçilmesi gerekir — büyük-küçük harf duyarlılığı da bu kuralın parçasıdır.
Sunucu Tarafında Ayarlar
Sunucunun bölge ayarı, sistem genelinde varsayılan davranışı belirler. Kontrol edilecekler:
- Sistemin varsayılan bölge ayarı nedir?
- Karakter kodlaması UTF-8 mi?
- Gerekli bölge tanımları kurulu mu?
- Servisler hangi ayarla çalışıyor?
Üçüncü madde minimal sunucu kurulumlarında sık karşılaşılan bir eksikliktir: bölge tanımı sistemde üretilmemişse, o ayarı kullanmak istediğinizde geçersiz sayılır ve varsayılana düşer.
Dördüncü madde ise ince bir ayrımdır: bir servis, sizin kullanıcı oturumunuzdan farklı bir bölge ayarıyla çalışıyor olabilir. Siz terminalde doğru sonuç alırken, web sunucusu üzerinden çalışan uygulama farklı davranabilir.
Uygulama Tarafında
Sunucu ayarına bağımlı kalmak yerine, uygulamanızın kendi ayarını tanımlaması daha güvenlidir:
- Uygulama başlangıcında bölge ayarını açıkça belirtin. Varsayılana güvenmeyin.
- Kritik işlemlerde dilden bağımsız yöntem kullanın. Teknik karşılaştırmalar ve sayı dönüşümleri.
- Kullanıcıya gösterimde dil bilgisi kullanın. Tarih ve sayı biçimlendirmesi.
- Veri saklarken standart biçim kullanın. Yerelleştirme yalnızca sunum katmanında olsun.
Dördüncü madde temel bir ilkedir ve birçok sorunu baştan önler: veriyi standart biçimde saklayın, yerelleştirmeyi yalnızca ekrana yazarken yapın. Böylece sunucu ayarı değişse bile veriniz etkilenmez.
Veritabanı Karakter Kuralları
Veritabanında iki ayrı kavram vardır ve karıştırılır:
- Karakter seti. Hangi karakterlerin saklanabileceği.
- Sıralama kuralı. Karakterlerin nasıl karşılaştırılıp sıralanacağı.
İkincisi, beklenmedik davranışlar üretebilir:
- Büyük-küçük harf duyarsız bir kuralda "Ahmet" ve "ahmet" aynı sayılır
- Aksan duyarsız bir kuralda "sarı" ve "sari" eşleşebilir
- Benzersizlik kısıtları buna göre çalışır
Üçüncü madde gerçek bir soruna yol açar: kullanıcı adı alanında büyük-küçük harf duyarsız bir kural varsa, "Ahmet" kullanıcı adı alınmışsa "ahmet" alınamaz. Bu istenen davranış olabilir de olmayabilir de — bilinçli bir tercih olmalıdır.
Test Etmek
Bu ayarların doğru olduğunu doğrulamak için basit testler:
- Türkçe karakterli bir liste oluşturup sıralayın
- Büyük-küçük harf dönüşümünü "I" ve "i" ile test edin
- Ondalıklı bir sayıyı metne çevirip geri döndürün
- Tarih biçimlendirmesini kontrol edin
- Aynı testleri web sunucusu üzerinden de yapın
Beşinci madde kritiktir: terminalden yapılan test, web sunucusu üzerinden çalışan uygulamanın davranışını yansıtmayabilir. Gerçek çalışma ortamında test edin.
Sunucu Taşımada
Bölge ayarı sorunları en çok sunucu taşıma sonrası ortaya çıkar. Yeni sunucunun varsayılan ayarı farklıdır ve daha önce fark edilmeyen bağımlılıklar açığa çıkar.
Taşıma kontrol listesine ekleyin:
- Eski ve yeni sunucunun bölge ayarlarını karşılaştırın
- Gerekli bölge tanımlarının kurulu olduğunu doğrulayın
- Veritabanı karakter seti ve sıralama kurallarını kontrol edin
- Sıralama ve biçimlendirme testlerini tekrarlayın
Bu kontrol birkaç dakika sürer ama sanal sunucu taşıma sonrası ortaya çıkan ve teşhisi zor olan bir sorun sınıfını baştan eler.
Sonuç
Bölge ayarları, fark edilmediği sürece görünmeyen ama ortaya çıktığında teşhisi zor sorunlar üretir — yanlış alfabetik sıralama, beklenmedik harf dönüşümü ve sayı biçimi hataları. Türkçe'nin noktalı-noktasız i ayrımı, teknik karşılaştırmalarda özellikle dikkat gerektirir: kullanıcıya gösterilmeyen karşılaştırmalarda dile bağlı dönüşüm kullanmayın. Temel ilke ise şudur: veriyi standart biçimde saklayın, yerelleştirmeyi yalnızca sunum katmanında yapın. Ve testlerinizi terminalden değil, gerçek çalışma ortamından yapın.
Sıkça Sorulan Sorular (SSS)
Türkçe karakterler neden yanlış sıralanıyor?
Sunucunun veya veritabanının sıralama kuralı Türkçe alfabeye göre tanımlanmamış. Çözüm tercihen veritabanı seviyesindedir: tablo ve sütunlarda Türkçe sıralama kuralı tanımlayın, böylece uygulamanın ek iş yapması gerekmez.
"I" harfi dönüşümü neden sorun çıkarıyor?
Türkçe'de büyük "I" küçüldüğünde noktasız "ı", büyük "İ" küçüldüğünde noktalı "i" olur; diğer dillerde bu ayrım yoktur. Teknik amaçlı karşılaştırmalarda dile bağlı dönüşüm kullanmak, Türkçe bölge ayarlı sunucularda beklenmedik sonuç verir.
Sayı dönüşümlerinde neden hata alıyorum?
Bazı bölgelerde ondalık ayırıcı nokta, bazılarında virgüldür. Sunucu ayarına bağlı çalışan bir sayı-metin dönüşümü, farklı sunucularda farklı sonuç üretir. Veriyi standart biçimde saklayın, yerelleştirmeyi yalnızca ekrana yazarken yapın.
Terminalde doğru çalışıyor ama sitede yanlış, neden?
Web sunucusu üzerinden çalışan uygulama, sizin kullanıcı oturumunuzdan farklı bir bölge ayarıyla çalışıyor olabilir. Testlerinizi mutlaka gerçek çalışma ortamında yapın ve uygulamanızın bölge ayarını başlangıçta açıkça tanımlayın.