Как локализовать приложение на много языков, чтобы не было мучительно стыдно
На Хабре не раз обсуждались вопросы локализации/интернационализации приложений. Мы – компания ABBYY Language Services – давно работаем в области лингвистических услуг, сервисов и технологий, и локализацией софта занимаемся постоянно. У нас в этом вопросе накопился значительный опыт, мы решили им поделиться, сделав больший акцент на организации всего процесса. Локализация приложений — более сложная задача, чем принято считать, и подойти к ней можно разными способами: можно изначально создать простой и понятный текст, можно вложиться в крутых переводчиков, которые из любого текста вытянут смысл, можно сделать подготовку и перевод текста «как-нибудь», но посадить сообщество или тестировщиков на выверку финального результата. Необходимо только помнить, что выверка исходного текста делается на одном языке, а выверка результата — на всех языках, т. е. усилий надо затратить в N раз больше.
Вообще, локализация — это по факту открытие еще одного рынка, и понятно, что, при принятии решения о локализации, руководство рассчитывает получить дополнительную прибыль. При этом зачастую в эту самую локализацию вкладывают лишь малую часть от общего бюджета разработки (скажем, порядка 1–2 %). Т.е. расчет идет на то, что, добавив 1 %, можно получить + 50 % дохода. Насколько реалистичными могут быть такие ожидания?
Цели и объемПервое, с чем необходимо определиться, — для чего будет производиться локализация, на какие языки, в каком объеме и с каким качеством. Обычно целью являются бизнес-задачи — вывод продукта на новые рынки, расширение аудитории. Бывают также случаи, когда продукт фактически будет продаваться на оригинальном языке, но, согласно законам государства, необходимо иметь его переведенную версию (например, различные руководства пользователя).
Вообще, весь процесс локализации требует активного взаимодействия клиента и переводчиков, поэтому, если перевод на какой-то язык осуществляется без реальной поддержки на локальном рынке (представительство, сообщество пользователей) и ее не будет в ближайшее время, есть шанс, что всю работу придется переделывать.
Говоря о переводе софта, можно выделить следующие основные типы контента:
- Строки самого приложения;
- Руководство пользователя;
- Помощь по продукту.
Если на сам продукт денег еще хватает, то все остальное может остаться за кадром, хотя, конечно, крупный продукт без перевода руководства пользователя может быть вообще бесполезным.
Если локализуется все, важным фактором становится то, что и руководство пользователя, и помощь по продукту должны основываться на строках самого приложения. Поэтому невнятная терминология или неудачное название элементов интерфейса, а также ошибки и опечатки в строках приложения ведут к воспроизведению тех же ошибок в остальных материалах, часто с умножением их числа. Плюс может появиться несогласованность софта и всего остального, со всеми вытекающими последствиями в отношении качества, сроков и затрат.
Организация процессаИтак, допустим, выбор сделан, локализация нужна.
Сразу необходимо задуматься о том, как все будет реализовано технически. Т. е. будут ли строки извлекаться из продукта, или перевод будет идти непосредственно в исходных материалах, и т. д.
Возможные варианты (не все, конечно) для софта:
- Строки находятся непосредственно в исходном коде программы. Реализация:
- Локализуются и хранятся сами исходники. Тогда локализованная версия собирается параллельно с основным кодом. Минусы: возможны большие затраты на поддержку билдов, самого продукта, поскольку баги необходимо исправлять в нескольких версиях — исходной и переведенных.
- Существует специальный механизм перевода, который, используя исходную строку (возможно с дополнительным идентификатором, например, модуля программы), получает перевод на рантайме или во время сборки локальной версии. В дополнение потребуется механизм вытаскивания строк (parsing). Сам перевод может храниться как в отдельных файлах, так и в базе данных. Плюсы: можно оперативно исправлять переводы.
Главная особенность этого этапа заключается в том, что любая ошибка, допущенная при подготовке контента, автоматически умножается на количество языков перевода (N). Возьмем произвольную плохо сформулированную фразу.
В лучшем случае N переводчиков попросят менеджера проектов перевода (TRM) прояснить эту фразу. TRM не обязательно является специалистом по продукту: это человек, который организовывает процесс. Ему придется потратить заведомо больше времени, чтобы разобраться в ситуации, чем людям, которые непосредственно создают контент.
В худшем случае N переводчиков, чтобы не терять время, переведут фразу так, как им будет удобно. В результате придется исправлять перевод на N языках, N раз привлекая для подтверждения корректности правки не только TRM, но и тестеров. После чего N*Х клиентов потратят время, чтобы установить обновление программы.
ТерминологияКонтент грубо можно разделить на две составляющие: терминология (фундамент) и собственно остальные строки (все здание). Терминология — это место, в котором необходимо приложить максимум усилий, чтобы получить качественный перевод. Нужно создать список самых часто используемых терминов, добавить к нему самые сложные понятия и убедиться, что все термины взаимнооднозначны: одно понятие — один термин. Любая многозначность — головная боль для переводчиков.
После того как список терминов создан на исходном языке, его необходимо перевести на все целевые языки и проверить (это очень важный момент) локальными специалистами. Этот шаг, включая выверку, ни в коем случае нельзя пропускать. Пока запущен этот процесс, можно заняться самими строками продукта.
Строки продуктаСуществует множество способов создания контента приложения. Конкретная реализация зависит от процесса разработки, способа размещения строк и других факторов.
Частая ситуация: дизайнер, общаясь с клиентом (или продакт-маркетингом), создает первичную спецификацию продукта.
Далее программист пишет код, иногда копируя названия элементов интерфейса, иногда привнося что-то свое, включая ошибки.
Затем тестер проверяет работу программы, находит функциональные ошибки, дает рекомендации, в результате чего появляются элементы интерфейса и сообщения, которые не присутствовали в исходной дизайн-спецификации. Ни времени, ни ресурсов, чтобы синхронизировать новую версию кода с первоначальной спецификацией, обычно нет.
Вся процедура может повторяться несколько раз. Проблема усугубляется в крупных международных компаниях, когда основной язык приложения и разработки, также являющийся основой локализации, не является родным языком для одного или нескольких участников цепочки. Более того, все участники могут разговаривать на разных языках: продукт создается на английском, дизайнер — русский, программист — китаец, а тестирует мексиканец.
Добавьте еще две проблемы:
- Далеко не каждый программист (да и вообще, не каждый человек) даже на родном языке может четко и грамотно формулировать свои мысли (увы, но это так).
- Команда разработчиков варится в своей специализированной области, где им все понятно, при этом используя свой собственный жаргонный язык.
Большую роль играет наличие проработанного стайл-гайда (пример). И, кстати, тот факт, что существует отдел технических писателей, еще не гарантирует наличие стайл-гайда.
Рассмотрим случай, когда строки все-таки проходят какой-то контроль.
- Строки отделены от кода в отдельные файлы текстового формата, базу данных или другую специализированную внутреннюю программу. Тогда технические писатели могут оперативно исправлять ошибки непосредственно в системе хранения исходников, а сборка программы, скорее всего, не будет падать от их работы.
- Строки собираются в единый блок при помощи специальной процедуры парсинга (parsing) и только потом отдаются на проверку. В этом случае после исправления строк требуется дополнительная работа по внесению исправлений в исходный код.
- Нужен контекст. Если строки отделены от кода, технические писатели не всегда видят контекст использования и не всегда прилагают усилия для исправления тех элементов, которые им непонятны, ограничиваясь формальным следованием правилам языка.
- Крайне желательно сравнивать новые строки между собой и со старыми строками на предмет использования одинаковой терминологии и похожих конструкций предложений. При работе с небольшим продуктом еще можно уследить за всеми деталями, особенно если контентом заниматься с самого начала. При разработке больших продуктов с несколькими командами разработчиков (особенно если они сами многоязычны) такое сравнение вручную малоэффективно, да и ни один технический писатель не способен охватить весь продукт.
• Qty. On Hand • OnHand Qty • On-hand Quantity • On Hand Qty. • Qty on Hand • Quantity On Hand • On Hand Qty • On Hand Quantity • Qty On Hand
• Start Date cannot be greater than the End Date. • Due Date cannot be before Start Date. • End Date Cannot Be Before The Start Date. • Start Date may not be greater than the End Date. • From Date cannot be greater than To Date. • The Star date cannot be greater than the End date. • The star date cannot be greater than the end date. • From Date cannont be greater than To Date. • From Date cannot be later than To Date. • Start date cannot be greater then End date. • The Start date cannot be greater than the End date. • Begin Date may not be greater than the End Date.
• Invoice not found. • Invoice cannot be found. • Unable to find invoice. • Invoice wasn't found.
Приведенные примеры – это по смыслу одинаковые строки, но при этом их создают разные программисты в разных отделах. Вместо того, чтобы везде использовать что-то одно, у нас 10 вариантов, за перевод которых надо платить деньги.
Система Controlled Language- Текст воспринимается проще, облегчается работа с продуктом, что выгодно и тем клиентам, которые используют программу на ее оригинальном языке.
- Повышается качество перевода: при переводе простого текста допускается меньше ошибок.
- Сокращается стоимость перевода: при ограниченном наборе слов, фраз и конструкций возрастает объем частичных совпадений (а также 100%-ных совпадений и повторов).
- Улучшается качество вспомогательного контента: как за счет «фундамента» в виде лучших софтовых строк, так и от непосредственного применения системы CL.
- Повышается качество машинного перевода: CL позволяет убрать многозначность, которая является одной из основных проблем, влияющих на качество МТ.
Таким образом, контент приложения (софтовые строки) должен проходить предельно полный контроль, выверяться на соответствие определенному набору правил, характерных для отрасли в целом и для компании в частности. Контент должен быть понятным для максимально возможного числа людей, в том числе не обладающих глубокими знаниями продукта.
Перевод и проверка его качества заслуживают отдельной статьи, так как появляется целый комплекс вопросов: от того, стоит ли доверять автоматическим проверкам или обязательно привлекать локальных пользователей, до выбора системы управления переводами и поддержки пула переводчиков.
Буквально перед публикацией мы получили вот такую рецензию от одного из авторов: Программист сказал, что можно было бы еще несколько картинок, и хотя бы одну с обнажёнкой, но, я так полагаю, это не вариант :). В целом, больших замечаний нет.
Отказывать программисту никак нельзя, но и обнажёнка — это как-то слишком. Поэтому вот вам: