WCAG Başarı Kriterleri · Level AA

WCAG 3.1.2: Bölümlerin Dili

WCAG 3.1.2, sayfanın birincil dilinden farklı bir dilde yazılmış web içeriğindeki herhangi bir pasajın, ifadenin veya bölümün lang niteliği kullanılarak programatik olarak tanımlanmasını gerektirir. Bu, özellikle ekran okuyucular olmak üzere yardımcı teknolojilerin, telaffuz motorlarını otomatik olarak değiştirmesini ve sesli çıktıya güvenen kullanıcılar için içeriği doğru şekilde sunmasını sağlar.

Bu Kuralın Anlamı

WCAG 3.1.2 — Bölümlerin Dili, Anlaşılabilirlik ilkesinin altında yer alan Seviye AA ölçütüdür. Doğrudan, bir sayfanın birincil dilinin tamamı için beyan edilmesini gerektiren 3.1.1 (Sayfanın Dili) üzerine inşa edilir. 3.1.2 ölçütü daha da ileri gider: ne zaman bir pasaj, ifade veya içerik bölümü sayfanın varsayılan dilinden farklı bir dilde yazılmışsa, o bölüm kendi dilini belirten bir lang özniteliği taşımalıdır.

Pratik HTML açısından bu, dil değişimini saran herhangi bir elemana lang özniteliğinin uygulanması anlamına gelir. Öznitelik değeri geçerli bir BCP 47 dil etiketi olmalıdır — örneğin İngilizce için lang='en', Fransızca için lang='fr', Almanca için lang='de' veya Türkçe için lang='tr'. Bölge alt etiketleri (örneğin lang='en-US' veya lang='tr-TR') izinlidir ve lehçeye özgü telaffuzun önemli olduğu durumlarda teşvik edilir.

Başarılı bir durum, insan okuyucunun farklı bir dile ait olduğunu algılayacağı her ayrı dil segmentinin, doğru lang özniteliğine sahip bir eleman içinde sarılmasıyla oluşur. Başarısız bir durum ise, farklı bir dilde bir pasaj bulunduğu halde hiçbir lang özniteliği taşımaması veya yanlış bir öznitelik taşımasıyla ortaya çıkar — örneğin, Fransızca bir cümleyi lang='de' olarak etiketlemek gibi.

WCAG bu ölçüt için üç açık istisna tanır. Birincisi, özel adlar — kişi adları, marka adları, coğrafi adlar — başka bir dilden geliyor olsalar bile dil etiketlemesi gerektirmez. İkincisi, birincil dilin söz varlığı içinde tanınan teknik terimler (örneğin tıbbi bir İngilizce sayfada kullanılan Latince in vitro ifadesi) muaftır. Üçüncüsü, dili belirsiz sözcükler — kökeni belirsiz hale gelecek kadar birincil dile tamamen yerleşmiş sözcükler — de muaftır. Bu istisnalar, birçok ödünç kelimenin doğru anlaşılabilmesi için telaffuz değişimi gerektirmediği yönündeki pratik gerçeği yansıtır.

lang özniteliği, tablo hücresindeki <td> dahil olmak üzere <span>, <p>, <div>, <blockquote>, <section> gibi herhangi bir HTML elemanına yerleştirilebilir. Öznitelik tüm alt elemanlar tarafından devralınır, bu nedenle bir bloğun tamamı hedef dildeyse, üst düzey bir kapsayıcıyı etiketlemek yeterlidir. Kısa ifadeler tek dilli paragrafların arasına serpiştirildiğinde yalnızca tek tek satır içi elemanları etiketlemeniz gerekir.

Neden Önemlidir

Bu ölçütün birincil yararlanıcıları, özellikle kör veya az gören ekran okuyucu kullanıcılarıdır. Ekran okuyucular, dile özgü metin okuma (TTS) motorlarına dayanır. Bir Türkçe ekran okuyucu, lang='fr' özniteliği olmayan bir Fransızca cümleyle karşılaştığında, Fransızca sözcükleri Türkçe sesletim kurallarıyla okumaya çalışır ve büyük ölçüde anlaşılmaz bir çıktı üretir. Dinleyici, dil değişiminin gerçekleştiğini bile fark etmeyebilir — yalnızca bozulmuş bir ses duyar ve içeriğin tamamına yönelik kavrayışını kaybeder.

Türk e-ticaret ve turizm sitelerinde yaygın olan gerçek bir senaryoyu düşünün: Türkçe yazılmış bir ürün sayfası, marka adını ve kısa bir pazarlama sloganını İngilizce olarak içerir, ardından Avrupa müşterileri için Fransızca bir yasal uyarı gelir. İngilizce ve Fransızca segmentlerde dil etiketlemesi olmadan, Türkçe TTS sesine güvenen kör bir kullanıcı üç segmenti de Türkçe okunuyormuş gibi duyar. İngilizce slogan, fonetik benzerlik sayesinde tahmin edilebilir olabilir, ancak Fransızca yasal metin tamamen anlaşılmaz hale gelir — bu da kullanıcının kritik sözleşme veya güvenlik bilgilerini kaçırmasına neden olabilir.

Bilişsel engelleri olan ve yalnızca özel ekran okuyucular değil, metin okuma araçlarına güvenen kullanıcılar da etkilenir. Birçok yaygın okuma yardımı tarayıcı eklentisi, doğru sesi seçmek için lang özniteliğini kullanır. Bu öznitelik olmadan araç, ya dil değişimini yok sayar ya da tüm sayfa için tek bir sese varsayılan olarak geçer ve bu da kavrayışı zayıflatır.

Erişilebilirliğin ötesinde, doğru dil etiketlemesi ölçülebilir SEO faydaları sağlar. Arama motorları, çok dilli içeriği doğru şekilde dizine eklemek için lang özniteliklerini kullanır; bu da dile özgü sayfaların coğrafi ve dilsel olarak hedeflenmiş arama sonuçlarında görünme olasılığını artırır. Tarayıcılar da doğru çeviri önerileri sunmak için bu özniteliği kullanır ve yazım denetimi araçları doğru sözlüğü uygulamak için ona başvurur. Kısacası, doğru dil işaretleme yalnızca engelli kullanıcılar için değil, tüm kullanıcılar için fayda sağlar.

Dünya genelinde 2,2 milyardan fazla insanın bir tür görme bozukluğuna sahip olduğu ve on milyonlarcasının günlük olarak ekran okuyuculara güvendiği tahmin edilmektedir. Çok dilli web içeriği, uluslararası pazarlarda giderek norm haline gelmektedir; bu da, küresel veya çok dilli bir kitleye hizmet veren herhangi bir site için Bölümlerin Dili uyumunu kritik kılar.

İlgili Axe-core Kuralları

WCAG 3.1.2, manuel test gerektirir; çünkü otomatik araçlar, doğal dil algılama (NLP) algoritmaları uygulamadan, bir sayfanın metninin hangi bölümlerinin sayfanın varsayılan dilinden farklı bir dilde yazıldığını güvenilir şekilde belirleyemez — ve bu algoritmalar bile kısa ifadeler, özel adlar ve teknik terminoloji söz konusu olduğunda belirsiz kalabilir.

  • Manuel inceleme — dil algılama: axe-core gibi otomatik tarayıcılar, <html> elemanındaki lang özniteliğinin mevcut ve geçerli olduğunu doğrulayabilir (html-has-lang ve html-lang-valid kuralları tarafından kapsanır), ancak tüm metin gövdesini okuyup belirli bir pasajın dilbilimsel olarak Fransızca mı, Almanca mı yoksa Japonca mı olduğunu saptayamaz. Bir araç, "Bonjour tout le monde" dizisinin Fransızca mı yoksa uydurma bir ifade mi olduğu konusunda anlamsal bir anlayışa sahip değildir; bu nedenle çevreleyen elemanda lang='fr' eksikliğini işaretleyemez.
  • Manuel inceleme — yanlış lang değerleri: Bir geliştirici bir elemana lang özniteliği yerleştirmiş ancak yanlış dil kodu atamışsa (örneğin İspanyolca metni lang='pt' olarak işaretlemek gibi), otomatik araçlar geçerli bir BCP 47 etiketi görür ve hata bildirmez. Yalnızca her iki dili de okuyabilen insan bir inceleyici uyumsuzluğu tespit edebilir.
  • Manuel inceleme — dil değişikliklerinin kapsamı: lang öznitelikleri mevcut olduğunda bile, bir insanın, özniteliğin yabancı dildeki pasajın tüm kapsamını kapsadığını — yalnızca ilk cümleyi değil ve birincil dile ait bitişik içeriğe taşmadığını — doğrulaması gerekir. Otomatik araçlar bu yargıyı verecek okuduğunu anlama yeteneğinden yoksundur.

Nasıl Test Edilir

  1. Otomatik temel tarama: Sayfaya karşı axe DevTools’u (tarayıcı eklentisi veya CI entegrasyonu) ya da Google Lighthouse’u çalıştırın. html-has-lang veya html-lang-valid ihlallerine bakın — bunlar, sayfa düzeyindeki dil bildiriminin bile eksik veya hatalı olduğunu gösterir; bu da 3.1.2’yi ele almadan önce çözülmesi gereken ön koşul bir sorundur. Bu araçların hiçbirinin eksik satır içi lang özniteliklerini işaretlemeyeceğini unutmayın; bu adım yalnızca bir temel durum oluşturur.
  2. Görsel içerik denetimi: Tüm sayfa içeriğini okuyun ve beyan edilen sayfa dilinden farklı bir dilde açıkça yazılmış her pasajı, ifadeyi veya bloğu belirleyin. Bu elemanların bir listesini tutun ve DOM içindeki konumlarını not edin. Her bir elemanı (veya en yakın üst öğesini) tarayıcının DOM inceleyicisinde (tarayıcı Geliştirici Araçları → Elements paneli) bir lang özniteliği açısından kontrol edin. Değerin, içeriğin gerçek diliyle eşleşen geçerli bir BCP 47 etiketi olduğunu doğrulayın.
  3. Ekran okuyucu testi — NVDA + Firefox (Windows): Sayfayı Firefox kullanarak NVDA etkin halde açın. Ok tuşlarıyla içerikte gezinin ve belirlediğiniz yabancı dildeki pasajlara odaklanın. Dikkatlice dinleyin: NVDA, doğru etiketlenmiş bir lang özniteliğiyle karşılaştığında telaffuzu otomatik olarak değiştirmelidir. Yabancı metin, algılanabilir bir ses değişimi olmaksızın varsayılan dilin telaffuz kurallarıyla okunuyorsa, lang özniteliği muhtemelen eksik veya yanlıştır.
  4. Ekran okuyucu testi — JAWS + Chrome (Windows): JAWS, Chrome’da çalışırken sanal imleci kullanarak sayfayı okuyun. JAWS’un davranışı NVDA’ya benzer — lang değerlerine göre TTS motorlarını değiştirir. Dil duyurularını duymak için ayrıntılı konuşma modunu etkinleştirin. Telaffuzun, görünen dil için hatalı geldiği pasajları not edin.
  5. Ekran okuyucu testi — VoiceOver + Safari (macOS/iOS): VoiceOver’ı etkinleştirin ve VO+Sağ ok ile sayfada gezinin. iOS’ta mobil test için içerikte kaydırma hareketi yapın. Safari’deki VoiceOver da lang özniteliklerine uyar ve sesleri buna göre değiştirir. Cihazınızda beklenen yabancı diller için ses paketleri yüklüyse, doğru etiketlenmiş elemanlarda belirgin bir ses değişimi duyarsınız.
  6. BCP 47 etiket doğrulaması: Bulduğunuz tüm lang değerlerini IANA Language Subtag Registry’ye göre doğrulayın veya çevrimiçi bir BCP 47 doğrulayıcı kullanın. Yaygın hatalar arasında lang='en-us' yazmak (küçük harf bölge kodu teknik olarak geçerli olsa da alışılmış değildir) veya lang='english' gibi geçersiz kodlar kullanmak yer alır.

Nasıl Düzeltilir

Türkçe bir paragrafta satır içi yabancı ifade — Hatalı

<p>
  Bu ürün uluslararası standartlara uygundur ve
  <em>state of the art</em> teknoloji kullanmaktadır.
</p>

Türkçe bir paragrafta satır içi yabancı ifade — Doğru

<p>
  Bu ürün uluslararası standartlara uygundur ve
  <!-- lang='en' tells screen readers to switch to an English TTS engine -->
  <em lang='en'>state of the art</em> teknoloji kullanmaktadır.
</p>

Yabancı dilde çok cümleli blok alıntı — Hatalı

<blockquote>
  <p>La liberté commence où l'ignorance finit.</p>
  <p>— Victor Hugo</p>
</blockquote>

Yabancı dilde çok cümleli blok alıntı — Doğru

<!-- lang='fr' applied to the blockquote covers all descendant content -->
<blockquote lang='fr'>
  <p>La liberté commence où l'ignorance finit.</p>
  <p>— Victor Hugo</p>
</blockquote>

İki dilli gezinme menüsü — Hatalı

<nav>
  <ul>
    <li><a href='/tr/anasayfa'>Anasayfa</a></li>
    <li><a href='/en/home'>Home</a></li>
    <li><a href='/de/startseite'>Startseite</a></li>
  </ul>
</nav>

İki dilli gezinme menüsü — Doğru

<nav>
  <ul>
    <!-- Primary language (Turkish) needs no extra attribute if html lang='tr' -->
    <li><a href='/tr/anasayfa'>Anasayfa</a></li>
    <!-- English and German links receive their own lang attributes -->
    <li><a href='/en/home' lang='en'>Home</a></li>
    <li><a href='/de/startseite' lang='de'>Startseite</a></li>
  </ul>
</nav>

Çok dilli veri hücrelerine sahip tablo — Hatalı

<table>
  <tr>
    <th>Ülke</th>
    <th>Slogan</th>
  </tr>
  <tr>
    <td>Fransa</td>
    <td>Liberté, Égalité, Fraternité</td>
  </tr>
  <tr>
    <td>Almanya</td>
    <td>Einigkeit und Recht und Freiheit</td>
  </tr>
</table>

Çok dilli veri hücrelerine sahip tablo — Doğru

<table>
  <tr>
    <th>Ülke</th>
    <th>Slogan</th>
  </tr>
  <!-- lang applied to individual td elements containing foreign text -->
  <tr>
    <td>Fransa</td>
    <td lang='fr'>Liberté, Égalité, Fraternité</td>
  </tr>
  <tr>
    <td>Almanya</td>
    <td lang='de'>Einigkeit und Recht und Freiheit</td>
  </tr>
</table>

Yaygın Hatalar

  • Kısa satır içi ifadelerde lang özniteliğini atlamak: Geliştiriciler, büyük yabancı dil bölümlerini etiketler ancak genellikle tamamen Türkçe bir cümlenin içine gömülü iki kelimelik İngilizce bir pazarlama sloganı gibi kısa ifadeleri gözden kaçırırlar. Muaf özel adlar veya teknik kelime dağarcığı olmayan tek kelimelik yabancı terimler bile etiketleme gerektirir.
  • Yanlış bir BCP 47 etiketi kullanmak: lang='english', lang='turkish' veya lang='français' yazmak yerine doğru ISO kodlarını (lang='en', lang='tr', lang='fr') kullanmamak, özniteliği geçersiz kılar ve ekran okuyucular onu tamamen yok sayabilir.
  • Bir dil değişimini ima etmek için CSS veya görsel stillere güvenmek: Yazı tipini, rengi değiştirmek veya yabancı metni italik yapmak, gören kullanıcılar için dil farkını işaret eder ancak yardımcı teknolojilere hiçbir programatik bilgi sağlamaz. Ekran okuyucular için çalışan tek mekanizma lang özniteliğidir.
  • Ekran okuyucu kullanıcılarının bağlamdan “çözeceğini” varsaymak: Kör bir kullanıcının, çevredeki Türkçe metnin Fransa’dan bahsettiği için bozulmuş sesli bir pasajın aslında Fransızca olduğunu çıkarsamasını beklemek, kavrama yükünü kullanıcıya kaydıran makul olmayan bir beklentidir.
  • Yabancı dilde çok elemanlı bir blokta yalnızca ilk elemanı etiketlemek: Art arda üç <p> elemanı Fransızca bir pasaj içeriyorsa, yalnızca ilk paragrafa lang='fr' yerleştirmek, kalan iki paragrafı etiketsiz bırakır. Doğru yaklaşım, ya üçünü de lang='fr' özniteliğine sahip bir üst eleman içinde sarmak ya da özniteliği her paragrafın kendisine eklemektir.
  • Özel adları tam yabancı dil ifadeleriyle karıştırmak: WCAG’nin özel ad istisnası, "Paris" veya "Volkswagen" gibi adları kapsar — Fransızca veya Almanca yazılmış tam cümleleri veya pazarlama metinlerini değil. Geliştiriciler bazen bu istisnayı, önemli miktarda yabancı dil içeriğinde lang etiketlemesini atlamayı gerekçelendirmek için yanlış uygular.
  • Dinamik olarak eklenen içeriğin dil özniteliklerinin eksik olması: Yabancı dil içeriği JavaScript aracılığıyla yüklendiğinde (örneğin, bir CMS tarafından yönetilen SSS bloğu veya bir API’den getirilen çevrilmiş ürün açıklaması), geliştiriciler genellikle eklenen işaretlemede lang özniteliğini eklemeyi unuturlar. Sunucu tarafı veya istemci tarafı oluşturma hatları, metin içeriğiyle birlikte dil meta verilerini de aktarmalıdır.
  • HTML5 belgelerinde lang olmadan xml:lang kullanmak: XHTML bağlamlarında xml:lang uygun öznitelikti. HTML5’te doğru öznitelik lang’dir. Yalnızca xml:lang kullanmak, bazı tarayıcılarda çalışsa da tüm yardımcı teknolojiler tarafından evrensel olarak desteklenmez.
  • Birincil dil içeriğini de içeren çok geniş bir kapsayıcıya lang yerleştirmek: Hem Türkçe hem de Fransızca metin içeren bir bölümü bütünüyle lang='fr' ile sarmak, Türkçe kısımların yanlış telaffuz edilmesine neden olur. Öznitelik kapsamı, dil sınırıyla tam olarak eşleşmelidir.
  • Düzeltmeleri uyguladıktan sonra gerçek ekran okuyucularla test yapmamak: Geliştiriciler sıklıkla lang öznitelikleri ekler ve gerçek TTS çıktısını doğrulamadan düzeltmeyi tamamlanmış sayarlar. NVDA, JAWS veya VoiceOver ile test yapmak, telaffuz iyileşmesinin son kullanıcılar tarafından algılanabildiğini doğrulamanın tek yoludur.

Türkiye’nin Erişilebilirlik Mevzuatıyla İlişkisi

Türkiye’nin 21 Haziran 2025 tarihinde 32933 sayılı Resmî Gazete’de yayımlanan 2025/10 sayılı Cumhurbaşkanlığı Genelgesi, çok geniş bir kamu ve özel sektör yelpazesi için dijital erişilebilirliğe ilişkin bağlayıcı bir çerçeve oluşturur. Genelge, WCAG 2.2’yi teknik standart olarak resmen benimser ve Seviye AA uyumunu yasal uyum için asgari gereklilik olarak belirler.

WCAG 3.1.2 — Bölümlerin Dili, Seviye AA ölçütüdür ve bu da onu genelgede tanımlanan zorunlu uyum hedefinin tam merkezine yerleştirir. Çok dilli web siteleri işleten kuruluşlar — Türkiye’nin Avrupa, Orta Doğu ve Orta Asya ticaretinin kavşağında yer alması nedeniyle yaygın bir durum — bu ölçütü doğru şekilde uygulama konusunda artan bir yükümlülükle karşı karşıyadır. İngilizce olarak yabancı para birimi şartlarını yayımlayan bir Türk bankası, Almanca dolaşım anlaşması hükümlerini içeren bir telekom operatörü veya hasta onam formlarını Arapça olarak yeniden üreten bir hastane web sitesi, tüm yabancı dil pasajlarının programatik olarak etiketlendiğinden emin olmalıdır.

Genelge kapsamında yer alan kuruluş türleri arasında kamu kurum ve kuruluşları, e-ticaret platformları, bankalar ve finans kuruluşları, hastaneler ve sağlık hizmeti sağlayıcıları, 200.000 ve üzeri abonesi olan telekomünikasyon şirketleri, seyahat acenteleri, özel ulaşım şirketleri ve Millî Eğitim Bakanlığı (MEB) tarafından yetkilendirilmiş özel okullar yer alır. Bu kuruluşların tümü için Seviye AA uyumunun — 3.1.2 dahil — sağlanamaması, idari yaptırımlara ve Aile ve Sosyal Hizmetler Bakanlığı tarafından verilen Erişilebilirlik Logosuna (Erişilebilirlik Logosu) hak kazanamama sonucuna yol açabilir.

Erişilebilirlik Logosu, özellikle e-ticaret ve finansal hizmetler alanında Türk pazarında giderek artan bir güven göstergesi olarak tanınmaktadır. Logonun elde edilmesi ve sürdürülmesi, tüm Seviye AA ölçütleriyle uyumun kanıtlanmasını gerektirir ve Bölümlerin Dili, uluslararası müşterilere hizmet veren veya birden fazla dilde hukuken bağlayıcı belgeler yayımlayan Türk kuruluşları için özellikle önemlidir. Türk hukukunun, belirli bilgilendirmelerin (tüketici hakları bildirimleri ve finansal ürün şartları gibi) engelli kullanıcılar tarafından anlaşılabilir olmasını zorunlu kıldığı göz önüne alındığında, dil etiketlemesi yalnızca teknik bir en iyi uygulama değil — genelgenin daha geniş mandasına gömülü erişilebilir iletişim yükümlülüğünün bir parçasıdır.

Logoyu hedefleyen kuruluşlara, dijital varlıkları genelinde tüm yabancı dil pasajlarını belirlemek için yapılandırılmış içerik denetimleri yapmaları, içerik yönetimi katmanında lang özniteliği uygulamasını zorunlu kılan bir geliştirme süreci oluşturmaları ve Bölümlerin Dilini, otomatik ve manuel inceleme döngülerinin yanı sıra düzenli erişilebilirlik test protokollerine dahil etmeleri tavsiye edilir.