temabayimWordPress temaları Türkçe mi? Tema ara
Teknik

WordPress temalarında Türkçe karakter sorunları, İ ve ı dönüşümü ile font alt kümeleri

7 dk okuma · Yayın 18 Ekim 2026 · 9 kaynak

Bu yazıda
  1. Dört i harfi ve büyük harf dönüşümü
  2. WordPress lang özniteliğini nereden alır
  3. Font alt kümeleri ve karışık görünen harfler
  4. Bir temayı beş dakikada sınamak
  5. Sorunu kimin düzelteceği

Büyük harfle yazılan bir menüde “İLETİŞİM” yerine “ILETIŞIM” görüyorsanız sorun çeviride değil, sayfanın dil bilgisinde ya da temanın CSS’indedir. Başlıkta ğ, ş ve İ harfleri öbür harflerden biraz farklı bir yazı tipiyle görünüyorsa sorun yine çeviride değil, temanın yüklediği fontun harf kapsamındadır. Bu iki sorun tema tamamen Türkçeye çevrilmiş olsa bile çıkabilir. Aşağıda ikisinin de nedenini, standartların ne söylediğini ve bir temayı birkaç dakikada nasıl sınayacağınızı anlatıyoruz.

Dört i harfi ve büyük harf dönüşümü

Türkçede iki ayrı i vardır ve her birinin kendi büyük harfi bulunur. Noktalı i’nin büyüğü İ, noktasız ı’nın büyüğü I’dır. İngilizce ve öbür Latin alfabeli dillerin çoğunda ise i’nin büyüğü I’dır. Bilgisayarın varsayılan büyük harf kuralı İngilizce düzenine göre çalıştığı için dil bilgisi verilmezse “iletişim” kelimesi “ILETIŞIM” olur.

MDN’nin text-transform sayfası bunu açıkça yazar. Özellik dile özgü büyük-küçük harf kurallarını dikkate alır ve Türkçe (tr), Azerice (az), Kırım Tatarcası, Tatarca ve Başkurtça gibi Türk dillerinde noktalı ve noktasız iki i ile iki eşleşme bulunur, i/İ ve ı/I. Aynı sayfa dilin HTML’deki lang özniteliğiyle belirlendiğini ve dile özgü kuralların desteğinin tarayıcıdan tarayıcıya değiştiğini de not eder.

Yani text-transform: uppercase kuralının Türkçe doğru çalışması iki şeye bağlıdır.

  1. Metnin bulunduğu öğenin dili Türkçe olarak tanımlanmış olmalı.
  2. Tarayıcı bu dile özgü dönüşümü desteklemeli.

İkinci madde sizin elinizde değildir. Birinci madde ise WordPress’te çoğu zaman kendiliğinden doğru gelir, ama tema bunu bozabilir.

WordPress lang özniteliğini nereden alır

Klasik temalarda <html> etiketi language_attributes() fonksiyonuyla yazılır. Bu fonksiyon get_language_attributes() sonucunu basar. Kaynak koda göre dil değeri get_bloginfo( 'language' ) ile alınır. Bu değer önce çekirdek çevirisindeki html_lang_attribute dizesine bakar, uygun değilse sitenin yerel kodunu (tr_TR) alıp alt çizgiyi tireye çevirir. Site sağdan sola yazılan bir dildeyse aynı fonksiyon dir="rtl" de ekler. Sonuç language_attributes filtresinden geçer.

Türkçe bir WordPress kurulumunda çıktı tr ile başlayan bir dil etiketidir. Örneğin tr.wordpress.org’un ana sayfası 18 Ekim 2026’da <html lang="tr"> ile açılıyordu. Blok temalarında aynı etiketi çekirdek basar.

Sorun genellikle şu durumlarda çıkar.

  • Tema dil etiketini elle yazmıştır. header.php içinde language_attributes() yerine sabit lang="en-US" yazan bir tema, site Türkçe olsa bile tarayıcıya sayfanın İngilizce olduğunu söyler. Sayfanın kaynağını açıp (Ctrl+U) ilk satırlara bakarak bunu hemen görebilirsiniz.
  • Site dili Türkçe değildir. Ayarlar > Genel’deki site dili İngilizceyse lang değeri de İngilizce olur. Bu ayarın ve profil dilinin farkını site dili ayarları yazısında anlattık.
  • Bir eklenti ya da önbellek eski çıktıyı sunuyordur. Dili değiştirdikten sonra sayfa önbelleğini temizlemeden yapılan kontroller yanıltıcı olur.

MDN’nin lang sayfası da önemli bir ayrıntı verir. Bir öğede lang yoksa öğe dilini üst öğesinden devralır, hiçbir yerde dil belirtilmemişse dil “bilinmiyor” sayılır. Kök etikette doğru lang="tr" bulunması, sayfadaki her başlığın ve menünün Türkçe kurala göre büyük harfe çevrilmesi için yeterlidir. Aynı sayfa bu özniteliğin ekran okuyucuların doğru telaffuzu için de kullanıldığını yazar, yani yanlış lang değeri erişilebilirliği de etkiler.

JavaScript ile büyük harf

Bazı temalar başlıkları CSS yerine JavaScript ile büyük harfe çevirir. JavaScript’te toUpperCase() dilden bağımsız çalışır. MDN’nin toLocaleUpperCase() sayfasındaki örnekte "istanbul" dizesi en-US ile "ISTANBUL", TR ile "İSTANBUL" sonucunu verir. Temanın bir kaydırıcısında ya da sayaç bileşeninde yalnızca o alanda “ISTANBUL” görüyorsanız, kök etiketin dili doğru olsa bile sorun bu fonksiyonda olabilir. Bu bir tema hatasıdır ve temanın destek forumuna bildirilmelidir, Türkçe çeviri dosyasıyla düzeltilemez.

Ters yön, küçük harfe çevirme

Aynı kural text-transform: lowercase için de geçerlidir. Dil İngilizce tanımlıysa “ISPARTA” küçük harfe “isparta” olarak çevrilir, Türkçe tanımlıysa “ısparta” olur. Burada doğru sonucun “ısparta” olması garip görünebilir. Bu, yazarın büyük harfle yazdığı kelimenin aslında hangi i’yi içerdiğini tarayıcının bilemeyeceğini gösterir. Metni doğru harflerle küçük yazıp gerekirse CSS ile büyütmek, tersinden daha güvenlidir.

Font alt kümeleri ve karışık görünen harfler

İkinci sorun yazı tipiyle ilgilidir. Web fontları dosya boyutunu küçültmek için alfabelere göre parçalara, yani alt kümelere (subset) bölünür. Türkçe için bu bölünmenin sınırı tam olarak Türkçe harflerin ortasından geçer.

Google Fonts’un CSS2 API’si modern tarayıcılara her alt küme için ayrı bir @font-face kuralı ve kuralın kapsadığı karakterleri gösteren bir unicode-range döndürür. 18 Ekim 2026’da Inter ailesi için aldığımız stil dosyasında Latin ile ilgili iki blok vardı.

Alt küme unicode-range başı Kapsadığı Türkçe harfler
latin U+0000-00FF, U+0131, … ç Ç ö Ö ü Ü ve ı
latin-ext U+0100-02BA, … ğ Ğ ş Ş İ

Tablodaki ayrım Unicode numaralarından gelir. ç, ö, ü ve büyükleri U+00FF altındadır. ı (U+0131) Google’ın latin bloğuna ayrıca eklenmiştir. Buna karşılık Ğ (U+011E), ğ (U+011F), İ (U+0130), Ş (U+015E) ve ş (U+015F) yalnızca latin-ext bloğundadır.

MDN’nin unicode-range sayfasına göre bu tanımlayıcının amacı, tarayıcının yalnızca sayfadaki metin için gereken font parçasını indirmesidir. Sayfa aralıktaki hiçbir karakteri kullanmıyorsa o parça indirilmez. Google Fonts’u doğrudan kullanan bir temada bu sorun çıkarmaz, çünkü Türkçe sayfa ğ ya da ş içerdiği anda tarayıcı latin-ext parçasını da indirir.

Sorun, font dosyalarını kendi sunucusundan sunan (self-host) temalarda ortaya çıkar. Tema yalnızca latin parçasını pakete koymuşsa ya da kullandığı font ailesinde latin-ext hiç yoksa, ğ, ş ve İ için font bulunamaz. MDN’nin font-family sayfası tarayıcının yazı tipini karakter karakter seçtiğini, bir fontta gereken karakterin çizimi (glyph) yoksa listedeki sonraki fontların denendiğini yazar. Sonuç, aynı kelimede iki farklı yazı tipidir. “Değişiklik” kelimesinde ğ ve ş harfleri sistem fontuyla, geri kalanı temanın fontuyla çizilir. Harfler biraz kalın, biraz alçak ya da farklı genişlikte görünür. Çeviri tamdır ama sayfa özensiz durur.

Bir ailenin latin-ext desteği olup olmadığını Google Fonts’un CSS2 adresini tarayıcıda açarak görebilirsiniz. Örneğin https://fonts.googleapis.com/css2?family=Inter&display=swap adresinin çıktısında /* latin-ext */ açıklamalı bir blok varsa aile Türkçe harflerin tamamını içerir. Böyle bir blok yoksa aile Türkçe için uygun değildir.

font-display ve ilk yükleme

Tema fontu yüklenene kadar tarayıcının ne göstereceğini font-display belirler. MDN tanımlarına göre swap değeri fonta çok kısa bir engelleme süresi ve sonsuz bir değiştirme süresi verir. Metin önce yedek fontla görünür, web fontu gelince onunla değiştirilir. block değeri ise kısa bir süre metni görünmez tutar. Google Fonts’un CSS2 belgesi varsayılan auto dışında bir değer belirtmenin çoğu zaman uygun olduğunu söyler ve örneklerinde display=swap kullanır.

Türkçe açısından ilginç olan şudur. latin-ext parçası, sayfada ğ ya da ş görüldükten sonra ayrı bir istekle indirildiği için yavaş bağlantıda ğ ve ş harfleri kısa bir an yedek fontla görünüp sonra değişebilir. Bu kalıcı bir hata değildir, kalıcı olan karışık görüntü yukarıdaki eksik alt küme durumudur. İkisini ayırmak için sayfayı birkaç saniye bekleyip yenileyin. Karışıklık sürüyorsa font eksiktir.

Bir temayı beş dakikada sınamak

Tema kurulduktan sonra bir deneme yazısı açıp aşağıdaki cümleyi hem başlığa hem paragrafa yazın. Cümle Türkçenin özel harflerinin hepsini içerir.

Pijamalı hasta yağız şoföre çabucak güvendi. İĞNE IŞIK ÇÖĞÜŞ İçeri Işık.

Sonra şunlara bakın.

  1. Büyük harf dönüşümü. Temanın büyük harfle gösterdiği bir yer bulun. Menü öğeleri, buton yazıları, kategori etiketleri ve widget başlıkları sık örneklerdir. Bir menü öğesinin adını “iletişim” yapın. Doğru sonuç “İLETİŞİM”, yanlış sonuç “ILETIŞIM” olur.
  2. Kök etiketin dili. Sayfanın kaynağında <html satırını bulun. lang="tr" ya da tr ile başlayan bir değer görmelisiniz.
  3. Harf tutarlılığı. Deneme cümlesini büyütüp (Ctrl ve +) ğ, ş, İ harflerini komşularıyla karşılaştırın. Kalınlık, yükseklik ya da çizgi biçimi farklıysa font latin-ext içermiyordur.
  4. Kalın ve italik. Aynı denemeyi kalın ve italik metinle yineleyin. Tema normal ağırlıkta latin-ext yüklerken kalın ağırlıkta yalnızca latin yüklüyor olabilir.
  5. Tarayıcı geliştirici araçları. Tarayıcının öğe denetleyicisindeki “Computed” ya da “Fonts” bölümü bir öğede hangi fontların gerçekten kullanıldığını gösterir. Aynı başlıkta iki font adı görüyorsanız harf karışımı vardır.

Bu kontrol, translate.wordpress.org’daki çeviri yüzdesinin göstermediği bir şeyi ölçer. Tam Türkçe temalar listesindeki bir tema bile yanlış fontla gelebilir, çeviri yüzdesi düşük bir tema da harfleri kusursuz gösterebilir. Tema seçerken bu iki ölçütü birlikte değerlendirmek için tema listemizdeki çeviri verisini bu küçük testle tamamlayabilirsiniz.

Sorunu kimin düzelteceği

Belirti Olası neden Nerede düzelir
Her yerde İ yerine I Kök etikette yanlış ya da eksik lang Site dili ayarı ya da temanın header.php dosyası
Yalnızca bir bileşende I JavaScript ile toUpperCase() Tema kodu, geliştiriciye bildirim
ğ ş İ farklı fontla Fontta latin-ext eksik Temanın font ayarı ya da başka font seçimi
ğ ş bir an farklı, sonra düzgün latin-ext parçasının geç inmesi Gerekmez, font-display davranışı

Tema geliştiricisine bildirim yaparken belirtiyi, deneme cümlesini ve hangi tarayıcıyı kullandığınızı yazmanız düzeltmeyi hızlandırır. Temanın çevirisine katkı vermek isterseniz, karakter sorunlarından bağımsız olarak, adımları tema çevirisine katkı yazısında bulabilirsiniz.

Kaynaklar

  1. MDN Web Docs, text-transform
  2. MDN Web Docs, lang global özniteliği
  3. MDN Web Docs, String.prototype.toLocaleUpperCase()
  4. MDN Web Docs, font-family
  5. MDN Web Docs, unicode-range
  6. MDN Web Docs, font-display
  7. Google Fonts, CSS API v2
  8. WordPress Developer Resources, get_language_attributes()
  9. WordPress Developer Resources, get_bloginfo()

Bu yazıdaki tema rakamları 18 Ekim 2026 tarihli WordPress.org verisinden alındı. Bir hata gördüyseniz bize yazın.

Devamını okuyun