Остановите войну в Украине!

В HTML5 до­бав­лен но­вый ат­ри­бут translate

Перевод «HTML5 adds new translate attribute»

Перевод Влад Андерсен

Редактура Вадим Макеев

В HTML5 недавно добавился новый атрибут — translate. На трёх семинарах MultilingualWeb, которые мы провели за последние два года, идея такого булева флага — «переводить или не переводить» постоянно вызывает довольно большой интерес у локализаторов, создателей текста, и всех тех, кто работает с языковыми технологиями.

Как это работает?Скопировать ссылку

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

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

Этот атрибут может быть применён к любому элементу, и может иметь одно из двух значений: yes или no. Если значение — no, инструменты перевода должны предохранять текст внутри элемента от перевода. Этот инструмент может быть автоматической системой перевода (как, например, в онлайн-сервисах Google или Microsoft) или профессиональной системой перевода, которая не будет давать переводчику случайно изменить текст.

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

Для того, чтобы система работала, не нужно использовать translate="yes". Если на странице нет атрибута translate, система перевода (или переводчик) должна предположить, что перевести нужно весь текст. Вряд ли значение yes будет использоваться широко, хотя оно может быть очень полезно, если вам нужно переопределить значение флага translate на родительском элементе и указать кусочки текста, которые должны быть переведены. Например, вы можете захотеть перевести комментарии на обычном языке в исходном коде, а сам код оставить без перевода.

Зачем это нужно?Скопировать ссылку

Потребность в этом встречается довольно-таки часто. В спецификации HTML5 есть пример с игрой про пчелу и мёд. Вот похожий, но на этот раз реальный пример из моего опыта работы в Xerox, где документация, которая переводилась на другой язык, относилась к устройству, на котором текст находился прямо на «железе» и поэтому не переводился.

<p>Click the Resume button on the Status Display or the <span class="panelmsg" translate="no">CONTINUE</span> button the printer panel.</p>

Оригинальный текст на английском — прим. переводчика.

<p>Нажмите кнопку «Продолжить» на дисплее состояния или кнопку <span class="panelmsg" translate="no">CONTINUE</span> на панели принтера.</p>

Текст при переводе на русский язык — прим. переводчика.

Вот ещё несколько примеров текста из жизни, которым принесёт пользу атрибут translate. Отрывок из книги, цитирующий название работы.

<p>The question in the title <cite translate="no">How Far Can You Go?</cite> applies to both the undermining of traditional religious belief by radical theology and the undermining of literary convention by the device of “breaking frame”…</p>

Оригинальный текст на английском — прим. переводчика.

<p>Вопрос в названии, <cite translate="no">How Far Can You Go?</cite>, относится и к отрицательному влиянию радикальной теологии на традиционные религиозные воззрения, и к отрицательному влиянию приема «разрыва рамок» на правила построения литературного произведения…</p>

При переводе на русский язык. На русском языке в таких случаях, впрочем, название работы обычно принято переводить — прим. переводчика.

Следующий пример со страницы о французском хлебе — «хлеб» по-французски «pain».

<p>Welcome to <strong translate="no">french pain</strong> on Facebook. Join now to write reviews and connect with <strong translate="no">french pain</strong>. Help your friends discover great places to visit by recommending <strong translate="no">french pain</strong>.</p>

Оригинальный текст на английском — прим. переводчика.

<p>Добро пожаловать на страницу <strong translate="no">french pain</strong> на Facebook. Присоединяйтесь, пишите отчёты и свяжитесь с <strong translate="no">french pain</strong>. Помогите друзьям узнать отличные новые места, порекомендовав им <strong translate="no">french pain</strong>.</p>

При переводе на русский язык. Речь идёт о французской компании, которая называется «french pain» — прим. переводчика.

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

Как обстоят дела у Google Translate и Microsoft Translator?Скопировать ссылку

Службы перевода Google и Microsoft и ранее предоставляли возможность предохранять текст от перевода посредством добавления разметки, но делали они это (несколькими) разными способами. Будем надеяться, что новый атрибут очень поможет тем, что предоставит стандартный подход.

И Google, и Microsoft в настоящее время поддерживают синтаксис class="notranslate", но замена названия класса атрибутом — формальной частью языка — сделает эту функцию гораздо более надёжной, особенно в более широких контекстах. Например, инструмент переводчика может всегда считать, что HTML5-атрибут translate значит именно то, что он должен значить. Становится проще портировать эту идею и для других сценариев использования: скажем, для других API перевода или стандартов локализации (например, XLIFF).

Кстати, онлайн-сервис перевода компании Microsoft (которая, собственно, и предложила флаг translate в HTML5 некоторое время назад) уже поддерживает translate="no". До сих пор, конечно, это был проприетарный атрибут, и Google не поддерживал его. Однако, буквально вчера утром я совершенно случайно узнал, что WebKit и Chromium только что добавили поддержку атрибута translate, а вчера днём Google добавил поддержку translate="no" к своему сервису онлайн-перевода. Вот результаты нескольких тестов, которые я провёл этим утром. Ни Microsoft, ни Google пока не поддерживают переопределение translate="yes". Статья опубликована 22 февраля 2012 года (прим. переводчика)

Во всех этих проприетарных системах, впрочем, есть масса нестандартных способов синтаксически выразить эту же идею (даже если мы говорим только о Google и Microsoft).

Так, Microsoft поддерживает style="notranslate". Google не поддерживает этот синтаксис в списке возможных флагов для своего онлайн-сервиса перевода, но зато у них есть варианты, которые недоступны в сервисе Microsoft.

Например, если у вас есть целая страница, которая не должна переводиться, можете добавить <meta name="google" value="notranslate"> внутри элемента <head> вашей страницы, и Google не будет переводить никакой текст на этой странице. А ещё они поддерживают <meta name="google" content="notranslate">. Конечно, это не должно быть специфично для Google, и единообразный способ делать это, то есть translate="no" для элемента <html> — гораздо более удачное решение.

Также непонятно, кстати, и с тем, и с другим сервисом перевода, как делать доступными для перевода вложенные элементы внутри элемента, для которого translate установлено в значении no — а это иногда может понадобиться.

Как говорилось выше, новый HTML5-атрибут использует простую и стандартную возможность HTML, которая может заменить и упростить все эти различные подходы. И, конечно, это поможет авторам создавать такое текстовое содержимое, настройки локализации которого будут работать и с другими системами.

А почему не использовать просто атрибут lang?Скопировать ссылку

Конечно, во время дискуссий о том, как правильно реализовать флаг translate, кто-нибудь обязательно должен был предложить именно это, но перегружать текст метками языков — это не решение. Например, языковая метка может указывать, какой орфографический словарь использовать для проверки какого текста. Это не имеет ничего общего с тем, нужно переводить текст или нет. Это разные концепции. Если в документе, где у элемента <html> указан lang="en", дальше на странице вы поставите lang="notranslate", орфография в тексте не будет проверяться, потому что указанный язык уже не английский. Кроме того, стили для lang перестанут работать, голосовые браузеры не будут правильно произносить текст и т.п.

Больше, чем просто атрибут translateСкопировать ссылку

Рекомендация ITS (Internationalization Tag Set), сделанная W3C, предлагает использовать флаг возможности автоматического перевода в таком виде, как атрибут translate, только что добавленный к HTML5, но идёт дальше и описывает способ присвоить значение флага каким-либо элементам или наборам разметки по всему документу или в наборе документов. Например, вы можете определить (если так нужно для вашего содержимого), что по умолчанию все элементы <p> с указанным классом должны иметь флаг translate в значении no в каком-либо конкретном наборе документов.

Накануне публикации перевода был представлен первый рабочий черновик ITS 2.0, следующей версии спецификации — прим. редактора.

Microsoft уже предлагает что-то в этом духе, хотя их подход предоставляет гораздо меньше возможностей, чем рекомендация ITS. Если вы пишете где-либо на странице (или в виджете) <meta name="microsoft" content="notranslateclasses myclass1 myclass2">, то эта строчка гарантирует, что все CSS-классы, перечисленные после директивы notranslateclasses, будут вести себя так же, как класс notranslate.

Кроме того, движки автоматического перевода Microsoft и Google не переводят содержимое элементов <code>. Впрочем, обратите внимание, что относительно этого у вас особенно нет выбора — нет никаких инструкций относительно того, как переопределить это значение, если вы хотите, чтобы содержимое вашего элемента <code> всё же было бы переведено.

Кстати, в ближайших планах W3C есть организаций новой рабочей группы совместно с проектом Европейской Комиссии — MultilingualWeb-LT — чтобы дальше развивать идеи по спецификации ITS и разработать ряд её практических реализаций. Помимо всего прочего, эта группа будет искать новые способы интеграции нового атрибута translate в процессы и стандарты индустрии локализации. Ждите, скоро всё будет!