8 Інформація про мову і напрямок тексту

В цьому розділі документа обговорюються два важливих питання інтернаціоналізації HTML: завдання мови (атрибут lang ) і напрямки (атрибут dir ) тексту в документі.

8.1 Вибір мови вмісту: атрибут lang

визначення атрибутів
lang = код мови [CI]
Цей атрибут вказує основна мова значень атрибутів елементів і секстового вмісту. За замовчуванням значення цього атрибута не встановлено.

Інформація про мову, зазначена за допомогою атрибута lang , може використовуватися агентом користувача для управління генерацією зображення різними способами. Деякі ситуації, в яких вказується автором інформація а мовою, може бути корисна:

  • Допомога пошуковим машинам
  • Допомога синтезаторів мови
  • Допомога агентам користувачів у виборі варіантів гліфів для високоякісної друкарні
  • Допомога агенту користувача у виборі набору лапок
  • Допомога агенту користувача в питаннях перенесення , лігатур і інтервалів
  • Допомога програма перевірки граматики і орфографії

Атрибут lang вказує код вмісту елемента і значень атрибутів; відноситься він до цього атрибуту, залежить від синтаксису і семантики атрибута і від операції.

Атрибут lang призначений для того, щоб дозволити агентам користувачів більш осмислено генерувати зображення на основі прийнятої культурної практики для даної мови. Це не має на увазі, що агенти користувачів повинні генерувати символи, які не є типовими для конкретної мови, менш осмисленим способом; агенти користувачів повинні намагатися згенерувати се символи , незалежно від значення, зазначеного в атрибуті lang .

Наприклад, якщо в російській тексті повинен з'явитися символ грецького алфавіту:

  <P> <Q lang = "ru"> "Ця суперпотужність була результатом & gamma; -радіації, </ Q> пояснив він. </ P>

агент користувача (1) повинен спробувати згенерувати російський текст відповідним чином (наприклад, у відповідних лапках) і (2) спробувати згенерувати символ γ, навіть якщо це не російська символ.

Додаткову інформацію див. В розділі про що не відображаються символах .

8.1.1 Коди мов

Значенням атрибута lang є код мови, що ідентифікує природний розмовну мову, який усно, письмово або в інший спосіб використовується для передачі інформації між людьми. Комп'ютерні мови явно виключені з кодів мов.

У документі [RFC1766] визначені і описані всі коди мов, які повинні використовуватися в документах на мові HTML.

Коротко кажучи, коди мов складаються з первинного коду і ряду підкодів, який може бути порожнім:

  код-мови = первинний-код ( "-" підкоди) *

Ось кілька прикладів кодів мов:

  • "En": англійська
  • "En-US": американська версія англійської.
  • "En-cockney": кокні (діалект англійської).
  • "I-navajo": навахо (мова американських індіанців).
  • "X-klingon": Первинний код "x" позначає експериментальний код мови

Дволітерні первинні коди зарезервовані для скорочень мов за стандартом [ISO639] . Сюди входять коди fr (французький), de (німецький), it (італійський), nl (голландський), el (грецький), es (іспанська), pt (португальська), ar (арабська), he (іврит), ru ( російський), zh (китайський), ja (японський), hi (хінді), ur (урду) і sa (санскрит).

Будь Двохлітерний підкоди вважається кодом країни в стандарті [ISO3166] .

8.1.2 Спадкування кодів мов

Елемент успадковує інформацію про код мови в наступному порядку старшинства (від вищого до нижчого):

  • Атрибут lang , встановлений для самого елемента.
  • Найближчий батьківський елемент, для якого встановлено значення атрибута lang (тобто атрибут lang успадковується).
  • Тема HTTP "Content-Language" (який може конфигурироваться на сервері). наприклад:
     Content-Language: en-cockney
    
  • Значення за замовчуванням і налаштування агента користувача.

У цьому прикладі первинним мовою документа є французький ( "fr"). Один абзац оголошений іспанською мовою ( "es"), після чого мова знову стає французьким. У наступний абзац включена японська фраза ( "ja"), після чого мова знову змінюється на французький.

  <! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.0 // EN"
  "Http://www.w3.org/TR/REC-html40/strict.dtd">
 <HTML lang = "fr">
 <HEAD>
 <TITLE> Un document multilingue </ TITLE>
 </ HEAD>
 <BODY>
 ... текст інтерпретується як французький ... <P lang = "es"> ... текст інтерпретується як іспанський ... <P> ... текст знову інтерпретується як французький ... <P> ... французький текст , в якому попадається <EM lang = "ja"> фрагмент на японському </ EM>, а тут знову починається французький ...

 </ BODY>
 </ HTML>
Примітка. Стовпчики таблиці можуть успадковувати значення атрибута lang немає від батька, а з першого осередку об'єднання. Детальніше див. У розділі успадкування вирівнювання .

8.1.3 Інтерпретація кодів мов

У контексті HTML код мови повинен інтерпретуватися агентами користувача як ієрархія знаків, а не один знак. Якщо агент користувача генерує зображення відповідно до інформації про мову (скажімо, порівнюючи мовні коди в таблицях стилів і значення атрибута lang ), він завжди повинен знаходити точну відповідність, але повинен також брати до уваги первинні коди. Таким чином, якщо значення атрибута lang "en-US" встановлено для елемента HTML , агент користувача повинен спочатку вибрати інформацію про стилі, збігається з "en-US", а потім згенерувати більш загальне значення "en".

Примітка. Ієрархія кодів мов не гарантує розуміння всіх мов з загальними префіксами людьми, побіжно говорять на одному або декількох з цих мов. Вона допомагає користувачеві запросити цю спільність, коли для користувача вона є істинною.

8.2 Вказівка напрямку тексту і таблиць: атрибут dir

визначення атрибутів

dir = LTR | RTL [CI]
Цей атрибут задає основний напрямок нейтрального в сенсі напрямку тексту (наприклад, тексту, який не буде наслідувати спрямованість, як визначено в [UNICODE] ) і напрямок таблиць . Можливі значення:
  • LTR: Зліва направо.
  • RTL: Справа наліво.

Крім завдання мови документа за допомогою атрибута lang , автори можуть вказати основний напрям (зліва направо або справа наліво) частин тексту, таблиці і т.д. Це робиться за допомогою атрибута dir .

Специфікація [UNICODE] призначає напрямок символам і визначає (складний) алгоритм для визначення відповідного напрямку тексту. Якщо документ не містить відображуваних справа наліво символів, агент користувача не повинен використовувати двонаправлений алгоритм [UNICODE] . Якщо документ містить такі символи, і якщо агент користувача і відображає, він повинен використовувати двонаправлений алгоритм.

Хоча в Unicode визначені спеціальні символи, що відповідають за напрямок тексту, HTML пропонує конструкції розмітки вищого рівня, які виконують ті ж функції: атрибут dir (не спитайте з елементом DIR ) і елемент BDO . Таким чином, щоб привести цитату на івриті, простіше написати

  <Q lang = "he" dir = "rtl"> ... цитата на івриті ... </ Q>

ніж з еквівалентними посиланнями Unicode:

  & # X202B; & # x05F4;  ... цитата на івриті ... & # x05F4; & # x202C;

Агенти користувачів не повинні використовувати атрибут lang для визначення напрямку тексту.

Атрибут dir успадковується, і його можна перевизначити. Детальніше див. У розділі про успадкування інформації про направлення тексту .

8.2.1 Введення в двонаправлений алгоритм

У наступному прикладі проілюстровано очікуванеповедінку двонаправленого алгоритму. У ньому показані англійський текст зліва направо і текст на івриті справа наліво.

Розгляньте наступний текст:

  Англійська 1 ІВРІТ2 Англійська3 ІВРІТ4 Англійська5 ІВРІТ6

Символи в цьому прикладі (і у всіх реплікованих прикладах) зберігаються в комп'ютері в тому ж вигляді, в якому вони відображаються тут: перший символ - "а", другий - "н", останній "6".

Припустимо, для містить цей абзац документа визначено англійську мову. Це означає, що основним напрямком є ​​напрямок зліва направо. Коректне уявлення цього рядка:

 Англійська 1 2ТІРВІ Англійська3 4ТІРВІ Англійська5 6ТІРВІ
  <----- <----- <-----
  HHH
 -------------------------------------------------- ->
  E

Рядки точок вказують структуру пропозиції: основною мовою є англійська, але вбудовані деякі елементи на івриті. Для отримання коректного подання не потрібно ніякої додаткової розмітки, оскільки фрагменти на івриті коректно звертаються агентами користувача, що застосовують двонаправлений алгоритм.

З іншого боку, якщо для документа визначено мову іврит, основним буде напрямок справа наліво. Коректне уявлення, таким чином, буде:

 6ТІРВІ Англійська5 4ТІРВІ Англійська3 2ТІРВІ Англійська 1
  -------> -------> ------->
  EEE
 <-------------------------------------------------
  H

У цей випадку все пропозиція подається справа наліво, а фрагменти англійською мовою звертаються двонаправленим алгоритмом.

8.2.2 Спадкування інформації про направлення тексту

Для двонаправленого алгоритму Unicode необхідно основний напрямок тексту для текстових блоків. Щоб вказати основний напрям елементів рівня блоку, встановіть для цього елемента атрибута dir . Значенням атрибута dir , які встановлюються за за замовчуванням, є "ltr" (зліва направо).

Якщо атрибут dir встановлений для елемента рівня блоку, він діє протягом усього елемента і для всіх вкладених елементів рівня блоку. Установка атрибута dir для вкладеного елемента має пріоритет по відношенню до успадкованого значенням.

Щоб встановити основний напрямок тексту для всього документа, встановіть атрибут dir в елементі HTML .

наприклад:

  <! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.0 // EN"
  "Http://www.w3.org/TR/REC-html40/strict.dtd">
 <HTML dir = "RTL">
 <HEAD>
 <TITLE> ... заголовок справа наліво ... </ TITLE>
 </ HEAD>
 ... текст справа наліво ... <P dir = "ltr"> ... текст зліва направо ... </ P>
 <P> ... знову текст справа наліво ... </ P>
 </ HTML>

Вбудовані елементи, з іншого боку, не успадкують атрибут dir . Це означає, що вбудований елемент без атрибута dir не відчиняє додаткового рівня впровадження відповідно до двонаправленим алгоритмом. (Тут елементом вважається елемент рівня блоку або вбудований елемент на основі подання за замовчуванням. Пам'ятайте, що елементи INS і DEL можуть бути елементами рівня блоку або вбудованими елементами в залежності від контексту.)

8.2.3 Установка напрямки впровадженого тексту

Двохнаправлений алгоритм [UNICODE] автоматично звертає послідовності впроваджених символів відповідно до спадкоємною напрямком (як показано в попередніх прикладах). Однак загалом в розрахунок приймається тільки один рівень впровадження. Для того, щоб зміни напрямку досягали додаткових рівнів, використовуйте атрибут dir у вбудованому елементі.

Розгляньте текст попереднього прикладу:

 Англійська 1 ІВРІТ2 Англійська3 ІВРІТ4 Англійська5 ІВРІТ6

Припустимо, основною мовою для документа, що містить цей абзац, є англійська. У цьому англійському реченні міститься фрагмент на івриті, що триває від ІВРІТ2 до ІВРІТ4, і в ньому міститься англомовний фрагмент (Англійська3). Таким чином, бажане уявлення тексту:

 Англійська 1 4ТІРВІ Англійська3 2ТІРВІ Англійська5 6ТІРВІ
  ------->
  А
  <-----------------------
  І
 -------------------------------------------------- ->
  А

Для зміни напрямку тексту двох впроваджених фрагментів необхідно задати додаткову інформацію, що ми і робимо, явно розділили друге впровадження. У цьому прикладі ми використовуємо для розмітки тексту елемент SPAN і атрибут dir :

 Англійська 1 <SPAN dir = "RTL"> ІВРІТ2 Англійська3 ІВРІТ4 </ SPAN> Англійська 5 ІВРІТ6

Автори також можуть використовувати для зміни напрямку декількох впроваджених фрагментів символи Unicode. Для вказівки напряму зліва направо під впихається фрагменті оточіть текст символами LEFT-TO-RIGHT EMBEDDING ( "LRE", шістнадцятковий код 202A) і POP DIRECTIONAL FORMATTING ( "PDF", шістнадцятковий код 202C). Для вказівки напряму справа наліво під впихається фрагменті оточіть текст символами RIGHT-TO-LEFT EMBEDDING ( "RTE", шістнадцятковий код 202B) і PDF.

Використання розмітки спрямованості HTML з символами Unicode. Автори і розробники засобів створення HTML-документів повинні знати про можливі конфлікти, що виникають при використанні атрибута dir з вбудованими елементами (включаючи BDO ) одночасно з відповідними символами форматування [UNICODE] . Переважно використовувати тільки один метод. Метод з використанням розмітки гарантує структурну цілісність документа і усуває деякі проблеми з редагуванням двонаправленого тексту HTML в простих текстових редакторах, але деяке програмне забезпечення може краще використовувати символи [UNICODE] . Якщо використовуються обидва методи, слід добре подбати про правильне вкладення розмітки і символів, інакше результати можуть бути непередбачуваними.

8.2.4 Пріоритет над двонаправленим алгоритмом: елемент BDO

  <! ELEMENT BDO - - ( % inline; ) * - пріоритет над I18N BiDi ->
 <! ATTLIST BDO
  % coreattrs;
  - Id , class , style , title -
  lang % LanguageCode;
  #IMPLIED - Код мови -
  dir (ltr | rtl) #REQUIRED - напрямок -
  >

Початковий тег: обов'язковий, Кінцевий тег: обов'язковий

визначення атрибутів

dir = LTR | RTL [CI]
Цей обов'язковий атрибут вказує основний напрямок текстового вмісту елемента. Цей напрямок має пріоритет по відношенню до успадкованого напрямку символів, як визначено в [UNICODE] . Можливі значення:
  • LTR: Напрямок зліва направо.
  • RTL: Напрямок справа наліво.

Атрибути, обумовлені в будь-якому іншому місці

Двонаправленого алгоритму і атрибута dir зазвичай досить для управління зміною напрямку впровадженого тексту. Однак в деяких ситуаціях двонаправлений алгоритм може спричинити неправильне поданням. Елемент BDO дозволяє авторам відключати двонаправлений алгоритм для обраних фрагментів тексту.

Розгляньте документ з тим же текстовим фрагментом:

 Англійська 1 ІВРІТ2 Англійська3 ІВРІТ4 Англійська5 ІВРІТ6

але припустімо, що цей текст вже представлений в потрібному порядку. Однією причиною цього може бути те, що стандарт MIME ( [RFC2045] , [RFC1556] ) сприяє візуальному порядку, тобто послідовності з напрямком справа наліво вставляються в байтовий потік з напрямком справа наліво. В електронній пошті це може форматироваться, включаючи новий рядок, наприклад:

  Англійська 1 2ТІРВІ Англійська3
 4ТІРВІ Англійська5 6ТІРВІ

Це конфліктує з двонаправленим алгоритмом [UNICODE] , оскільки цей алгоритм інвертує 2ТІРВІ, 4ТІРВІ і 6ТІРВІ вдруге, так що слова на івриті відображаються зліва направо, а не справа наліво.

В цьому випадку рішенням буде перевизначити дію двонаправленого алгоритму, помістивши витримку Email в елемент PRE (для збереження перекладів рядка) і кожен рядок, для якої атрибут dir встановлений в LTR, в елемент BDO :

  <PRE>
 <BDO dir = "LTR"> Англійська 1 2ТІРВІ Англійська3 </ BDO>
 <BDO dir = "LTR"> 4ТІРВІ Англійська5 6ТІРВІ </ BDO>
 </ PRE>

Двонаправленим алгоритму видається команда "Я повинен бути зліва направо!", Що призведе до потрібного поданням:

 Англійська 1 2ТІРВІ Англійська3
 4ТІРВІ Англійська5 6ТІРВІ

Елемент BDO слід використовувати в сценаріях, де є потреба у абсолютний контроль над послідовністю (наприклад, багатомовні номера частин). Атрибут dir для цього елемента є обов'язковим.

Автори можуть також використовувати спеціальні символи Unicode для того, щоб уникнути використання двонаправленого алгоритму - LEFT-TO-RIGHT OVERRIDE (202D) або RIGHT-TO-LEFT OVERRIDE (шістнадцятковий код 202E). Символ POP DIRECTIONAL FORMATTING (шістнадцятковий код 202C) закінчує будь-яку послідовність, яка використовується для обходу двонаправленого алгоритму.

Примітка. Пам'ятайте, що при використанні атрибута dir у вбудованих елементах (включаючи BDO ) одночасно з відповідними символами форматування [UNICODE] , можуть виникати конфлікти.

Двунаправленность і кодування символів Відповідно до [RFC1555] і [RFC1556] існують спеціальні угоди щодо використання значень параметра "charset" для вказівки обробки двобічної в пошті MIME, зокрема для відмінності візуальної, явною і неявній спрямованості. Значення параметра "ISO-8859-8" (для івриту) позначає візуальну кодування, "ISO-8859-8-i" позначає неявну двунаправленность, а "ISO-8859-8-e" позначає явну спрямованість.

Оскільки HTML використовує двонаправлений алгоритм Unicode, відповідні документи, які використовують кодування ISO 8859-8, повинні позначатися як "ISO-8859-8-i". Явне управління напрямком в HTML також можливо, але його не можна виразити в ISO 8859-8, оскільки не слід використовувати "ISO-8859-8-e".

Значення "ISO-8859-8" має на увазі, що документ відформатований візуально, і деяка розмітка буде використовуватися неправильно (наприклад, TABLE з вирівнюванням по правому краю без розбивки рядків), щоб гарантувати правильне відображення для старіших агентів користувача, що не підтримують двунаправленность. Такі документи не задовольняють цій специфікації. При необхідності їх можна змінити (і одночасно вони будуть коректно відображатися в старих версіях агентів користувачів), додавши, де потрібно, розмітку BDO . Всупереч сказаному в [RFC1555] і [RFC1556] , кодування ISO-8859-6 (арабська) не представляє візуального порядку.

8.2.5 Посилання на символи для керування напрямком і об'єднанням

Оскільки іноді виникає двозначність щодо деяких символів (наприклад, символів пунктуації), специфікація [UNICODE] включає символи для правильного визначення призначення. Специфікація Unicode також включає деякі символи для керування об'єднанням при необхідності (наприклад, в деяких ситуаціях з арабськими символами). HTML 4.0 включає для цих символів посилання на символи .

Наступне DTD визначає уявлення деяких об'єктів напрямки:

  <! ENTITY zwnj CDATA "& # 8204;" - = нульова ширина без об'єднання ->
  <! ENTITY zwj CDATA "& # 8205;" - = об'єднувач нульовий ширини ->
  <! ENTITY lrm CDATA "& # 8206;" - = мітка зліва направо ->
  <! ENTITY rlm CDATA "& # 8207;" - = мітка справа наліво ->

Об'єкт zwnj використовується для блокування об'єднання в тих контекстах, де об'єднання відбудеться, але воно відбуватися не повинно. Об'єкт zwj має зворотну дію; він виробляє об'єднання в разі, коли воно не передбачається, але має відбутися. Наприклад, арабська буква "HEH" використовується для скорочення "Hijri", назви ісламської системи літочислення. Оскільки окремий ієрогліф "HEH" в арабській писемності виглядає як цифра п'ять, для того, щоб не плутати букву "HEH" з останньою цифрою п'ять в рік, використовується вихідна форма букви "HEH". Однак, немає подальшого контексту (наприклад, літери для об'єднання), з яким можна об'єднати "HEH". Символ zwj надає такий контекст.

Точно так же в перських текстах буква може іноді об'єднуватися з подальшою буквою, в той час як в рукописному тексті цього бути не повинно. Символ zwnj використовується для блокування об'єднання в таких випадках.

Символи порядку, lrm і rlm, використовуються для визначення напрямку нейтральних по відношенню до напрямку символів. Наприклад, якщо подвійні лапки ставляться між арабською (справа наліво) і латинської (зліва направо) буквами, напрямок лапок неясно (чи належать вони до арабського або до латинського тексту?). Символи lrm і rlm мають властивість напрямки, але не мають властивостей ширини і поділу слів / рядків. Детальніше див. [UNICODE] .

Відображення гліфів символів. Взагалі двонаправлений алгоритм не відображає гліфи символів і не впливає на них. Винятком є такі символи як дужки (див. [UNICODE] , таблиця 4-7). Якщо відображення бажано, наприклад, для єгипетських ієрогліфів, грецьких знаків або спеціальних ефектів дизайну, можна зробити це за допомогою стилів.

8.2.6 Таблиці стилів і двунаправленность

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

Якщо вбудований елемент, який не має атрибута dir, перетворюється в стиль елемента рівня блоку за допомогою таблиці стилів, для визначення основного напрямку блоку він успадковує атрибут dir від найближчого батьківського елемента блоку.

Якщо елемент блоку, який не має атрибута a dir, перетворюється до стилю вбудованого елемента за допомогою таблиці стилів, результуюче уявлення має бути еквівалентним, в термінах двонаправленого форматування, форматування, що отримується шляхом явного додавання атрибута dir (кого призначене успадковане значення) перетвореному елементу.