Menu

Атрибут lang в HTML: коды языков и на что он влияет

Атрибут lang сообщает браузерам, программам чтения с экрана и переводчикам, на каком языке написано содержимое. Разберем, куда его ставить, какие коды использовать (en, ru, en-US, pt-BR), как отметить фразу на другом языке и что он меняет визуально.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Язык страницы

Поставьте атрибут lang элементу <html> с кодом языка, на котором написана страница:

Видимого эффекта на этот абзац атрибут не оказывает, но меняет то, как обрабатывается страница: программа чтения с экрана читает ее английским голосом, браузер учитывает его, решая, предлагать ли перевод, а программа проверки орфографии может выбрать по нему английский словарь. Без него инструментам приходится угадывать, и программа чтения с экрана, настроенная на другой язык, может прочитать английский текст с неправильным произношением.

Коды языков

Значение это языковой тег по стандарту BCP 47. Чаще всего это двухбуквенный код языка, за которым может идти регион или письменность:

КодЯзык
enАнглийский
en-US, en-GBАнглийский в США, в Великобритании
es, es-MXИспанский, испанский в Мексике
pt-BRПортугальский в Бразилии
fr, de, itФранцузский, немецкий, итальянский
ar, heАрабский, иврит (справа налево, см. ниже)
ja, koЯпонский, корейский
zh-Hans, zh-HantКитайский в упрощенных, традиционных иероглифах

Коды не зависят от регистра, но принято писать язык строчными, а регион заглавными. Добавляйте регион, только когда вариант языка важен; en это полное и правильное значение.

Что lang меняет визуально

Большинство эффектов lang предназначены для программ, но некоторые видны на экране. Кавычки элемента <q> зависят от языка, как и правила смены регистра:

В каждой строке свой стиль кавычек. В последнем столбце одно и то же text-transform: uppercase дает «ISTANBUL» в английском и «İSTANBUL» в турецком, потому что в турецком у заглавной i сохраняется точка. Замените lang у турецкой строки на en, и точка исчезнет. Автоматическая расстановка переносов (hyphens: auto в CSS) тоже зависит от lang: браузеру нужно знать язык, чтобы понимать, где можно переносить слова.

Фразы на другом языке

lang работает у любого элемента, а не только у <html>. Когда страница на одном языке цитирует фразу на другом, оберните фразу и дайте ей собственный код. CSS может выбирать языки селектором :lang():

Программа чтения с экрана переключается на французское произношение для «bon appétit» и обратно на английское после нее. :lang(fr) также совпадает с fr-CA и любым другим вариантом французского и совпадает с элементами, которые наследуют язык от предка, чего не сделал бы селектор атрибута вроде [lang="fr"].

Языки с письмом справа налево: dir

Арабский, иврит, персидский и урду пишутся справа налево. lang называет язык; атрибут dir задает направление. Целая страница на арабском использует оба атрибута у <html>:

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

Для короткой фразы справа налево внутри страницы с письмом слева направо поставьте оба атрибута элементу вокруг нее:

Blockquote выравнивается по правому краю, и его зеленая полоса тоже переходит вправо, потому что border-inline-start следует направлению. Логические свойства вроде margin-inline-start вместо margin-left сохраняют правильную раскладку в обоих направлениях.

lang и hreflang

lang описывает содержимое элемента. hreflang ставится у ссылки и описывает страницу, на которую она ведет. Сайты с переводами перечисляют все версии в <head>, чтобы поисковики отправляли каждого читателя на нужную:

<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/">

Каждая переведенная страница все равно задает собственный lang у <html>: lang="de" у немецкой.

Частые ошибки

  • Нет lang. Многие шаблоны его забывают; задавайте его рядом с doctype на каждой странице.
  • lang="en", скопированный в переводы. Немецкая страница, помеченная как английская, читается с английским произношением. Код должен соответствовать содержимому.
  • Код страны вместо кода языка. lang="jp" и lang="gr" это не японский и греческий; их коды ja и el.
  • lang для задания направления. Один lang="ar" не заставляет текст идти справа налево. Добавьте dir="rtl".
  • lang="en_US". Разделитель это дефис: en-US.

Часто задаваемые вопросы

Что делает атрибут lang в HTML?

Он объявляет язык содержимого элемента. Программы чтения с экрана используют его, чтобы выбрать правильный голос и произношение, браузеры предлагают по нему перевод, выбирают кавычки и расставляют переносы, а некоторые программы проверки орфографии выбирают по нему словарь.

Что писать в атрибуте lang у html?

Код языка по стандарту BCP 47: en для английского, ru для русского, es для испанского, ja для японского. Регион добавляйте, только когда он важен, как в en-US, en-GB или pt-BR.

Что использовать: lang="en" или lang="en-US"?

Оба варианта корректны. Для большинства английских страниц достаточно en. Используйте en-US или en-GB, когда важен региональный вариант, например для орфографии, дат или произношения некоторых слов.

Влияет ли атрибут lang на SEO?

Google заявлял, что определяет язык по самому тексту и не полагается на атрибут lang. Все равно задавайте его правильно: его используют другие поисковики, переводчики и программы чтения с экрана. Чтобы связать переведенные версии страницы, используйте ссылки hreflang.

Как отметить текст на другом языке?

Добавьте lang элементу вокруг него: <span lang="fr">bon appétit</span>. Программы чтения с экрана переключают произношение для этой фразы, а CSS может оформить ее через :lang(fr).

Чем lang отличается от hreflang?

lang говорит, на каком языке содержимое элемента. hreflang ставится у ссылки и говорит, на каком языке страница, на которую она ведет, и так сайты указывают поисковикам версии страницы на других языках.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ