A lang attribútum akadály­mentességi vonzatai

A cikk témái

Talán a WCAG 2.0 web akadálymentességi szabvány egyik legkönnyebben teljesíthető alapkövetelménye az, hogy a weboldalon használt emberi nyelv a kódban is definiálva legyen (lásd WCAG 2.0 3.1.1 teljesítési feltétel). Ezt a HTML kódban a lang attribútum segítségével biztosíthatjuk.

A lang attribútum egy globális attribútum, ami elvben azt jelenti, hogy például az id vagy a class attribútumhoz hasonlóan mindegyik HTML jelölőelemnél megadható. Viszont a gyakorlatban általában elég csak a html gyökérelemnél definiálni, mivel az ott megadott érték az egész weboldalra érvényes lesz.

A lang attribútum értéke hivatalosan egy BCP 47 nyelvi címke, ami az alkalmazott emberi nyelvet azonosítja. Például magyar nyelvű oldalon ez a „hu”, angolnál az „en”, németnél a „de” érték lehet.

Abba most nem bonyolódnék bele, hogy a nyelvi címke opcionálisan azt a földrajzi régiót is beazonosíthatja, ahol az adott nyelvet eltérően beszélik. Például a Nagy-Britanniában beszélt angol („en-GB”) eltér az Egyesült Államokban beszélt angoltól („en-US”).

Magyar oldalakon gyakran találkozni „hu-HU” értékkel is, ami ugyan nem hiba, de felesleges bonyolítás, mert azt jelöli, hogy a magyar nyelv Magyarországon beszélt dialektusa. Leszámítva a speciális tájszólásokat, a magyar nyelvet a határainkon belül és túl is ugyanúgy beszélik, tehát nálunk a földrajzi régió megjelölése felesleges.

Ezek alapján egy magyar nyelvű oldalon így érdemes a html jelölőelemet megadni:

<html lang="hu">
...
</html>

És ezzel eleget is tettünk a WCAG 2.0 említett teljesítési feltételének. De miért is fontos ez a definíció?

Akadálymentességi szempontból a lang attribútum és annak értéke leginkább azért fontos, mert ez határozhatja meg, hogy a képernyőolvasó program milyen nyelven szólaljon meg.

Egyes modern képernyőolvasó programok már több különböző nyelvű beszédszintetizátort is tartalmazhatnak (gyárilag vagy a felhasználó által feltelepítve), így a lang attribútum értékének változása tulajdonképpen ezek között kapcsol át.

Fontos tudni, hogy képernyőolvasó programot nem csak a vak, hanem bizonyos kognitív, nyelvi vagy tanulási képességzavarral élő emberek is használnak. Nem véletlen tehát, hogy a WCAG szabvány kötelező – úgynevezett „A” szintű – alapkövetelményként írja elő az oldal nyelvének definiálását.

Mi történik, ha nem adjuk meg a lang attribútumot a html elemben?

Ilyenkor a képernyőolvasó program azon a nyelven szólal meg, amit a felhasználó alapértelmezetten beállított. Ha ez pont megegyezik a weboldal nyelvével, akkor tulajdonképpen nincs komolyabb probléma. Ha viszont eltér tőle, akkor elég kellemetlen lesz a felhasználói élmény, hiszen érthetetlen és zagyva kiejtéssel fog megszólalni a program. Amennyiben a felhasználónak mégis sikerül kihámoznia, hogy milyen nyelvű az oldal tartalma, akkor is manuálisan kell átkapcsolnia a helyes nyelvre. Ezért sokkal biztosabb és felhasználóbarátabb megoldás, ha mi magunk adjuk meg az oldal nyelvét.

És mi történik, ha rossz értéket adunk meg?

Akadálymentességi auditok során gyakran tapasztalom azt a hibát, hogy a lang attribútum ugyan definiálva van, de helytelen értékkel. Ha például valaki egy külföldi sablont használt a magyar oldalához, de a lang értékét nem módosította „hu” értékre. Vagy egy magyar oldalnak készíti el az idegen nyelvű változatait, és ezeken a mutánsokon változatlanul a „hu” értéket használja. Az eredmény természetesen ezekben az esetekben is egy zagyva kiejtés lesz.

Példa a hibára

A következő hanganyagban meghallgatható, hogy ezt a magyar nyelvű bekezdést milyen furcsa kiejtéssel olvassa fel a képernyőolvasó program, ha a lang attribútum hibásan „en” értéken marad.

A dolog pikantériája, hogy ezt a hibát jellemzően az akadálymentességet ellenőrző automatikus rendszerek sem szúrják ki, hiszen ezek gyakran csak azt vizsgálják, hogy van-e lang attribútum. Azt már ritkábban, hogy annak értéke passzol-e az oldal nyelvével. Talán ez egy újabb érv, hogy a manuális akadálymentességi vizsgálat miért képes több hibát feltárni.

Idegen nyelvű szövegrészek jelölése

Innentől talán már logikus az is, hogy ha ugyanazon weboldalon belül több emberi nyelvet használunk, akkor a képernyőolvasó mindig azon a nyelven szólaljon meg, amivel az adott szövegrész (például bekezdés, mondat, szó, stb.) íródott. Természetesen a lang attribútum segítségével ez is megoldható.

Ehhez elsőként azt kell tisztázni, hogy mi a weboldal elsődleges (alapértelmezett) nyelve, azaz melyikből van rajta a legtöbb szöveg. Ezt adjuk meg a html jelölőelem lang attribútumában. Ezt követően minden ettől eltérő nyelvű szövegrésznél a szövegrészt befoglaló jelölőelem lang attribútumába definiáljuk az idegen nyelvet.

Ha például a szövegrész egy angol nyelvű idézet, akkor az idézet blockquote jelölőelemnél így adhatjuk meg a nyelvet:

<blockquote lang="en">How are you?</blockquote>

A nyelv mindig csak az adott jelölőelem hatókörében lévő szövegekre érvényes, ideértve a szöveget tartalmazó attribútumokat (például az alt attribútumot) is. Ez azért fontos, mert a jelölőelem zárása után, a következő szövegrésznél nem kell mesterségesen „visszakapcsolnunk” az oldal alapértelmezett nyelvére, hiszen ott újra a html jelölőelemnél beállított nyelv lesz érvényben. Hacsak nem adunk meg rögtön egy másik nyelvet.

Ismételten hangsúlyozom, hogy a lang attribútum minden HTML jelölőelemnél megadható. Jellemzően az idegen nyelvű szövegrész már amúgy is egy szemantikailag korrekt jelölőelemben van, de szavak vagy rövidebb mondatrészek esetén rákényszerülhetünk arra, hogy csak a nyelvváltás érdekében egy span jelölőelembe foglaljuk az idegen nyelvű szövegrészt.

Kivételek

Nem kell túlzásokba sem esni. Nem kell feltétlenül lang attribútummal ellátni az idegen nyelvű tulajdonneveket (például személyek, tárgyak, települések neveit), a technikai szakkifejezéseket, a meghatározhatatlan nyelvű szavakat, vagy azokat az idegen szavakat, amelyek egy adott szövegkörnyezetben már átkerültek a köznyelvbe.

A tartalomszerkesztők felelőssége (is)

Mindez elvben nagyon egyszerűen hangzik, de manapság, amikor a weboldalak tartalmát – jellemzően tartalomkezelő rendszeren keresztül – „laikus” szerkesztők írják, a helyzet bonyolultabb. Részben a tartalomkezelő rendszer adminisztrációs felületének tudásán múlik, hogy felkínálja-e a nyelvi váltás beállításának lehetőségét. De ez is csak akkor ér valamit, ha a tartalomszerkesztők is tisztában vannak azzal, hogy hol, miért és hogyan használják ezt a funkciót.

Talán éppen ezen tényezők miatt a WCAG szabvány „A” szintű alapkövetelményei között nem szerepel a szövegrészek nyelvének definiálása. Csak eggyel magasabb szinten – az úgynevezett „AA” szinten – írja elő kötelezően (lásd WCAG 2.0 3.1.2 teljesítési feltétel).

A lang attribútum használatának egyéb előnyei

A lang attribútum olyan funkciókra is hatással lehet, amelyek részben, vagy csak áttételesen kapcsolódnak az akadálymentességhez. Ezek közül néhány:

Tipográfia

Egyes böngészőprogramokban a q jelölőelemmel definiált mondatközi idézetek a lang attribútumban definiált nyelv helyesírásának megfelelő idézőjelekkel jelennek meg. Hasonló tipográfiai különbség lehet a sortörésnél, a szövegigazításnál és a kisbetű-nagybetű konverziónál is. A böngészőprogram akár az alkalmazott betűkészletet is a nyelvhez igazíthatja.

Szövegelválasztás

Egyes böngészőprogramokban az automatikus CSS3 alapú szövegelválasztás a lang attribútumban definiált nyelv helyesírását veszi alapul.

Helyesírás-ellenőrzés

Egyes böngészőprogramok a szövegbeviteli űrlapmezők, illetve a contenteditable attribútummal jelölt szövegek helyesírásának ellenőrzését a lang attribútumban definiált nyelv alapján végzik el.

Fordítóprogramok

Bizonyos fordítóprogramok a lang attribútumhoz igazíthatják a szöveg fordítását, de például azt is, hogy az adott szöveg változatlan maradjon-e a fordítás során.

Virtuális billentyűzet megjelenése

Egyes mobilos böngészőprogramok az <input type="number"> jelölőelemmel definiált űrlapmezőnél a lang attribútumban definiált nyelv alapján vagy tizedesvesszőt, vagy tizedespontot tartalmazó numerikus billentyűzetet mutatnak (angol nyelvű forrás: HTML5 number inputs – Comma and period as decimal marks).

Idegen nyelvű szövegrészek vizuális formázása

A CSS :lang() kiválasztójának segítségével könnyedén megformázhatjuk a lang attribútummal jelölt idegen nyelvű szövegrészeket. Ha például az oldalon az összes angol nyelvű szöveget dőlten szeretnénk megjeleníteni, akkor ezt a CSS szabályt alkalmazhatjuk:

:lang(en) {
font-style: italic;
}

Demonstráció

A cikkben leírtak demonstrálására készítettem egy egyszerű mintaoldalt és egy rövid videót. A mintaoldalon a Hamletből származó leghíresebb idézet szerepel magyarul, angolul és németül. Az oldal elsődleges nyelve a magyar, tehát a html jelölőelem lang attribútumában a „hu” érték szerepel. Az idegen nyelvű idézeteknél pedig a blockquote elemhez tettem a lang attribútumot.

A következő videón azt láthatjuk és hallhatjuk, amint a mintaoldalt egy iOS 9.3.2 operációs rendszert futtató okoseszközön, Safari böngészőben és VoiceOver képernyőolvasóval használom. Alapértelmezetten magyar női hangon szólal meg a képernyőolvasó, de amikor az angol és a német szövegrészhez érünk, akkor átvált angolra, illetve németre.