Poziom
AA
Od wersji
WCAG 2.0
Pozycje
3 / 193
/ Kryterium WCAG

3.1.2 Język części

Fragment w innym języku musi to zaznaczać, z tego samego powodu.

/ Czego wymaga

Gdy strona napisana w jednym języku zawiera fragment lub wyrażenie w innym, kod musi wskazywać, gdzie język się zmienia. W HTML atrybut lang umieszcza się na elemencie, który zawiera obcojęzyczny tekst. Czytnik ekranu zmienia wtedy głos na czas tego fragmentu, a potem wraca do poprzedniego. Bez takiego oznaczenia angielski cytat na polskiej stronie zostaje odczytany z polską wymową, której słuchacz często nie potrafi rozszyfrować. Z tej samej informacji korzystają monitory brajlowskie.

Kryterium wymienia cztery wyjątki: nazwy własne, terminy techniczne, słowa o nieokreślonym języku oraz słowa lub wyrażenia, które weszły do języka potocznego otaczającego tekstu. Nazwa marki albo słowo „weekend” w polskim zdaniu nie wymagają więc żadnego oznaczenia. Pełne zdanie, cytat, blok tekstu prawnego czy link do innej wersji językowej już go wymagają. Atrybut z niepoprawną wartością albo wskazujący niewłaściwy język również oznacza niespełnienie kryterium.

/ Jak strony go nie spełniają

  • Angielski cytat lub abstrakt znajduje się na polskiej stronie, a jego element nie ma atrybutu lang.
  • Przełącznik języków zawiera linki „Deutsch” i „English”, a żaden z nich nie ma własnego atrybutu lang.
  • Akapit wklejony z innego dokumentu zachował lang="en", chociaż tekst w środku został już przetłumaczony.
  • Element span ma wartość, która nie jest znacznikiem języka, na przykład lang="english".
  • Strona podaje ten sam komunikat w dwóch językach jeden po drugim, a zadeklarowany jest tylko język strony.

/ Jak sprawdzić samodzielnie

  1. Przeczytaj stronę i wypisz każdy fragment, który nie jest w języku głównym: cytaty, obcojęzyczne tytuły, klauzule prawne oraz linki przełącznika języków.
  2. Zbadaj każdy z nich w narzędziach deweloperskich i poszukaj atrybutu lang na samym elemencie albo na jego przodku poniżej elementu html.
  3. Wyszukaj w źródle ciąg lang= i sprawdź każdą znalezioną wartość. Musi być poprawnym znacznikiem i musi zgadzać się z tekstem w środku.
  4. Odsłuchaj te fragmenty w darmowym czytniku ekranu, na przykład NVDA, i sprawdź, czy głos się zmienia.

/ Jak to naprawić

  • Obejmij obcojęzyczne wyrażenie elementem span z właściwą wartością, na przykład lang="en" wokół angielskiego wyrażenia.
  • Gdy cały blok jest w innym języku, umieść lang na elemencie blokowym: blockquote, p, li lub section.
  • W przełączniku języków nadaj każdemu linkowi lang jego własnej etykiety, na przykład lang="de" na linku z napisem „Deutsch”.
  • Usuń atrybuty lang, które zostały po wklejonej treści, albo popraw je na język tekstu, który teraz zawierają.
  • Jeśli treść powstaje w edytorze CMS, używaj jego narzędzia do oznaczania języka obcych fragmentów, żeby oznaczenie było zapisane razem z tekstem.

/ Co sprawdza nasz skaner

Dwa testy patrzą na wartości, a nie na tekst. H58.1.Lang z HTML_CodeSniffer przechodzi przez każdy element poniżej html, który ma atrybut lang, i zgłasza wartość niezbudowaną jak znacznik języka, a reguła axe valid-lang zgłasza niepoprawne wartości lang. Żaden z nich nie znajdzie obcojęzycznego fragmentu, który w ogóle nie ma atrybutu lang, a to błąd najczęstszy, ani nie oceni, czy poprawny znacznik pasuje do tekstu.

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

Zmierzone podmioty łamiące to kryterium, najwięcej wystąpień na górze
PodmiotSektorWystąpieniaWynik
Uniwersytet Jagiellońskieducation · PL121
Seattlecity · US112
Warszawacity · PL120

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

Czy każde obce słowo trzeba oznaczać atrybutem lang?

Nie. Zwolnione są nazwy własne, terminy techniczne, słowa, których języka nie da się ustalić, oraz słowa, które weszły do codziennego użycia w otaczającym języku. Nazwa firmy albo zapożyczenie takie jak „weekend” zostają bez zmian. Oznaczaj wyrażenia, zdania i dłuższe fragmenty, które czytelnik języka głównego rozpozna jako napisane w innym języku.

Jak oznaczyć zmianę języka w HTML?

Dodaj atrybut lang z właściwym znacznikiem języka do elementu, który zawiera tekst. Dla kilku słów wewnątrz zdania użyj elementu span z lang="en" lub innym kodem. Dla całego cytatu albo akapitu umieść atrybut na elemencie blockquote lub p. Wszystko, co jest w środku, dziedziczy tę wartość, dopóki zagnieżdżony element nie ustawi innej.

Czy kryterium Język części jest wymagane na poziomie AA?

Tak. 3.1.2 to kryterium poziomu AA i jest częścią WCAG od wersji 2.0, więc wchodzi w zakres każdego audytu AA. Towarzyszące mu 3.1.1 Język strony ma poziom A. Narzędzia automatyczne słabo je pokrywają, bo oprogramowanie umie zweryfikować wartość lang, a nie ma pewnego sposobu, żeby zauważyć nieoznaczone zdanie w innym języku.