%{плейс}холдеры. Как не дать переводчику совершить ошибку

Я хорошо помню день, когда впервые столкнулся с локализацией программного обеспечения. Это была задача на перевод интерфейсов для какого-то промышленного оборудования в сложной программе для локализации ПО. С тематикой промышленного оборудования у меня проблем не было, а вот с текстами интерфейсов я столкнулся впервые.

%{плейс}холдеры. Как не дать переводчику совершить ошибку

Самым удивительным был совсем не стиль текстов — к тому времени я уже пользовался компьютером на продвинутом уровне и представлял себе, на каком языке машины разговаривают с пользователями (правда, с тех пор чат-боты и разговорные интерфейсы изменили мое представление). Больше всего меня озадачили кусочки типа {0}, %d, %setup% или $stop$ — я понятия не имел, что они значат, и нужно ли переводить текст внутри символов. В общем, в том проекте я наделал много ошибок. Завершающим ударом по моей уверенности в себе стали переносы строк \n, такое обозначение я видел впервые. Они то и дело сливались с текстом, вгоняя меня в ступор, ведь исходный текст был на немецком: \nein — это “nein” или “\n + ein”, недоумевал я. Менеджер проектов наверняка пожалел, что дал такую задачу новичку, получив от меня шквал вопросов. А может быть даже написал гневный твит.

Внезапно из переведенных файлов в срочном проекте испарились все плейсхолдеры
#ПроблемыПроджекта #Паника

Переводчиков, которые переводят плейсхолдер $Departure Time$ как $Время вылета$, я называю последовательными в работе.

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

С тех пор прошло несколько лет. Я вспоминаю тот первый опыт с улыбкой и всегда терпеливо объясняю переводчикам, как работают переменные в интерфейсах программ. Кроме того, есть прекрасный способ предотвратить ошибки и сэкономить время и переводчикам, и себе — с помощью регулярных выражений превратить эти переменные в объекты, которые нельзя будет отредактировать и наличие которых можно отслеживать автоматически.

В разных программах эти объекты называются по-разному, в smartCAT мы называем их «плейсхолдерами». А «регулярные выражения» — это вовсе не те фразы, которые вы каждое утро говорите баристе, заказывая чашечку кофе по пути на работу. Так называется формальный язык, состоящий из метасимволов, с помощью которого можно производить манипуляции с текстом. Если вы слышите об этом впервые, не пугайтесь — программировать не придется. Чтобы стало понятнее, посмотрите вводную презентацию о регулярных выражениях от Томаса Вакира (Thomas Vackier), специалиста по локализации из Yamagata Europe:

Таинственные знаки

Вот простой пример. Возьмем несколько строчек из песни I’m Gonna Be (500 miles) группы The Proclaimers:

But I would walk 500 miles
And I would walk 500 more
Just to be the man who walked a thousand miles
To fall down at your door

Допустим, мы хотим, чтобы этот текст менялся в зависимости от местоположения слушателя. Для этого используем переменные:

But I would walk %$1s miles
And I would walk %$2s more
Just to be the man who walked a {spelled-number} miles
To fall down at your {location}

Какие неприятности нас здесь ждут? Неопытный переводчик может случайно удалить нужный символ или использовать неверный, например не тот вид скобок. Числа в переменной %$1s должны меняться, а {spelled-number} и {location} не нужно переводить — об этом знает, увы, не каждый.

«Но зачем же работать с новичками, если можно нанять опытного переводчика?», спросит читатель. Причины бывают разными, но главное помнить: никто не рождается с опытом локализации приложений. У всех когда-то был первый проект, а набитые шишки — это и есть тот ценный опыт, который дороже денег.

Защита от новичка, или Как спасти мир

Итак, попробуем не дать переводчику ошибиться и сэкономить свое время. Для этого опишем переменные с помощью регулярных выражений:

  • Для числовых переменных (внутри может быть любая цифра): %\$\ds
  • Для переменных в фигурных скобках: \{.+?\}

Составляя регулярные выражения, я часто пользуюсь удобной шпаргалкой, а правильность составленного выражения проверяю на сайте regex101.com.

Загрузим файл с переменными в smartCAT и получим такой результат:

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

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

Использование плейсхолдеров в smartCAT

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

Плейсхолдеры не нужно переводить, их достаточно в точности перенести в перевод, так зачем тратить на них время? Найдем все артикулы с помощью регулярного выражения [A-Z]{2}\d{4}\-\d{4} и превратим их в нередактируемые элементы:

Использование плейсхолдеров в smartCAT
Переводить (и проверять перевод) сразу станет намного легче, и процесс пойдет быстрее.

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

Я решил поинтересоваться у коллег из других компаний, используют ли они плейсхолдеры в своей работе.

Федор Безруков, руководитель киевского офиса Logrus ITФедор Безруков, руководитель киевского офиса Logrus IT

«В нашей работе достаточно часто возникает потребность использовать плейсхолдеры и тэги в необычных форматах. Например, клиент может выдать экселевский файл, в котором будут строки с HTML- или XML-разметкой. Благодаря плейсхолдерам и поддержке регулярных выражений в smartCAT работать с такими ресурсами стало значительно проще и удобнее».

Максим Левушкин, менеджер проектов игровой локализации Logrus ITМаксим Левушкин, менеджер проектов игровой локализации Logrus IT

«Во-первых, если скрыть плейсхолдерами служебный текст, то переводимый текст воспринимается значительно лучше. Во-вторых, содержимое плейсхолдера не испортишь — не сотрешь какой-нибудь важный символ, из-за которого весь сайт может перестать работать».

Марина Ильиных, менеджер по локализации BookmateМарина Ильиных, менеджер по локализации Bookmate

«Мы активно используем переменные и теги форматирования в текстах наших приложений. Заменяя теги и переменные плейсхолдерами, мы получаем возможность автоматически проверять их целостность. Это значит, что из наших приложений никогда не пропадет цена продукта или дата действия подписки, а все ссылки будут работать».

Юлия Зерова, специалист по локализации «Доктор Веб»Юлия Зерова, специалист по локализации «Доктор Веб»

«Плейсхолдеры избавляют и нас, и переводчиков от множества проблем. Переводчик не переведет название переменной, не пропустит закрывающую скобку и не поставит пробел между числом и знаком процента. Переводимый текст становится заметнее, а непонятные наборы символов не маячат перед глазами. А когда нужно что-то поправить без участия переводчика, с плейсхолдерами это сделать гораздо проще. Особенно в RTL-языках, там плейсхолдеры настоящее спасение».

Яннис Евангелу, CEO lexiQAЯннис Евангелу, CEO lexiQA

«С плейсхолдерами, специальными символами и тегами часто случаются недоразумения. Так называемые escape characters — еще один сложный момент для начинающих переводчиков. Мало кто знает, как поступать с такими фрагментами в тексте, в том числе и проект-менеджеры. Эти ошибки приводят к серьезным проблемам. Знакомый переводчик рассказывал, как ему поручили однажды перевести документацию для разработчиков, и в ней был пример HTML-форматирования. Так вот, вместе с остальным текстом он перевел на греческий строчку: <p style=»border: 1px solid red;»></p>. Получилось так: <π στυλ=»περίγραμμα: 1 πίξελ συμπαγές κόκκινο;»></π>. Свое решение он аргументировал тем, что «не все верстальщики хорошо знают английский». Самое интересное, что проект-менеджер согласилась с таким доводом и приняла работу!»

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

Рольф Клишевски, эксперт в области перевода игр

Напоследок Рольф Клишевски, эксперт в области перевода игр, рассказал мне о трудностях, с которыми сталкиваются переводчики, и привел любопытный пример.

«

Переводчикам игр часто приходится иметь дело с текстами, которые выглядят так:

Пример использования плейсхолдеров от Рольфа Клишевского

А в игре вы увидите что-то вроде:

Пример использования плейсхолдеров от Рольфа Клишевского

Однако без сложностей в нашем деле обходится редко.

Пример использования плейсхолдеров от Рольфа Клишевского

Тут проблема в артиклях. На английском “the Bahamas” пишутся с артиклем, тогда как “Barbados” — без. А по-немецки «Швейцария» будет “Die Schweiz”. Зачастую приходится отказываться от таких проектов. Я не готов вкладывать силы в заведомо плохой результат, поэтому обычно советую клиенту внести изменения в текстовый движок игры. Когда разработчики интересуются, действительно ли это такая большая проблема, я отвечаю, что, на самом деле, это не помешает играть в игру. Так что же делать? Объяснить клиенту ситуацию. Если он не готов переделать движок, а вам нужны деньги, соглашайтесь с условием, что ваше имя нигде не будет указано.

»


Павел Доронин,
Product Analyst