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.

Швидка відповідь

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

Детальна відповідь

Перш ніж відповісти на питання у верхній частині цієї сторінки, важливо спочатку провести різницю між (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 тезі повинен використовуватися для призначення мови контенту за замовчуванням.

Посилання: