antrophiclove
← Kütüphaneye dön
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

Kurulum
curl -sL https://www.antrophiclove.com/api/kaynak/turkce-projelerde-locale-tuzaklari/raw

Bu 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.