0
Türkçe projelerde locale tuzakları
Türkçe karakterler yüzünden sessizce bozulan kod parçaları: i/I dönüşümü, sıralama, arama, slug üretimi. CLAUDE.md'ye konunca Claude bu hataları baştan yapmaz.
yazan kuscubasiece·8 Eylül 2026
Kaynak: MDN
Türkçe karakterler yüzünden sessizce bozulan kod parçaları: i/I dönüşümü, sıralama, arama, slug üretimi. CLAUDE.md'ye konunca Claude bu hataları baştan yapmaz.
Kaynak: MDN
curl -sL https://www.antrophiclove.com/api/kaynak/turkce-projelerde-locale-tuzaklari/rawBu içerik mevcut dosyaya elle harmanlanmalı: CLAUDE.md
# CLAUDE.md'ye ekle
## Türkçe locale kuralları
### Büyük/küçük harf
JavaScript'te `toLowerCase()` Türkçe'de yanlış çalışır:
"IST".toLowerCase() -> "ist" (beklenen "ıst")
"İSTANBUL".toLowerCase() -> "i̇stanbul" (birleşik nokta!)
Kullanıcı metnini karşılaştırırken:
a.toLocaleLowerCase("tr") === b.toLocaleLowerCase("tr")
Ama teknik değerlerde (e-posta, slug, HTTP başlığı, dosya uzantısı)
ASLA "tr" locale kullanma — orada `toLowerCase()` doğrudur:
email.toLowerCase() ✓
email.toLocaleLowerCase("tr") ✗ ("I" -> "ı" olur, eşleşme kırılır)
### Sıralama
liste.sort() ✗ Ç, Ğ, İ, Ö, Ş, Ü sona atılır
liste.sort((a, b) => a.localeCompare(b, "tr")) ✓
### Arama ve filtreleme
Kullanıcı "sarı" yazıp "SARI" bulmalı:
const norm = (s) => s.toLocaleLowerCase("tr").normalize("NFC");
### Slug üretimi
Türkçe harfler NFD ile ayrışmaz, elle eşle:
const MAP = { ç:"c", ğ:"g", ı:"i", ö:"o", ş:"s", ü:"u",
Ç:"c", Ğ:"g", İ:"i", I:"i", Ö:"o", Ş:"s", Ü:"u" };
Dikkat: "I" -> "i" ve "İ" -> "i" ikisi de i'ye gider, çakışma olabilir.
### PostgreSQL
Tam metin arama için 'turkish' sözlüğü mevcut:
to_tsvector('turkish', metin)
Sıralamada:
ORDER BY ad COLLATE "tr-TR"
### Tarih ve sayı
new Intl.NumberFormat("tr-TR").format(2410) -> "2.410"
new Intl.DateTimeFormat("tr-TR").format(d)
Binlik ayırıcı nokta, ondalık virgüldür; CSV üretirken ayırıcıyı
noktalı virgül yap yoksa Excel sütunları bozar.