Контекстный перевод для веб-приложений

Crowdin In-Context tool allows to translate texts directly within the actual web application. In such a way, the best translation quality is maintained.

Контекстная локализация связана с фактическим проектом, созданным в Crowdin, где хранятся переводимые файлы.

Этот инструмент делает все тексты в веб-приложении редактируемыми. Более того процесс перевода можно видеть в реальном времени. Таким образом можно переводить даже динамическую часть приложения и заполнители.

Технический обзор

Crowdin In-Context работает с помощью однострочного фрагмента Javascript и пакета псевдо-языка. Он создает пакет псевдоязыка на основе файлов локализации, загруженных в ваш проект, которые позже будут интегрированы в ваше приложение как язык дополнительной локализации.

Интегрированный псевдо-язык содержит некоторые специальные идентификаторы вместо исходных текстов, поэтому при переключении приложения на этот язык все метки преобразуются в специальные идентификаторы. Javascript ищет эти идентификаторы и заменяет их редактируемыми метками. Таким образом, переводчик не видит никакой разницы между живым приложением и приложением с встроенным инструментом Crowdin In-Context. Однако инструмент определяет, какая часть приложения является переводимой, и предоставляет все средства, чтобы переводчик мог локализовать с использованием контекста.

Перевод выполняется в свернутом обычном редакторе Crowdin со всеми функциями (TM, машинный перевод, опция одобрения / голосования, комментарии, термины). Таким образом, легче просматривать переводы для редакторов и обеспечивать качество.

Интеграция

There are two common approaches to integrate Crowdin In-Context with your application:

  • Staging or translation environment. Если вы не считаете нужным привлекать конечных пользователей сайта к переводу и предпочитаете не иметь “режим перевода” на продакшне, интеграция Crowdin In-Context в отдельную среду для перевода будет отличным решением.
  • Production environment. Crowdin In-Context не требует никаких изменений кода в вашем приложении, поэтому его можно использовать даже на производственном сервере. Вы сами решаете, как включить его и для какого сегмента пользователей его можно активировать. Функция, которая включает режим перевода, может быть скрыта, Были случаи, когда режим перевода был включен как дополнительный язык.

Следуйте пошаговой инструкции настройки интеграции, которую вы можете найти во вкладке In-Context пункта Настройки проекта.

После успешной интеграции и обновления вашего приложения вы должны увидеть диалоговое окно приглашения и окно входа в Crowdin.

Необязательные Параметры

Вы можете добавить эти параметры в _jipt массив в фрагменте конфигурации.

Предварительная загрузка строк

_jipt.push(['preload_texts', true]);

Speeds up dynamic content displaying within the In-Context tool by preloading all source strings. Automatically disabled for the large projects (5000+ strings). Acceptable values: true, false.

Кнопка перевод всегда видна

_jipt.push(['touch_optimized', true]);

This option is enabled on touchscreens by default and makes the translation button next to each translatable string permanently visible, as opposed to showing on hover. Acceptable values: true, false.

Вызов функции перед коммитом

_jipt.push(['before_commit', function(source, translation, context, language_code) { return status_obj; }]);

Функция для проверки предложения перед коммитом.

Параметры
sourceИсходный текст
translationТекст перевода
contextКонтекст исходной строки
language_codeКод языка перевода (коды языка)
Возвращаемые значения
status_obj Объект. status_obj.status может быть "ок", "ошибка" или "исправлено". В случае ошибки, status_obj.message содержит описание ошибки. Когда статус «исправлен», status_obj.correction содержит исправленный перевод

Вызов функции перед вставкой в DOM

_jipt.push(['before_dom_insert', function(text, node, attribute) { return 'text'; }]);

Функция для преобразования строки перед ее подставлением в DOM.

Параметры
textСтрока для вставки
node
необязательный
DOM element in which the text must be inserted. May be omitted if text does not have target element (text inside browser's pop-ups)
attribute
необязательный
Атрибут элемента DOM, если текст является частью атрибута
Возвращаемые значения
textСтрока для вставки
falseЕсли функция возвращает false, то DOM не будет обновляться

Вызов функции при закрытии наложения In-Context

_jipt.push(['escape', function() { window.location.href = "http://app_domain.com"; }]);

Определяет, могут ли пользователи закрыть In-Context оверлей, если они не хотят переводить. Реализуйте эту функцию на вашей стороне. Он должен изменить язык приложения или перенаправить из среды перевода в производственное приложение, зависимости от подхода интеграции In-Context.

Была ли эта статья полезной?