Прискорююча кнопка n назначена для пропусків при навігації по сторінкам. Пропуск для переходу на початок контента.

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

Перекладач: Alexandr Shlapak (Олександр Шлапак)

s_gotoW3cHome Інтернаціоналізація
 

Використання Керуючих символів Unicode для bidi тексту

Аудиторія: автори контенту для мов що основані на HTML або XML (використовуючи редактори або скрипти), розробники скриптів (PHP, JSP, і т.д.), і кожен, кому цікаво як досягнути належного вирівнювання тексту для скриптів, які вирівнюються справа наліво у разі, коли відсутня необхідна розмітка.

Питання

Що можна зробити, коли ви не можете використати розмітку для правильного упорядкування двунаправленного тексту?

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

Весь текст повинен зберігатися в 'логічному порядку', тобто символи в пам'яті обробляються в одному напрямку на основі вимови. Проте, навіть якщо текст відображається в одному рядку, символи, що використовуються в скриптах, які вирівнюються справа наліво, наприклад Арабський, Іврит, Тана, Урду та інших, повинні вирівнюватися справа наліво, в той час як символи в таких скриптах, як Латинський і будь-яких цифрах будуть вирівнюватися зліва направо. Для досягнення цієї візуальної зміни порядку використовується двонаправлений (bidi) алгоритм Unicode.

Алгоритм bidi впливає на напрям тексту з урахуванням спрямування кожного символу. Однак, іноді, коли скрипти змішані - алгоритму потрібно трохи допомогти для того, щоб визначити як повинні бути розташовані частини тексту при відображенні. Наприклад:

Ми показуємо приклади використовуючи скрипти з вирівнюванням тексту справа наліво, але у випадку, коли ваш клієнтський додаток не підтримує належним чином скрипти з вирівнюванням тексту справа наліво, то якщо візуальний результат має важливе значення ми використовуємо графіку. Натиснувши на Дивіться код. малюнок, ви відкриваєте текстову версію в новому вікні. (Це також дозволяє вам досліджувати вихідний текст.) Ми також відразу ж після цього показуємо тільки ASCII версію, що показує, Англійський текст в нижньому регістрі і Іврит або Арабський у верхньому регістрі. Упорядкування і розміщення символів в ASCII версії відображає оригінальний текст.

Цей приклад показує, що ви отримаєте, якщо покладатиметися тільки на двунаправленний алгоритм. Це неправильно. Тому що всі цитати написані на Івриті, текст "W3C" і кома повинні з'явитися з лівого боку (тобто в кінці) тексту на Івриті.

Дивіться код.Incorrectly nested phrases.

ASCII версія:
заголовок "YTIVITCA NOITAZILANOITANRETNI, w3c" на Івриті.

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

Дивіться код.Correctly nested phrases.

ASCII версія:
заголовок "w3c ,YTIVITCA NOITAZILANOITANRETNI" на Івриті.

В інших випадках вам може знадобитися перевизначити (тобто відключити) дію двунаправленного алгоритму в цілому.

Зазвичай ви будете використовувати розмітку щоб це контролювати, але в деяких випадках (сподіваємося що в основному в старій розмітці, де потреба у підтримці bidi не була повністю продумана) розмітка відсутня. У цій статті розглядається, як можна використовувати керуючі символи Unicode для таких випадків.

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

Відповідь

Варіанти використання

Важливо почати з того, що для тих хто розробляє контент є деякі переваги використання розмітки (якщо вона доступна) для управління двонаправленим (bidi) спрямуванням тексту, а не керуючих символів Unicode (дивіться Керуючі Символи Unicode чи розмітка для підтримки bidi). Якщо ви розробляєте або поновлюєте схеми або специфікації, то ви дійсно повинні примінити розмітку для контролю над поведінкою bidi, а не покладатися на керуючі символи Unicode, і уникайте створення текстів, де не може використовуватися розмітка (наприклад, текст написаний звичайною мовою у значеннях атрибутів). Для отримання додаткової інформації дивіться Найкращі Практики для Інтернаціоналізації XML.

Однак, керуючі символи Unicode можуть знадобитися в ситуаціях де відсутня розмітка. Приклади включають таку застарілу розмітку, як HTML елемент title і будь-яке значення атрибута HTML, що містить текст написаний звичайною мовою.

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

Парні керуючі символи

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

Ці символи використовуються в парі. Один з перших чотирьох символів, що згадувалися вище, використовується для позначення початку діапазону тексту; в кожному конкретному випадку діапазон закінчується останнім (PDF) символом.

Вкладені керуючі символи призначають базовий напрямок тексту, який вони оточують. Перевизначаючі символи взагалі відключають bidi алгоритм для тексту, який вони оточують.

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

Наступний приклад показує, як ці керуючі символи можна використати в звичайному тексті:

Нижче показана підказка в HTML, яка включає в себе назву документу пов'язану з нею, плюс деякий текст із зазначенням мови кінцевого документу. Зверніть увагу, як текст '(FAQ)' з'являється праворуч від Перського тексту. Це неправильно.

Дивіться код.A tooltip without control characters.

ASCII версія:
'SNOITSEUQ DEKSA YLTNEUQERF (faq)' [Перською мовою].

Правильний заголовок містить текст '(FAQ)' справа від Перського тексту, як тут показано.

Дивіться код.A tooltip with control characters.

ASCII версія:
'(faq) SNOITSEUQ DEKSA YLTNEUQERF' [Перською мовою].

Для досягнення правильного ефекту ми додали два невидимих ​​керуючих символи, U+202B, RIGHT-TO-LEFT EMBEDDING (RLE), та U+202C, POP DIRECTIONAL FORMATTING (PDF), що представлені числовими символами в нижче наведеному коді:

title="'‫...‬' [Перською мовою]"

(Для порівняння цього з тим, як досягти того ж результату, якщо є розмітка, дивіться нижче в розділі під назвою Відповідність.)

RLM та LRM символи

Два інших невидимих ​​спрямовуючі керуючі символи, що надаються Unicode зазвичай не мають відповідної розмітки і повинні використовуватися або в формі символів або в екранованій формі. Вони менш проблематичні, оскільки вони використовуються самостійно, тобто вони не використовуються в парах як інші керуючі символи ми обговорювали для того щоб розмежувати діапазони тексту. Також, ймовірно, їх використання набагато більш поширене, ніж використання символів управління, що описані вище.

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

Дивіться код.неправильно упорядкована MAC адреса.

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

Дивіться код.неправильно упорядкована MAC адреса.

Для досягнення правильного ефекту ми просто додали два невидимих ​​керуючих символи, U+200E, LEFT-TO-RIGHT MARK (RLM) безпосередньо перед початком номеру.

(Ми могли б домогтися того ж результату, використовуючи контекстні коди, які згадувалися раніше, але це простіше і рекомендовано стандартом Unicode.)

Для отримання додаткової інформації про те, як використовувати ці два символи, читайте Що потрібно знати про алгоритм bidi і вбудовану розмітку.

Доречі

Відповідність

Там де є і може бути використана направлена розмітка, ці керуючі коди повинні бути еквівалентні розмітці в поведінці. Наступна таблиця (взято з Unicode в XML та інших Мовах Розмітки) дає відповідну розмітку, щоб замінити кожний набір кодів в HTML.

Символ Код Еквівалентна розмітка Коментар
LRE U+202A dir = "ltr" атрибут блоку або вбудованого елементу
RLE U+202B dir = "rtl" атрибут блоку або вбудованого елементу
LRO U+202D <bdo dir = "ltr">  
RLO U+202E <bdo dir = "rtl">  
PDF U+202C нічого коли використаний для завершення RLE або LRE (закриття забезпечується кінцевим тегом елемента, що містить атрибут dir)
</bdo> коли використаний для завершення RLO або LRO

Використання HTML в контексті, що дозволяє використовувати розмітку, відповідний підхід до подачі тексту в прикладі у розділі вище "Парні керуючі символи", буде закодовано як:

Дивіться '<a dir="rtl" lang="fa" href="...">...</a>' [в Перській мові].

Це дало б такий результат:

Дивіться код.Correctly ordered text.

В XML ви повинні були б використовувати bidi розмітку передбачену в DTD або Схемі, та застосовувати безпосередньо використовуючи CSS.

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

Зверніть увагу, що істотною різницею між розміткою і керуючими кодами є те, що один атрибут dir можна примінити до цілої сторінки або розділу сторінки, там де в кінці пункту закінчується ефект LRE/RLE.

Розкажіть нам про те, що Ви думаєте.

Підписатися на RSS джерело.

Нові джерела

Новини головної сторінки

Twitter (Новини головної сторінки)

‎@webi18n

Додаткові матеріали

Автор: Richard Ishida, W3C. Перекладач: Alexandr Shlapak (Олександр Шлапак).

Допустимий XHTML 1.0!
Допустимий CSS!
Кодування UTF-8!

Переклад Англійського контенту від 2009-07-10. Переклад останнього оновлення 2011-09-26 12:00 GMT

Для перегляду історії внесення змін до перекладу натисність qa-bidi-unicode-controls в блоге i18n.