Menu

Atrybut lang w HTML: kody języków i co zmieniają

Atrybut lang mówi przeglądarkom, czytnikom ekranu i narzędziom do tłumaczenia, w jakim języku jest treść. Dowiedz się, gdzie go umieścić, jakich kodów używać (en, en-US, pt-BR), jak oznaczyć frazę w innym języku i co widocznie zmienia.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Ustaw język strony

Umieść atrybut lang na elemencie <html>, z kodem języka, w którym napisana jest strona:

Atrybut nie zmienia wyglądu tego akapitu, ale zmienia sposób obsługi strony: czytnik ekranu czyta ją angielskim głosem, przeglądarka bierze go pod uwagę, gdy decyduje, czy zaproponować tłumaczenie, a narzędzie do sprawdzania pisowni może dzięki niemu wybrać słownik angielski. Bez niego narzędzia muszą zgadywać, a czytnik ekranu ustawiony na inny język może czytać angielski tekst z błędną wymową.

Kody języków

Wartość to znacznik języka ze standardu BCP 47. Większość to dwuliterowy kod języka, opcjonalnie z regionem lub systemem pisma:

KodJęzyk
enangielski
en-US, en-GBangielski w Stanach Zjednoczonych, w Wielkiej Brytanii
es, es-MXhiszpański, hiszpański w Meksyku
pt-BRportugalski w Brazylii
fr, de, itfrancuski, niemiecki, włoski
ar, hearabski, hebrajski (od prawej do lewej, zobacz niżej)
ja, kojapoński, koreański
zh-Hans, zh-Hantchiński w znakach uproszczonych, tradycyjnych

Wielkość liter w kodach nie ma znaczenia, ale przyjęło się pisać język małymi literami, a region wielkimi. Region dodawaj tylko wtedy, gdy odmiana ma znaczenie; en to pełna i poprawna wartość.

Widoczne zmiany, które wprowadza lang

Większość efektów lang dotyczy oprogramowania, ale kilka widać na ekranie. Cudzysłowy z elementu <q> zależą od języka, podobnie jak zasady wielkości liter:

Każdy wiersz dostaje własny styl cudzysłowów. W ostatniej kolumnie ta sama reguła text-transform: uppercase daje "ISTANBUL" po angielsku i "İSTANBUL" po turecku, bo w tureckim wielka litera i zachowuje kropkę. Zmień lang w tureckim wierszu na en, a kropka zniknie. Automatyczne dzielenie wyrazów (hyphens: auto w CSS) też zależy od lang: przeglądarka musi znać język, żeby wiedzieć, gdzie można dzielić słowa.

Oznaczanie fraz w innym języku

lang działa na każdym elemencie, nie tylko na <html>. Gdy strona w jednym języku cytuje frazę w innym, otocz frazę elementem i nadaj jej własny kod. CSS może wybierać języki selektorem :lang():

Czytnik ekranu przełącza się na francuską wymowę dla "bon appétit", a potem wraca do angielskiej. :lang(fr) pasuje też do fr-CA i każdej innej odmiany francuskiego oraz do elementów, które dziedziczą język po przodku, czego selektor atrybutu taki jak [lang="fr"] by nie wychwycił.

Języki pisane od prawej do lewej: dir

Arabski, hebrajski, perski i urdu zapisuje się od prawej do lewej. lang określa język; atrybut dir ustawia kierunek. Cała strona po arabsku używa obu na <html>:

<html lang="ar" dir="rtl">

Dla krótkiej frazy pisanej od prawej do lewej na stronie pisanej od lewej do prawej umieść oba atrybuty na otaczającym ją elemencie:

Cytat wyrównuje się do prawej, a jego zielony pasek również przesuwa się na prawo, bo border-inline-start podąża za kierunkiem. Właściwości logiczne, takie jak margin-inline-start zamiast margin-left, utrzymują poprawny układ w obu kierunkach.

lang vs hreflang

lang opisuje treść elementu. hreflang umieszcza się na linku i opisuje stronę, na którą on wskazuje. Strony z tłumaczeniami wymieniają każdą wersję w <head>, żeby wyszukiwarki mogły kierować każdego czytelnika do właściwej:

<link rel="alternate" hreflang="en" href="https://example.com/">
<link rel="alternate" hreflang="de" href="https://example.com/de/">
<link rel="alternate" hreflang="x-default" href="https://example.com/">

Każda przetłumaczona strona nadal ustawia własny lang na <html>: lang="de" na niemieckiej.

Częste błędy

  • Pominięcie lang. Wiele szablonów o nim zapomina; ustawiaj go obok doctype na każdej stronie.
  • Kopiowanie lang="en" do przetłumaczonych stron. Niemiecka strona oznaczona jako angielska jest czytana z angielską wymową. Dopasuj go do treści.
  • Kod kraju zamiast kodu języka. lang="jp" i lang="gr" to nie japoński i grecki; właściwe kody to ja i el.
  • Ustawianie kierunku przez lang. Samo lang="ar" nie sprawi, że tekst popłynie od prawej do lewej. Dodaj dir="rtl".
  • Pisanie lang="en_US". Separatorem jest łącznik: en-US.

Najczęściej zadawane pytania

Co robi atrybut lang w HTML?

Deklaruje język treści elementu. Czytniki ekranu używają go do wyboru właściwego głosu i wymowy, przeglądarki do proponowania tłumaczenia, wyboru cudzysłowów i dzielenia wyrazów, a niektóre narzędzia do sprawdzania pisowni do wyboru słownika.

Co wpisać w atrybucie lang elementu html?

Kod języka ze standardu BCP 47: en dla angielskiego, es dla hiszpańskiego, fr dla francuskiego, ja dla japońskiego. Region dodawaj tylko wtedy, gdy ma znaczenie, jak w en-US, en-GB czy pt-BR.

Użyć lang="en" czy lang="en-US"?

Oba są poprawne. en wystarcza dla większości angielskich stron. Użyj en-US lub en-GB, gdy odmiana regionalna ma znaczenie, na przykład dla pisowni, dat albo wymowy niektórych słów.

Czy atrybut lang wpływa na SEO?

Google podaje, że rozpoznaje język z samego tekstu i nie opiera się na atrybucie lang. Mimo to ustaw go poprawnie: używają go inne wyszukiwarki, narzędzia do tłumaczenia i czytniki ekranu. Do łączenia przetłumaczonych wersji strony służą linki hreflang.

Jak oznaczyć tekst w innym języku?

Dodaj lang do elementu, który go otacza: <span lang="fr">bon appétit</span>. Czytniki ekranu zmieniają wymowę dla tej frazy, a CSS może ją ostylować przez :lang(fr).

Czym różni się lang od hreflang?

lang mówi, w jakim języku jest treść elementu. hreflang umieszcza się na linku i mówi, w jakim języku jest strona docelowa; w ten sposób strony wskazują wyszukiwarkom wersje w innych językach.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ