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.