HTTP заголовки, meta элементы и информация о языке

Предполагаемая аудитория: шифровальщики XHTML/HTML (используя редакторы или скрипты), разработчики скриптов (PHP, JSP, и т.д.), менеджеры веб проектов, и каждый, кто хочет лучше понять как вписываются HTTP и meta элементы в картину назначения языка в HTML.

Обновление перевода:

Вопрос

Стоит ли в HTML размещать информацию о языке в HTTP заголовках и meta элементах, и как они отличаются от такой же информации в атрибутах языка?

Вводная информация

В дополнение к lang и/или xml:lang атрибутов в html тэге, также можно найти информацию о языке, связанную с HTML страницей в meta элементах и в HTTP заголовке. В этой статье мы рассмотрим, как они должны (или не должны) использоваться.

Обратите внимание, что вы всегда должны использовать lang и/или xml:lang атрибуты в html тэге (например <html lang="en">) и в любом другом месте страницы, где есть значительные изменения языка. Дополнительные сведения об использовании языковых атрибутов смотрите в статье Назначение языка в HTML.

Quick answer

HTTP Content-Language заголовок может использоваться для обеспечения meta данных о целевой аудитории страницы, и может указать, что это более чем один язык. Content-Language значение атрибута http-equiv в meta элементе больше не должно использоваться. Чтобы назначить язык по умолчанию для текущего текста на странице вы должны использовать атрибут языка в html тэге.

Longer answer

Прежде чем ответить на вопрос в верхней части этой страницы, важно сначала провести различие между (1) использование meta данных файла для определения аудитории для документа, и (2) указать язык, используемый для обработки контента.

Далее мы рассмотрим в свою очередь, HTTP и meta назначения, и их плюсы и минусы.

Указание файла meta данных: языка целевой аудитории

Meta данные, которые описывают язык или языки целевой аудитории что относятся к документу в целом. Такие meta данные могут использоваться для поиска, обслуживания правильной версии языка, управления рабочими процессами, классификации и т.д. Там где есть изменения языка в документе, информация о языке целевой аудитории не является достаточно специфической для поддержки обработки текстов (например, таким образом как нужно для применения преобразования текста в речь, стайлинга, автоматического назначения шрифта и т.д.)

Язык целевой аудитории не включает в себя все языки, используемые в документе. Многие документы в Сети содержат встроенные фрагменты контента на разных языках, в то время как страница явно рассчитана на людей, говорящих на одном конкретном языке. Например, Немецкий навигационная система для Пекина может содержать полезные фразы на Китайском языке, но она направлена ​​на Немецкоязычную аудиторию, а не на Китайскую.

С другой стороны, также возможно, что страница содержит одинаковый или параллельный контент на нескольких языках. Например, Канадские веб-страницы могут приветствовать читателей текстом на французском языке в левой колонке, и тем же текстом на Английском языке в правой колонке. Вот документ в равной степени ориентирован на людей, которые общаются на двух языках, поэтому есть два языка целевой аудитории. Эта ситуация не столь распространена в Интернете, как в печатных материалах, так как очень легко создать ссылки на отдельные страницы в Интернете для различных аудиторий, но это все же происходит, там где есть многоязычные сообщества. Другим вариантом использования является блог или страница новостей, которые направлены на многоязычные сообщества, где некоторые статьи на странице написаны на одном языке, а некоторые на другом. Например, форум используемый сообществом Панджаби одновременно может содержать сообщения на Английском, Хинди и Панджаби.

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

Установка языка для обработки текста

При указании языка для обработки текстов вы назначаете язык, где уже написанный конкретный диапазон текста, так что клиентские приложения или приложения работающие с текстом (например, голосовые браузеры, программы для проверки орфографии, или процессоры стиля) могут при запросе эффективно обрабатывать текст. Так что мы, при необходимости, говорим о связи одного языка с конкретным диапазоном текста.

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

lang (и/или xml:lang) атрибуты должны использоваться для определения языка для обработки текстов вашего контента. Именно поэтому вы можете использовать только одно значение языка с этими атрибутами.

Установка языка с помощью meta элемента (не рекомендуется)

Использование meta элемента в head документа с атрибутом http-equiv установленным в Content-Language не упоминается прямо в HTML 4.01 спецификации, и тем не менее, в течение длительного времени в Сети большая часть неофициальных руководств о том, как назначить язык для HTML страницы предлагали его использования, и некоторые инструменты для разработки HTML автоматически создают такие элементы когда вы указываете информацию о языке используя диалоговые окна. Вот пример назначения Английского языка.

Не используйте это <meta http-equiv="Content-Language" content="en">

В отличие от lang и xml:lang атрибутов, значение атрибута content может быть списком языковых тэгов разделенных запятыми. В следующем примере назначаются основные языки документа (в равной степени) Немецкий, Французский и Итальянский.

Не используйте это <meta http-equiv="Content-Language" content="de, fr, it">

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

До недавнего времени несколько браузеров не обращали внимание на этот meta элемент. Затем несколько основных браузеров начали использовать этот элемент, когда не было языкового атрибута в html тэге, чтобы установить в документе язык текста по умолчанию (для чего вы должны использовать атрибут языки в html тэге). Способ в какой это было реализовано был непоследовательным, и, следовательно, ненадежным для различных браузеров.

Из истории возникновения путаницы и непоследовательного выполнения, что окружает этот вид назначения, в 2011 году Рабочая Группа HTML приняла решение сделать meta элемент с http-equiv установленным в Content-Language несоответствующий в HTML. Это означает, что вы больше не должны использовать его в HTML5, и поэтому, хотя технически это не является недействительным в других типах HTML, сейчас лучше всего его нигде не использовать.

Однако для обеспечения обратной совместимости HTML5, сделал уступку. Если есть meta элемент с http-equiv установленным в Content-Language в разметке, и если нет языкового атрибута в html тэге, и если meta элемент имеет тот же смысл, что и единый языковый тэг, то браузер может (не должен) использовать эту информацию, чтобы угадать язык по умолчанию для текста на странице. Сказав, что это только для обратной совместимости, вы действительно больше не должны использовать этот подход. Просто используйте языковой атрибут в html тэге.

Одним из последствий упускання HTML5 meta элемента для назначения языки является то, что сейчас нет очевидного способа обеспечить meta данные о содержании самого документа. На момент написания, трудно найти примеры использования таких meta данных, хотя в теории это было бы очень полезно для систем управления контентом, процессов перевода и т.д. Подобная информация может переноситься HTTP заголовком (как мы увидим в следующей главе), но такие системы и процессы, как правило, работают с документами, которые не передаются от сервера с HTTP заголовком, и поэтому будут полезными meta данные внутри документа.

Возможно другой подход, например RDFa(Инфраструктура описания ресурсов в атрибутах), обеспечит возможность предоставления такой информации в будущем.

Dublin Core (Дублинское Ядро) в meta элементе. Поскольку правила в HTML4 для meta элементов положили несколько ограничений относительно того, как они используются, то это также возможно, хотя и не часто, найти такие случаи когда это используется, чтобы выразить информацию о языке с использованием обозначения Dublin Core. Не похоже, однако, что эта информация когда-либо использовалась браузерами, и пока неясно, в какой мере он используется другими приложениями.

Не используйте это <meta name="dc.language" content="en">

Указание языка в HTTP заголовке

Информацию о языке можно также найти в Content-Language HTTP заголовке, который отправляется с документом, если документ запрашивается с сервера. Эта информация связана с конкретной страницей путем установок на сервере или с помощью скрипта на сервере. Смотрите последнюю строчку в примере, приведенном ниже, которая показывает HTTP-ответ, который сопровождает статью.

HTTP/1.1·200·OK
Date:·Sat,·23·Jul·2011·07:28:50·GMT
Server:·Apache/2
Content-Location:·qa-http-and-lang.en.php
Vary:·negotiate,accept-language,Accept-Encoding
TCN:·choice
P3P:·policyref="http://www.w3.org/2001/05/P3P/p3p.xml"
Connection:·close
Transfer-Encoding:·chunked
Content-Type:·text/html; charset=utf-8
Content-Language:·en

Как meta элемент с http-equiv атрибутом установленным в Content-Language, значение HTTP заголовка может быть списком языковых тэгов разделенных запятыми. HTTP спецификация четко указывает, что целью этой информации является предоставление meta данных о целевой аудитории документа.

Если в HTML тэге не назначили язык, то некоторые, но не все основные браузеры распознают значение, назначенное в HTTP заголовке, чтобы установить по умолчанию язык текста на странице. Однако, даже в браузере что делает это, информация, кажется, должна применяться к некоторым функциям, но не к тем, на которые влияет язык. Спецификация HTML5 говорит, что если нет атрибута lang в html тэге, и если нет meta элемента с http-equiv атрибутом установленным в Content-Language, и если есть только один языковой тэг в назначении HTTP заголовка, тогда браузер может использовать эту информацию для того, чтобы угадать язык текста на странице по умолчанию.

Поскольку вы всегда должны использовать языковой атрибут в html тэге, и языковой атрибут всегда имеет приоритет над информацией с HTTP заголовка. HTTP заголовок должен использоваться только для предоставления meta данных о целевой аудитории документа в целом, и языковой атрибут в HTML тэге должен использоваться для назначения языка контента по умолчанию.

Ссылки: