Poziom
A
Od wersji
WCAG 2.0
Pozycje
26 / 193
/ Kryterium WCAG

3.1.1 Język strony

Strona musi deklarować swój język, inaczej czytnik ekranu przeczyta polski tekst angielskim głosem.

/ Czego wymaga

Każda strona musi podawać w kodzie, w jakim języku naturalnym jest napisana. W HTML służy do tego atrybut lang na elemencie html. Czytnik ekranu wybiera na jego podstawie głos i zasady wymowy, więc polska strona oznaczona jako angielska albo nieoznaczona wcale zostaje odczytana z angielską wymową i trudno ją zrozumieć. Z tego samego atrybutu korzystają monitory brajlowskie, automatyczne dzielenie wyrazów i dobór cudzysłowów.

Strona spełnia kryterium, gdy element html ma poprawny znacznik języka zgodny z głównym językiem treści, na przykład lang="pl" albo lang="en-GB". Brak atrybutu lub pusty atrybut to błąd, podobnie jak wartość, która nie jest prawdziwym znacznikiem języka. Kryterium nie wymienia żadnych wyjątków. Jeśli strona miesza języki, zadeklaruj ten, którego jest najwięcej, a pozostałe fragmenty oznacz osobno, o czym mówi kryterium 3.1.2. Znacznik niewłaściwego języka mija się z celem, nawet jeśli jest poprawnie zbudowany.

/ Jak strony go nie spełniają

  • Element html w ogóle nie ma atrybutu lang.
  • Polska lub niemiecka witryna zachowała lang="en" z szablonu, na którym ją zbudowano.
  • Wartość nie jest znacznikiem języka, na przykład lang="polish" albo lang="pl_PL" z podkreślnikiem.
  • Atrybut istnieje, ale jest pusty i ma postać lang="".
  • Wszystkie wersje językowe wielojęzycznej witryny mają tę samą wartość, więc strony niemieckie są zapowiadane jako angielskie.

/ Jak sprawdzić samodzielnie

  1. Otwórz źródło strony i spójrz na otwierający znacznik html u góry, który powinien mieć atrybut lang.
  2. Możesz też wpisać w konsoli przeglądarki document.documentElement.lang. Pusty wynik oznacza, że atrybutu brakuje.
  3. Sprawdź, czy wartość jest prawdziwym znacznikiem języka: krótkim kodem takim jak pl, de lub en, ewentualnie z łącznikiem i regionem, jak w en-GB.
  4. Porównaj wartość z językiem, który faktycznie czytasz na stronie, i powtórz to dla każdej wersji językowej witryny.
  5. Odsłuchaj jeden akapit w darmowym czytniku ekranu, na przykład NVDA. Niewłaściwy głos słychać od razu.

/ Jak to naprawić

  • Dodaj atrybut do elementu głównego, na przykład lang="pl" na elemencie html polskiej strony.
  • W witrynie wielojęzycznej wypełniaj tę wartość z ustawień regionalnych każdej strony w szablonie albo z ustawienia języka w CMS, nigdy stałym napisem.
  • Warianty regionalne zapisuj z łącznikiem, jak en-GB lub de-AT, a nie z podkreślnikiem.
  • W XHTML serwowanym jako XML dodaj obok lang atrybut xml:lang z tą samą wartością.
  • Nie polegaj na znaczniku meta z http-equiv="content-language", bo technologia wspomagająca nie odczytuje z niego języka strony.

/ Co sprawdza nasz skaner

Cztery testy szukają jednego błędu, czyli elementu html bez języka. Test html_lang_missing czyta surowy HTML, a lang-missing, reguła axe html-has-lang i H57.2 z HTML_CodeSniffer czytają wyrenderowaną stronę. Żaden z nich nie porównuje zadeklarowanego języka ze słowami na stronie. Piąty test przypisany do tego kryterium, charset_missing, zgłasza brak deklaracji kodowania znaków, której to kryterium nie wymaga.

/ Kto je łamie, według naszych pomiarów

Zmierzone podmioty łamiące to kryterium, najwięcej wystąpień na górze
PodmiotSektorWystąpieniaWynik
HealthCare.govhealth · US357
Medicarehealth · US351
Łódźcity · PL33
Federal Aviation Administrationtransport · US214
Kielcecity · PL271
Miami-Dade Countygovernment · US220
Narodowy Bank Polskigovernment · PL223
National Weather Servicegovernment · US234
New York Public Libraryculture · US223
Social Security Administrationgovernment · US2-
Sąd Najwyższygovernment · PL214
Dallascity · US123
Gorzów Wielkopolskicity · PL166
Humboldt-Universität zu Berlineducation · DE135
Instytut Pamięci Narodowejgovernment · PL143
Krakówcity · PL112
Las Vegascity · US18
Najwyższa Izba Kontroligovernment · PL141
Narodowy Instytut Zdrowia Publicznegohealth · PL125
New York Citycity · US137
Rzeszówcity · PL18
Seattlecity · US112
Sejm RPgovernment · PL19
Universität Heidelbergeducation · DE121
Uniwersytet Łódzkieducation · PL19
Zarząd Transportu Miejskiego Warszawatransport · PL177

Jedna strona na podmiot, mierzona automatycznie w tygodniowym cyklu. Jeśli podmiot coś naprawił od ostatniego pomiaru, zmiana będzie widoczna przy następnym, a każdy podmiot może odpowiedzieć na swojej stronie.

/ Pytania o to kryterium

Jaki atrybut lang powinna mieć strona po polsku lub po niemiecku?

Wpisz na elemencie html dwuliterowy kod języka: lang="pl" dla polskiego, lang="de" dla niemieckiego, lang="en" dla angielskiego. Po łączniku można dodać region tam, gdzie ma to znaczenie, jak w de-AT lub en-GB. Kody pochodzą z rejestru podznaczników językowych IANA, czyli z listy, którą rozumieją przeglądarki i czytniki ekranu.

Co się dzieje, gdy brakuje atrybutu lang?

Czytnik ekranu wraca do głosu domyślnego, zwykle do języka systemu operacyjnego albo do tego, którego używał ostatnio. Tekst w innym języku jest wtedy wymawiany według niewłaściwych zasad i bywa niezrozumiały. Funkcje przeglądarki zależne od języka, takie jak automatyczne dzielenie wyrazów, również mogą na takiej stronie przestać działać.

Czy lang="en" na stronie, która nie jest po angielsku, to błąd WCAG?

W praktyce tak. Kryterium wymaga, żeby oprogramowanie mogło ustalić domyślny język strony, a znacznik wskazujący inny język daje mu błędną odpowiedź. Wiele automatycznych narzędzi sprawdza tylko, czy atrybut istnieje i czy jest poprawnie zbudowany, więc ten błąd przechodzi przez nie niezauważony. Wychwyci go dopiero człowiek czytający stronę albo czytnik ekranu.