3.1.2 Język części (ang.) Language of parts
Spis treści
Istota i cel kryterium
Kryterium 3.1.2 stanowi uzupełnienie dla kryterium WCAG 3.1.1 „Język strony”, które dotyczy ustawienia głównego języka całej strony internetowej. Podczas gdy WCAG 3.1.1 określa domyślny język dokumentu HTML (np. <html lang="pl">), 3.1.2 koncentruje się na sytuacjach, gdy w obrębie tego dokumentu pojawiają się fragmenty tekstu (pojedyncze słowa, zdania, akapity, bloki tekstu) w innym języku. W takich przypadkach niezbędne jest użycie odpowiednich atrybutów HTML, aby programowo wskazać zmianę języka.
Gwarantuje to, że syntezatory mowy automatycznie przełączą się na właściwy zestaw reguł fonetycznych i poprawną artykulację, a urządzenia brajlowskie bezbłędnie wyrenderują znaki oraz litery specyficzne dla danego alfabetu. Wdrożenie tej reguły eliminuje sytuacje, w których systemy informatyczne muszą czytać obcą treść z domyślną, niedopasowaną fonetyką języka głównego, co drastycznie zmniejsza zmęczenie psychiczne i całkowicie eliminuje frustrację odbiorcy.
Definicja w j. angielskim
Definicja dostępna pod adresem (link otworzy się w nowej karcie):
https://www.w3.org/WAI/WCAG22/quickref/#language-of-parts
Definicja w j. polskim
Definicja dostępna pod adresem (link otworzy się w nowej karcie):
https://www.w3.org/Translations/WCAG21-pl/#jezyk-czesci
Wpływ na dostępność (Kogo wspierasz?)
- Osoby korzystające z wyświetlaczy brajlowskich: Zapewniasz bezbłędne renderowanie i prawidłowe generowanie znaków na urządzeniu brajlowskim, co daje pewność płynnego odbioru tekstu.
- Automatyczne tłumacze i słowniki: Umożliwiasz automatycznym translatorom bezbłędne rozpoznawanie oraz precyzyjne, wysoce dokładne tłumaczenie poszczególnych partii materiału.
- Użytkownicy czytników ekranu: Zapobiegasz sytuacji, w której syntezator mowy bezmyślnie kaleczy obcojęzyczne słowa, stosując do nich reguły fonetyczne języka domyślnego. Właściwe oznaczenie eliminuje głęboką frustrację i pozwala na automatyczne przełączenie mowy na poprawny akcent i artykulację.
- Osoby z niepełnosprawnością poznawczą: Zdejmujesz z nich ogromne obciążenie psychiczne. Wyraźne zdefiniowanie granic językowych ułatwia właściwą interpretację trudnych, obcojęzycznych fraz i redukuje chaos poznawczy.
- Osoby dwujęzyczne oraz wielojęzyczne: Radykalnie ułatwiasz im komfortowe przyswajanie zróżnicowanej treści oraz sprawne poruszanie się po serwisie.
Kryteria sukcesu i wymagania
- Zastosuj jasne, bezkompromisowe reguły programistyczne, aby spełnić standardy dostępności cyfrowej.
- Zadbaj o bezwzględne wdrożenie atrybutu
langw kodzie HTML wszędzie tam, gdzie następuje jakakolwiek zmiana języka. Atrybut ten możesz i powinieneś aplikować bezpośrednio do elementów strukturalnych, takich jak akapity<p>, sekcje<div>, cytaty blokowe<blockquote>, elementy list<li>czy śródtekstowe znaczniki<span>. - Używaj wyłącznie oficjalnych i aktualnych kodów językowych zgodnych ze standardem ISO 639. Jeśli zachodzi taka potrzeba regionalna, uzupełnij je o kod kraju na podstawie specyfikacji ISO 3166 (np.
en-US,fr-CA). - Przeanalizuj drobiazgowo całą strukturę strony i zidentyfikuj każdą modyfikację językową, od całych bloków tekstu, przez cytaty, aż po pojedyncze słowa i zwroty.
- Pamiętaj o możliwości zagnieżdżania atrybutów
lang– w takim układzie technologie asystujące nadadzą najwyższy priorytet elementowi znajdującemu się najgłębiej w strukturze. - Nigdy nie polegaj na stylach CSS. Wizualna zmiana kroju pisma czy wyróżnienie kolorem za pomocą klas nie niesie żadnej wartości semantycznej i jest całkowicie ignorowane przez czytniki ekranu.
- W przypadku dynamicznego generowania komponentów przez JavaScript, bezwzględnie dopilnuj, aby Twoje skrypty poprawnie wstrzykiwały atrybut
langwraz z nowo pojawiającą się treścią w drzewie DOM.
Wyjątki i sytuacje szczególne
W przeciwieństwie do powszechnego przekonania, oficjalna specyfikacja W3C definiuje cztery wyraźne oraz formalne grupy wyjątków, w których programowe oznaczanie zmian językowych nie jest wymagane:
- Nazwy własne ((ang.) proper names): Imiona, nazwiska, nazwy własne marek, miast czy państw (np. „Steve Jobs”, „Paris”) nie podlegają obowiązkowi tagowania.
- Terminy techniczne ((ang.) technical terms): Specjalistyczne pojęcia naukowe, medyczne czy techniczne zapożyczone z obcych lub martwych języków (np. Homo sapiens, hertz, habeas corpus) są zwolnione z kryterium.
- Słowa o nieokreślonym języku ((ang.) words of indeterminate language): Wyrazy, których pochodzenia językowego nie można jednoznacznie zidentyfikować w ludzkiej mowie.
- Słowa lub frazy zakorzenione w języku otaczającym: Zapożyczenia, które na stałe weszły do słownika i powszechnego użytku w danym języku (np. słowo „podcast” użyte w tekście francuskim czy „rendezvous” w zdaniu angielskim). Ponieważ syntezatory mowy zazwyczaj radzą sobie z ich prawidłową fonetyką w kontekście języka natywnego, nie musisz ich dodatkowo oznaczać.
- Ograniczenia (ang.) user agentów: Problemy wynikające z błędów samych technologii asystujących nie obciążają twórcy strony i nie stanowią naruszenia tego kryterium.
Przykłady implementacji
Najczęstsze błędy
- Błędy w kodach językowych: Stosowanie niepoprawnych, zdezaktualizowanych lub własnoręcznie wymyślonych oznaczeń (np. używanie kodu
engzamiasten, bądźpolzamiastpl), co całkowicie uniemożliwia poprawną interpretację przez oprogramowanie. - Używanie CSS do oznaczania języka: Próby zastąpienia semantycznego kodu poprzez style wizualne, np. tworzenie klas
.jezyk-angielski { font-style: italic; }, które są całkowicie niewidoczne dla technologii wspomagających. - Brak oznaczeń dla elementów interfejsu: Ignorowanie zmian językowych w komponentach interaktywnych, takich jak etykiety formularzy, przyciski akcji czy komunikaty systemowe.
- Zapominanie o krótkich frazach i cytatach: Pozostawianie bez znaczników obcojęzycznych zdań, rozbudowanych cytatów bądź zwrotów, które nie spełniają ścisłej definicji powszechnych zapożyczeń.
Najlepsze praktyki
- Testowanie z technologiami asystującymi: Regularnie weryfikuj działanie serwisu za pomocą czytników ekranu (np. NVDA), sprawdzając, czy akcent oraz wymowa obcych fraz zmieniają się prawidłowo.
- Przeszkolenie twórców treści: Zadbaj o to, aby każda osoba publikująca materiały na stronie rozumiała wymagania techniczne i potrafiła właściwie posługiwać się edytorami tekstu w celu oznaczania języka.
- Walidacja kodów językowych: Wykorzystuj oficjalne walidatory i narzędzia programistyczne do stałej kontroli poprawności używanych tagów ISO.
- Systematyczność: Przyjmij żelazną zasadę, że każda intencjonalna zmiana języka – niezależnie od jej długości – musi zostać odzwierciedlona w kodzie HTML strony.
Metody testowania
- Narzędzie deweloperskie (ang.) Developer Tools: Dokonaj szczegółowej inspekcji drzewa DOM i zweryfikuj, czy wszystkie fragmenty tekstu w obcym języku posiadają właściwie przypisany atrybut
lang. - NVDA: Uruchom czytnik ekranu i odsłuchaj treści wielojęzyczne, aby upewnić się, że syntezator mowy bezbłędnie przełącza pakiety językowe i stosuje poprawną fonetykę bez zniekształceń.
- (ang.) W3C Markup Validation Service: Przetestuj kod strony w oficjalnym walidatorze, aby upewnić się, że znaczniki oraz wartości subtagów językowych są w pełni poprawne i zgodne ze standardami.
Sprawdź swoją wiedzę
W linku poniżej znajduje się 6 przykładów fragmentów tekstu oraz elementów interfejsu w języku polskim, które zawierają wtrącenia w innych językach. Twoim zadaniem jest sprawdzenie, czy zmiana języka została poprawnie oznaczona programowo.
Jak to sprawdzić?
- Zbadaj obcojęzyczne słowa, cytaty lub przyciski za pomocą narzędzi deweloperskich (Zbadaj element).
- Sprawdź, czy element otaczający obcojęzyczną treść (np.
<span>,<blockquote>,<button>) posiada atrybutlang. - Zwróć uwagę, czy stylizacja CSS nie jest używana jako jedyny sposób na wyróżnienie obcego języka.
- Pamiętaj o wyjątkach: nazwy własne, terminy techniczne i powszechne zapożyczenia nie wymagają oznaczania.
Notatka: Zanim zajrzysz do rozwiązania, przetestuj i zapisz swoje wnioski na kartce.
Proponowane narzędzia: Narzędzie deweloperskie (ang.) Developer Tools, NVDA
Link: https://pdc.ambiscale.com/training/wcag-3-1-2/
#1 BŁĄD
Problem: Francuskie zdanie „c’est la vie” nie zostało w żaden sposób oznaczone programowo.
Dlaczego: Czytnik ekranu z domyślnym polskim syntezatorem przeczyta tę frazę polską fonetyką (mniej więcej „cest la wje”), co zniekształca wymowę i utrudnia zrozumienie.
Naprawa: Należy otoczyć obcojęzyczny fragment znacznikiem <span> z odpowiednim atrybutem: <span lang="fr">c'est la vie</span>.
Uwaga: Choć zwrot ten bywa używany w polszczyźnie, wprowadzenie „Jak to mówią Francuzi” jawnie sygnalizuje zamierzoną zmianę języka — dlatego wyjątek dla powszechnych zapożyczeń tutaj nie obowiązuje.
#2 DOBRZE
Dlaczego: Angielski zwrot „game changer” został poprawnie otoczony znacznikiem <span lang="en">. Dzięki temu syntezator mowy automatycznie przełączy się na angielski akcent na czas czytania tych dwóch słów, a następnie wróci do języka polskiego.
#3 BŁĄD
Problem: Włoski zwrot „dolce far niente” został wyróżniony jedynie wizualnie za pomocą klasy CSS (inna czcionka, kolor).
Dlaczego: Style CSS są całkowicie ignorowane przez czytniki ekranu. Wizualna zmiana nie niesie żadnej wartości semantycznej, więc program nie wie, że nastąpiła zmiana języka.
Naprawa: Dodaj atrybut języka do istniejącego znacznika: <span class="tc-foreign-css" lang="it">dolce far niente</span>.
#4 DOBRZE
Dlaczego: Cały łaciński cytat blokowy został poprawnie oznaczony atrybutem lang="la" bezpośrednio w znaczniku <blockquote>. Nie trzeba dodawać dodatkowego <span> wewnątrz, atrybut można aplikować do elementów strukturalnych.
Uwaga: Syntezatory mowy zazwyczaj nie mają osobnego głosu łacińskiego, więc wymowa może się nie zmienić — oznaczenie jest jednak wymagane i poprawne: czytnik nie zastosuje ślepo polskich reguł, a np. automatyczne tłumacze i słowniki prawidłowo rozpoznają język fragmentu.
#5 BŁĄD
Problem: Etykieta przycisku „Subscribe now” jest w języku angielskim, ale nie posiada atrybutu lang.
Dlaczego: Kryterium 3.1.2 dotyczy nie tylko tekstu w akapitach, ale również elementów interfejsu (przycisków, etykiet formularzy). Brak oznaczenia spowoduje błędne odczytanie etykiety przez polski syntezator.
Naprawa: Dodaj atrybut bezpośrednio do przycisku: <button class="tc-btn" lang="en">Subscribe now</button>.
#6 DOBRZE
Dlaczego: Słowo „podcast” to powszechne zapożyczenie, które na stałe weszło do języka polskiego. „Apple” i „Steve Jobs” to nazwy własne (marka i imię/nazwisko). Zgodnie z oficjalną specyfikacją W3C, nazwy własne oraz słowa zakorzenione w języku otaczającym są zwolnione z obowiązku oznaczania atrybutem lang.
Źródła
- Abou-Zahra S., Eggert E., Vanderheiden G. [i in.] (red.), „3.1.2 Language of Parts Level AA”, [w:] Web Content Accessibility Guidelines (WCAG) 2.2 Quick Reference, 2025, https://www.w3.org/WAI/WCAG22/quickref/#language-of-parts [dostęp: 28.05.2026].
- Accessibility Guidelines Working Group Participants, „Understanding SC 3.1.2 Language of Parts (Level AA)”, [w:] WCAG 2.2 Understanding Docs, 2026, https://www.w3.org/WAI/WCAG22/Understanding/language-of-parts.html [dostęp: 28.05.2026].
- World Wide Web Consortium (W3C), „Kryterium sukcesu 3.1.2 Język części”, [w:] Web Content Accessibility Guidelines (WCAG) 2.1, tłum. Fundacja Instytut Rozwoju Regionalnego, 2021, https://www.w3.org/Translations/WCAG21-pl/#jezyk-czesci [dostęp: 28.05.2026].
- DOCK sp. z o.o., WCAG 3.1.2: Język części, https://wcag.dock.codes/pl/dokumentacja/kryteria-sukcesu-wcag/wcag-312/ [dostęp: 28.05.2026].
- Międzynarodowa Organizacja Normalizacyjna (ISO), ISO 639 language codes, 2026, https://www.iso.org/iso-639-language-code [dostęp: 28.05.2026].
- Międzynarodowa Organizacja Normalizacyjna (ISO), ISO 3166 country codes, 2026, https://www.iso.org/iso-3166-country-codes.html [dostęp: 28.05.2026].
Dodatkowe linki
- W3C WCAG:
- Dokładna definicja: https://www.w3.org/WAI/WCAG22/quickref/#language-of-parts
- Zrozumienie podpunktu: https://www.w3.org/WAI/WCAG22/Understanding/language-of-parts.html