Как делают локализацию для японского рынка. Как сделать локализацию в веб-приложении? Изменения локализации Shovel Knight

Ник Устинов, генеральный директор сервиса по автоматизации переводов мобильных приложений и веб-сервисов , рассказывает, как локализация влияет на прибыль онлайн-бизнеса.

Все читали Котлера, все слышали про маркетинг. Ладно, читали не все, но слышали про него точно. Сегментируй, докапывайся до микросегментов, а потом предлагай продукт именно для этой аудитории. Так вот, Байрон Шарп, директор Института маркетинговых наук Эренберга-Басса при Университете Южной Австралии, десять лет изучал этот вопрос и доказал обратное . Если вы хотите зарабатывать много, нужно товар или услугу предлагать всем. Целевой сегмент будет часто ей пользоваться, но именно нерегулярное потребление большим количеством покупателей принесет до 50% прибыли.

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

Зачем вообще локализовывать ваше приложение? Если вы предоставляете услуги для очень небольшой территории, например, у вас химчистка, куда носят одежду жители одного района, то локализация вам вроде как ни к чему. Разумеется, тут же найдутся умники, которые скажут, что в районах Лондона, Парижа или Рима живут люди, которые общаются на разных языках, но здесь речь не об этом.

Изображение: Giphy

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

Причина 1: деньги

В блоге и на -канале Android Developers есть немало кейсов о влиянии локализации на доход. Например, стартапу Noom, выпускающему приложения для здорового образа жизни, локализация принесла +80% к прибыли на . Причем в локализации был не только перевод, но и интернационализация контента. Еще один пример - аргентинский стартап Papumba, делающий приложения, которые учат детей узнавать звуки различных животных. Дети - прекрасный пример аудитории, которая не знает английского и не выучит его в ближайшие пару лет. Для Pаpumba локализация на 15 языков увеличила рост установок на 300% . Подобное расширение верхнего уровня воронки - настоящая мечта стартапа. Далее они занялись интернационализацией: убрали тех животных, которые вызывали негатив в определенных странах. Например, в мусульманских странах из приложения убрали свинью. После этих мер рейтинг приложения в Google Play увеличился с 3,9 до 4,2, что опять же, заметное улучшение, особенно если учесть, что для таких изменений не потребовалось значительное количество ресурсов.

Часто, как аргумент для локализации приводится статистика о распространенности языков. Мол, сейчас очень много испанского, упрощенного и традиционного китайского, а также растет сегмент португальского языка (в особенности бразильского диалекта). Но ведь многим хватает и английского. Насколько увеличится прибыль, если сделать локализацию?


Изображение: Giphy

Приведу несколько примеров локализации тех клиентов Lokalise, которые, так или иначе, являются выходцами из постсоветского пространства.

Polybius - проект по созданию регулируемого банка для цифрового поколения. В рамках ICO он собрал $31 млн в различных фиатных и криптовалютах. В общей сложности проект был локализован на десять основных языков, включая даже корейский, японский и китайский.

Depositphotos - один из крупнейших международных фото- и видеобанков, в коллекции которого насчитывается более 67 млн файлов. Локализован на 20 языков, сейчас ведется работа еще над двумя, казалось бы, экзотическими версиями - тайской и индонезийской.

Nimses - геолокационное приложение, которое позволяет превращать время пребывания в сети в «нимы» - валюту, которую можно обменивать на товары или услуги. Сейчас в сервисе представлены все языки стран Европы, приложение доступно в 70 странах мира, в том числе в Латинской и Северной Америке. Его аудитория стремительно растет и на сегодня составляет порядка 3 млн пользователей (хоть приложение вышло совсем недавно). Язык интерфейса в приложении определяется автоматически, в зависимости от того, какой язык определен в настройках телефона. Если же там установлен язык, который не поддерживается, то по-умолчанию Nimses будет на английском.

Причина 2: глупо делать одну работу дважды

В идеале курс на локализацию нужно брать еще на этапе Hello world. Раз создав структуру ключей с переводами разных элементов интерфейса и выделив место под интернационализацию на сервере, потом можно будет масштабировать приложения на новые рынки фактически без привлечения разработки. Это заметно проще и, главное, дешевле, чем делать 1.0 и впихивать перевод хардкодом, а потом переписывать структуру приложения, когда CEO становится очевидно, что он просто недополучает десятки-сотни процентов доходов на других рынках.

Изображение: Giphy

Еще один аргумент - это простота управления нормально реализованной локализацией. Чтобы исправить ошибку или изменить название раздела, в приложениях, например, с Lokalise SDK, не нужно полностью переливать приложение. Следующий «старт» сервиса - и у пользователя уже написано то, что вам нужно.

Причина 3: мультиплатформенность

Речь не только про iOS-версию вашего Android-приложения. Если вы поддерживаете одновременно и приложение для смартфона, и сайт, и, упаси вас Джобс, еще и приложения для консолей, Smart TV или носимых гаджетов, то придется следить за тем, чтобы в каждом из устройств все интерфейсные и контентные элементы были одинаковыми. Иначе ваш UI/UX-гуру будет очень страдать и убеждать вас, что пользователь не должен гадать, почему на сайте раздел называется «Профиль», а в смартфоне – «Аккаунт». Переходы пользователя по разделам/уровням игры или его любое другое целевое действие должны быть простыми и интуитивно понятными на каждом устройстве.

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

Пример работы Lokalise.

И это не означает, что в коде ваших приложений для разных платформ придется придерживаться каких-то специфических принципов написания.

С помощью того же Lokalise, в приложениях это могут быть разные переменные, которые на серверной стороне объединены в один ключ. То есть LikeButton в коде под iOS и like_button в коде Android могут быть подвязаны под один ключ перевода, и будут идентично переведены в каждой из локализаций.

Причина 4: оптимизация ресурсов

Четвертая причина снова про деньги, потому что проекты иногда привлекают разные команды. И если не создавать еще и команду n+1, которая будет синхронизировать это n-ное число команд переводчиков, то на выходе получится n разных продуктов. Сервисы по локализации могут взять на себя и первичный перевод, и дальнейшую поддержку локализаций, и это всегда дешевле, чем штатные команды переводчиков или хуже того, штатные разработчики, внедряющие все то, что им прислали аутсорс-переводчики.

(Так, средняя стоимость перевода слова по рынку составляет 10 центов. Возьмем условно проект из 1000 уникальных слов на двух платформах. Так вот, перевод на один язык займет 1-2 дня и обойдется в 100 долларов).

Есть еще много причин делать локализацию по-человечески. Главный вывод: локализация - это скачок роста для очень многих продуктов, и это значительно проще, чем может показаться на первый взгляд. Разработка должна писать код, СЕО – искать инвестиции и управлять процессом, а работу по локализации нужно отдать тем, кто ее сделает хорошо и быстро.

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

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

Немного о терминах
Строго говоря, сайты не переводят, а локализуют. Локализация - это не просто перевод с одного языка на другой. Это комплексная адаптация к культуре и реалиям рынка, в результате которой тексты на сайте, графика, мультимедиа, верстка - все выглядит так, как этого ожидает целевая аудитория. Именно поэтому очень важно учесть множество нюансов, в том числе таких, которые на первый взгляд могут показаться незначительными. К примеру, подумать о длине слов в целевом языке (в английском они короче, чем в русском, а в немецком - длиннее) уже на этапе проектирования интерфейса. Например, «выход» и «exit» ещё не так сильно отличаются, а вот немецкий «Beenden» и китайский 退出 уже тянут на задачку для дизайнеров интерфейса.

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

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

Процесс оценки выглядит так: специалист изучает перевод и фиксирует ошибки в специальной форме, попутно классифицируя их. После этого он по специальной формуле вычисляет «индекс качества» в диапазоне от 0 до 100. При трехступенчатой технологической схеме (переводчик, редактор и корректор), рекомендованной для локализации сайтов, ПО и маркетинговых материалов, этот показатель должен быть не ниже 90.

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

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

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

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

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

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

Исходники
Наличие исходных файлов (html, xml, doc, xls или других) упрощает и удешевляет локализацию, а также экономит силы и нервы - вы спокойны, что исполнители точно не переведут лишнего и ничего не забудут.

Скидывать исполнителям ссылку на ваш сайт с пометкой «перевести до среды» - не самый эффективный способ постановки задачи, хотя и он работает. Лучше укажите, что именно перевести, и дайте доступ к CMS сайта, чтобы исполнители сразу работали с исходными файлами.

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

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

Главный по сайту
Очень пригодится контакт с командой, которая создавала сайт, понимает его логику и занимается его поддержкой и наполнением - это могут быть как штатные разработчики, так и сторонние подрядчики. Исполнители смогут обсудить с ними вопросы, возникающие в процессе локализации, прояснить спорные моменты и получить доступ для лингвистического тестирования (о нем ниже).

Как бывает в жизни

Допустим, сроки сильно поджимают, перевод нужен как можно скорее, но без ущерба для качества. В этом случае помогут современные технологии. Например, решение SmartCAT помогает организовать параллельную работу нескольких специалистов: над проектом могут работать несколько переводчиков одновременно. Они не будут мешать друг другу: технология поможет каждому исполнителю повторно использовать в режиме реального времени то, что уже перевели другие или он сам. Редактор приступает к работе, не дожидаясь, пока проект будет полностью переведен. Это помогает поддерживать единство терминологии и стиля и ускоряет выполнение крупных проектов в несколько раз.

Если нет времени или бюджета на качественный трехступенчатый перевод (когда над ним работают переводчик, редактор и корректор), то с вычиткой может помочь региональный партнер, для которого готовится перевод: он разбирается в продукте. В таком случае можно сделать перевод без редактора-носителя, но с проверкой корректором, чтобы избежать опечаток, ошибок и прочих недочетов.

Если нужно перевести маркетинговые тексты для запуска продукта, настоятельно рекомендуем дополнительно привлекать редактора-рерайтера. Он адаптирует переведенный текст и правильно расставит акценты. Могут потребоваться и другие работы: перерисовка изображений, изменение шаблона страницы и пр.

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

Экономия с помощью машины
Включать ли в локализацию этап машинного перевода, зависит от сложности исходных текстов, бюджета, запаса времени и требований к качеству результата. К примеру, если нужно перевести большой массив однотипной информации, а время и бюджет ограничены. Машинным переводом часто пользуются крупные площадки e-commerce, где размещаются описания тысяч товаров и есть пользовательский контент (отзывы, комментарии). Для них это оправдано: по фотографии покупатели понимают, что за товар им предлагают, но часто встречаются и наборы бессвязных слов.

Машинный перевод подойдет в тех случаях, когда текст простой и однозначный (подходит большим компаниям с сильным конкурентным преимуществом, когда, например, низкая цена товаров перевешивает качество перевода). Но для этого технологию обычно настраивают - «тренируют» конкретный машинный «движок» на определенные тексты из данной области, добавляя накопленные глоссарии и базы памяти переводов по теме. Затем над результатом такого перевода работает редактор: в отрасли процесс называется постредактированием, а специалист - постредактором.

Переводчик работает с машинным переводом

Лингвистическое тестирование
Это финальный этап локализации и важная составляющая контроля качества. Локализованные файлы загружаются на сайт, далее его экран за экраном просматривает эксперт-тестировщик согласно утвержденному плану. Он оценивает переводы в контексте, отслеживает, чтобы не было обрезанного и непереведенного текста, изучает корректность отображения шрифтов, дополнительно проверяет текст на грамматическую правильность, фиксируя все комментарии в специальной форме (баг-репорте). Далее необходимые правки согласовываются с заказчиком и вносятся в рабочие файлы.

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

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

Что делать, если бюджет на локализацию небольшой, а переводить сайт все равно нужно
Сэкономить на локализации помогут:

  • Технологии автоматизации переводческого процесса. Целый класс программ, CAT-инструменты (Computer-Aided Translation - системы автоматизации процесса перевода), помогают повторно использовать ранее переведенные слова и фразы и облегчают труд переводчиков. Это не машинный перевод, а тексты, созданные человеком (профессиональными переводчиками). В CAT-системах используется накопленная память переводов и проектный глоссарий. Важно, чтобы переводчики использовали наиболее актуальные лингвистические ресурсы. Например, в платформе SmartCAT они сразу же становятся доступны всем участникам процесса, что особенно ценно, когда на большом проекте параллельно работает несколько переводчиков.

    Параллельная работа нескольких переводчиков над одним текстом
  • Расчет стоимости локализации по словам оригинального текста. В статистику не попадут куски кода и другая служебная информация, а стоимость перевода не увеличится после его выполнения, чем иногда страдают недобросовестные подрядчики.
  • Организация работы по частям. Если сайт большой, содержит множество описаний продуктов или услуг - разбейте работу на этапы. Сначала переведите наиболее критичные страницы, которые позволят вам начать привлекать клиентов на новом рынке уже сейчас. Постепенно расширяйте объем контента по мере того, как объем продаж на этом рынке будет расти. Этот подход также позволит постепенно накапливать память переводов, а значит, все последующие тексты можно будет перевести быстрее и дешевле, с сохранением единства терминологии и стиля.
И напоследок: что не рекомендуется делать при подготовке сайта к локализации
Это самые базовые рекомендации, список можно дополнять в каждом конкретном случае, но и с ними полезно познакомиться - и тем, кто уже планирует локализацию своего сайта на иностранные языки, и тем, кто пока не собирается на новые рынки. Не стоит:
  1. Писать длинные, тяжеловесные фразы, наполненные причастными и деепричастными оборотами. Пишите проще, используйте глаголы, не обращайтесь к пользователям на «Вы», следуйте заветам Максима Ильяхова .
  2. Использовать безличные обращения. В некоторых языках они не употребляются, как и дополнительные формы вежливости. Поэтому смело отказывайтесь от них.
  3. Применять одну схему построения фразы для каждой языковой версии сайта. Например, для фраз с переменными вида «До конца подписки осталось X дней». В русском языке в зависимости от числа будет меняться падеж и число: дней, дня, день. В других языках может потребоваться предлог или изменение фразы. Имеет значение и плейсхолдер, и двоеточие: например, в турецком фраза начнется с цифры.
  4. Добавить метки

11.02.2016
19.03.2018

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

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

Итак начнем. Сейчас я занимаюсь переносом (с серьезной переделкой) одного достаточно крупного сайта на Битрикс. Процесс очень интересный и о нем постараюсь в ближайшее время сделать более подробный пост с раскрытием ключевых моментов. А сейчас, о локализации.

Для начала была сделана русскоязычная версия сайта (заказчик данную версию выбрал основной). Абсоллютно все кирилические надписи во всех компонентах в обязательном порядке были вынесены в языковые фразы. Очень рекомеую не оставлять в языковых фразах дефолтные заготовки (в стиле "а вдруг пригодится") - не пригодятся! (А если будут нужны - лучше новые создадите, зато себе работу сократите в проверке корректности перевода). Также рекомендую все общие фразы,которые используются в большом количестве шаблонов компонентов, выносить в языковой файл хедера (правда, для страниц, подключаемых без хедера фразы все равно придется дублировать или принудительно подключать языковой файл хедера).

В общем виде подключение языковых фраз выглядит, примерно, так:

Use \Bitrix\Main\Localization\Loc as Loc; Loc::loadMessages(__FILE__); Loc::getMessage("MSG_KEY");

Начинающие разработчики 1С-Битрикс (хотя и многие уже достаточно опытные разработчики тоже) все оставляют кирилицу прямо в шаблоне, считая, что потом, позже, перенесут. И так и остается вся эта каша на годы в шаблоне. Хорошо, если сайт в одной языковой версии устраивает своих посетителей годами и производить его локализацию нет необходимости, а че если нет, как говорит Семен Слепаков? Поэтому приучайте себя всегда выносить кирилицу в языковые фразы. Не вы, так кто-то другой обязательно выразят вам за это свою благодарность.

Теперь считаем, что вся кирилица хранится в языковых фразах и перевод не будет столь уж сложным. Для того, чтобы вытянуть все языковые фразы для перевода воспользуемся модулем "Перевод" системы 1С-Битрикс (обладателям редакций без данного модуля придется писать скрипт, который за вас вытянет все языковые файлы и сформирует CSV-файл).

Открываем в админке Настройки - Локализация - Просмотр файлов. В поле "Путь" вписываем относительный путь до шаблона сайта. Ниже выбираем вкладку "Выгрузка файла" и на ней - "Выгрузить все переводы". Нажимаем "экспортировать". Таким образом получили CSV файл, состоящий из такого набора колонок:

"file"; "key"; "ru"; "ua"; "en"

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

Файл кладем где-то в системе (я обычно помещаю в upload), а в нашем скрипте-обработчике сразу добавляем первую фразу с указанием полного, абсоллютного пути до файла:

$fileName = $_SERVER["DOCUMENT_ROOT"] . "/upload/bitrix_templates_template.csv";

И файлик, в который запишем результат:

$fileName = $_SERVER["DOCUMENT_ROOT"] . "/upload/bitrix_templates_template_res.csv";

Require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/csv_data.php");

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

Function csv_to_array($filename="", $delimiter=",") { if(!file_exists($filename) || !is_readable($filename)) return FALSE; $header = NULL; $data = array(); if (($handle = fopen($filename, "r")) !== FALSE) { while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) { if(!$header){ $header = $row; foreach ($row as $key=>$value) { if (strlen($value) > 0)$header[$key] = GetTranslitCode($value); } } else { foreach ($row as $key=>$value) {$row[$key]=$value;} $data = array_combine($header, $row); } } fclose($handle); } return $data; }

GetTranslitCode - это обертка вокруг обычной битриксовой функции транслитерации:

Function GetTranslitCode($text) { $text = trim($text); if (strlen($text) "-", "replace_other" => "-", "delete_repeat_replace" => "true", "use_google" => "false",); return CUtil::translit($text, "ru", $params); }

Прогоняем наш csv-файл через обработку csv-файла и получаем ассоциативный массив из строк файла с заголовками в виде ключей:

$arRows = csv_to_array($fileName, ";");

Создаем с перезапись результирующий файл:

$fp = fopen($resFileName, "w+"); fclose($fp);

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

$csvFile = new CCSVData(); $fields_type = "R"; $delimiter = ";"; $csvFile->SetFieldsType($fields_type); $csvFile->SetDelimiter($delimiter); $arrHeaderCSV = array("file", "key", "ru", "ua", "en"); $csvFile->SaveFile($resFileName, $arrHeaderCSV);

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

Создаем экземпляр класс переводчика и прогоняем весь массив языковых фраз через функцию перевода. Каждую строку сразу же сохраняем в файл:

$translator = new Yandex_Translate("ключ, полученный тут: api.yandex.ru/key/form.xml?service=trnsl"); $srPresent = array(); foreach ($arRows as $num => $row) { if(strlen($row["ru"])yandexTranslate("ru", "uk", $row["ru"]))->text; $row["ua"] = $text; $srPresent[$row["ru"]] = $row["ua"]; } } $csvFile->SaveFile($resFileName, array($row["file"],$row["key"],$row["ru"],$row["ua"],$row["en"])); }

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

Для загрузки языковых фраз снова открываем в админке Настройки - Локализация - Просмотр файлов. В поле "Путь" вписываем относительный путь до шаблона сайта. Ниже выбираем вкладку "Загрузка файла" и на ней выбираем наш файл, выбираем направление перевода "полностью заменить..." (или только новые, если вы делали частичный перевод) и нажимаем "Импортировать"

Все! Теперь языковые фразы созданы и можно спокойно заниматься реализацией второй локализации сайта.

В процессе проработки данного механизма были использованы материалы:

UPDATE 2016-02-23

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

Для значений свойств этот недостаток можно обойти с помощью свойства типа "Справочник", заполняя UF_NAME основным языком, а другое поле (например, UF_DESCRIPTION) - забираем под второй язык. Но этого нельзя сделать для названий свойств - нет поля, в котором это хранить.

Из всей этой проблемы родилось решение: Создал отдельный языковой файл props.php, который подключил рядом с языковым файлом хедера:

If(LANGUAGE_ID=="ua"){ Loc::loadMessages($_SERVER["DOCUMENT_ROOT"].SITE_TEMPLATE_PATH."/props.php"); }

Вот таким нехитрым способом загружаем свои отдельные значения для украинского языка

Function GetFromVacabulary($filterEntity, $filterValues,$arSelect = array("ID", "UF_NAME", "UF_XML_ID","UF_DESCRIPTION")) { if(!is_array($filterEntity) || empty($filterEntity)) return false; $cacheParams = array("filterEntity" => $filterEntity, "filterValues" => $filterValues, "lang" => LANGUAGE_ID); $cache_id = md5(serialize($cacheParams)); $cache_dir = __CLASS__ . "/" . $cacheParams["module"]; $obCache = new CPHPCache; if ($obCache->InitCache(36000, $cache_id, $cache_dir)) { $arResult = $obCache->GetVars(); $arResult["CACHE"] = "Y"; } elseif (\Bitrix\Main\Loader::includeModule("highloadblock") && $obCache->StartDataCache()) { if(LANGUAGE_ID=="ua"){ $translator = new \Yandex_Translate($this::YANDEX_TRANSLATOR_KEY); } global $CACHE_MANAGER; $CACHE_MANAGER->StartTagCache($cache_dir); $hlblock_requests = \Bitrix\Highloadblock\HighloadBlockTable::getList(array("filter" =>$filterEntity))->fetch(); if (!isset($hlblock_requests["ID"])) return false; $entity_requests = HL\HighloadBlockTable::compileEntity($hlblock_requests); $entity_requests_data_class = $entity_requests->getDataClass(); $main_query_requests = new Entity\Query($entity_requests_data_class); $main_query_requests->setSelect($arSelect); if (!empty($filterValues)){ $main_query_requests->setFilter($filterValues); } $result_requests = $main_query_requests->exec(); $result_requests = new CDBResult($result_requests); $arResult["ITEMS"] = array(); while ($row_requests = $result_requests->Fetch()) { if(LANGUAGE_ID=="ua"){ if(strlen($row_requests["UF_DESCRIPTION"])>0){ $row_requests["UF_NAME"] = $row_requests["UF_DESCRIPTION"]; } else { $text = json_decode($translator->yandexTranslate("ru", "uk", $row_requests["UF_NAME"]))->text; $text["ua"] = $text; $row_requests["UF_NAME"] = $text["ua"]; $entity_requests_data_class::update($row_requests["ID"],array("UF_DESCRIPTION"=>$text["ua"])); } } $arResult["ITEMS"][$row_requests["UF_XML_ID"]] = $row_requests; $CACHE_MANAGER->RegisterTag("hl" . $cacheParams["entity_id"] . $row_requests["UF_XML_ID"]); } $CACHE_MANAGER->RegisterTag("hl" . $cacheParams["entity_id"]); $CACHE_MANAGER->EndTagCache(); $obCache->EndDataCache($arResult); } else { $arResult["ITEMS"] = array(); } return $arResult; }

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

$putLinesToLangFile = ""; foreach ($arResult["ITEMS"] as $key=>$arItem) { if($arItem["PROPERTY_TYPE"]=="S" && $arItem["USER_TYPE"]=="directory"){ $tmp = $mainEntity->GetFromVacabulary(array("TABLE_NAME"=>$arItem["USER_TYPE_SETTINGS"]["TABLE_NAME"]), array("UF_XML_ID"=>array_keys($arItem["VALUES"]))); if(!empty($tmp["ITEMS"])){ foreach ($tmp["ITEMS"] as $hl_code => $hl_val) { $arItem["VALUES"][$hl_code]["VALUE"] = $hl_val["UF_NAME"]; } } } if(strlen(Loc::getMessage($arItem["CODE"]))>0){ $arItem["NAME"] = Loc::getMessage($arItem["CODE"]); } else { $arItem["NAME"] = $mainEntity->TranslateText($arItem["NAME"]); $putLinesToLangFile .= "$MESS["".$arItem["CODE"].""] = "".$arItem["NAME"]."";".PHP_EOL; } $arResult["ITEMS"][$key] = $arItem; } if(strlen($putLinesToLangFile)>0){ $current = file_get_contents($_SERVER["DOCUMENT_ROOT"].SITE_TEMPLATE_PATH."/lang/ua/props.php"); $current = substr($current,0,-2).$putLinesToLangFile."?>"; file_put_contents($_SERVER["DOCUMENT_ROOT"].SITE_TEMPLATE_PATH."/lang/ua/props.php", $current); }

Сначала прогоняем значения справочников через функцию, описанную выше, а затем - занимаемся обработкой названий свойста.

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

Вот такое отличное решение родилось. Честно говоря, долго не мог придумать, как же обойти вариант работы со свойствами...

Еще не отказали в этом ни одному клиенту. Тем не менее, результат локализации может сильно зависеть не только от наших переводчиков, а и от ваших веб-дизайнеров. Почему? Ответ на этот вопрос и еще много полезных идей – в переводе статьи опытного проджект-менеджера по локализации Роберта Ханта.

Подготовка к локализации сайтов требует адаптивного дизайна

При разработке сайтов, которым предстоит локализация, используйте адаптивный дизайн и адаптивные методы вёрстки. Кроме этого, убедитесь, что и все элементы, содержащие текст, способны менять свои размеры. Почему?

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

Сравните английское предложение и немецкий аналог:

При переводе на немецкий текст удлиняется.

Простое правило – планируйте возможность увеличения текста как минимум на 30% . Разные источники советуют ориентиры от 20% до 50%, но мой опыт подсказывает, что 30% обычно достаточно.

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

В наше время нужно избегать абсолютных единиц CSS (px, in), чтобы можно было оптимизировать интерфейс под разные размеры экрана и сделать дизайн адаптивным. Адаптивность дает вам дополнительное преимущество, позволяя легче проводить локализацию.

Вместо фиксированных используйте относительные единицы, em и проценты (%) – это позволит контейнеру адаптироваться под содержимое.

Для примера взгляните, что происходит при переводе надписи с английского на филиппинский язык для кнопки фиксированной ширины:

Button { display: block; width: 120px; text-align: center; }

В данном случае ширина кнопки зафиксирована в 120 пикселей, что подходит для надписи на английском языке, но при переводе текст вырос на 50% (с 105px до 175px), что и привело к переносу строки.

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

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

Уберём свойство width вовсе, и позволим кнопке адаптироваться к родительскому элементу:


Кнопка без указания ширины

Button { display: block; text-align: center; }

Чтобы лучше контролировать ширину, мы можем задать минимальную и максимальную ширину кнопки в процентах.
Задав значение min-width в 30% и max-width в 60%, в результате мы получим:


Ширина кнопки при использовании параметров CSS min-width и max-width

Button { display: block; min-width: 30%; max-width: 60%; text-align: center; }

При разработке вариантов дизайна для разных экранов (media-queries) учитывайте, что текст на разных языках может иметь разную длину и размер шрифта (примечание переводчика: например, для китайских или японских иероглифов, изобилующих мелкими деталями, шрифт должен быть на 15-30% крупнее ). Предусмотрите возможность уменьшать размер шрифта или изменять относительный размер элементов, чтобы дизайн не ломался.

Кроме общих принципов адаптивного подхода, учитывайте следующие рекомендации при создании сайтов, подготовленных к локализации:

Используйте шрифты Unicode
Шрифты Unicode содержат большое количество букв, знаков, цифр и других элементов для отображения текстов на разных языках. В качестве примеров популярных шрифтов, поддерживающих юникод, можно привести Arial и Times New Roman.

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

Не используйте картинки с текстом
Если ваш сайт содержит картинки с надписями, замените их на HTML, а потом стилизуйте при помощи атрибутов CSS и @font-face. Тогда текст можно будет перевести при помощи автоматических переводчиков (примечание переводчика: хотя куда лучше пользоваться услугами агентств по локализации, чтобы получить действительно качественный перевод ).

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

Два популярных метода организации локальных версий:

  • Поддомены: example.com/webpage.html превращается в ru .example.com/webpage.html (для русскоязычной версии)
  • Поддиректории: example.com/webpage.html превращается в example.com/ru /webpage.html (русскоязычная локализация)


Nike.com (U.S.)


Nike.com (France)

Изучите особенности работы со строками в вашей среде разработки или фреймворке
Многие фреймворки разработаны с учётом возможности локализации сайтов, и в них уже встроены опции для облегчения этого процесса.

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

Документация для наиболее популярных платформ и фреймворков.

Локализация – это сложный процесс, который может в разы увеличить прибыль от проекта, сделав игру доступной для большего числа аудитории. Наивно полагать, что английской локализации достаточно. Да, американский рынок пока остается самым прибыльным, но тут ключевое слово ПОКА. Уже сейчас, например, китайский рынок начинает набирать обороты за счет того, что держатели платформ активно ведут переговоры с мобильными операторами страны. В то же время – оглянитесь, разве все ваши знакомые владеют английским языком на таком уровне, чтобы просто поиграть в игру для отдыха? Уверены, что нет. А если брать во внимание, что в широких массах знание английского языка в разы хуже, чем в ИТ тусовке, то складывается четкое понимание, что без локализации не обойтись.

Процесс локализации включает взаимодействия вне границ вашей команды. Чаще всего граница расширяется до посторонней компании-локализатора. Реже – до группы переводчиков и редакторов.

Мы, команда локализации ‪ ‬ решили немного приоткрыть тайны успешной локализации проектов.

Ниже мы рассмотрим наиболее часто встречающую модель проведения локализации проектов – через взаимодействие с компанией-локализатором.

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

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

Для старта локализации вам необходим хорошо сделанный английский вариант ваших текстов. Даже если вы российский разработчик – не поленитесь, закажите вычитку у настоящего американского (либо британского) писателя. Не стоит надеяться на свои силы. Даже если вы живете энное количество лет в англо-говорящей среде, это не значит, что вы знаете язык на уровне носителя. А тем более, умеете органично его использовать. Намного эффективнее написать текст на своем родном языке, а потом передать его в перевод носителем и вычитку писателем. Да, это не самый дешёвый вариант, но на качестве английского текста скупиться – себе дороже. Английский это не только язык самой платящей аудитории. Это еще и целевой язык для всех остальных локализацией, потому что перевод на другие языки будет происходить именно с него. И если у вас есть ошибки в нем – с огромной вероятностью они перейдут на остальные.

Для проведения успешной локализации переводчик обязан иметь представление о том, что он переводит. Он должен понимать, что если у вас игра для аудитории 3+, то в ней недопустимо использовать сложные речевые обороты. А если действия в вашей игре происходят в 18 веке, то вместо СД-диска нужно использовать пластинку для граммофона. Помочь разобраться переводчику в тонкостях проекта поможет:

1.Непосредственное ознакомление с проектом

Написать легче, чем сделать. Вроде что там – поиграть в игру-то. Но все не так просто, как кажется. Ну вот не все любят играть, тем более переводчики – лингвисты. Им бы книжку почитать, а не играть. Выполнить перевод они еще согласны, а вот поиграть – неет, пусть дети играют:). Но совсем другой разговор, если это часть заказа, которая также оплачивается. В оценке стоимости перевода нужно учесть дополнительные расходы минимум на час для ознакомления переводчика с игрой. Да, вы оплатите это время, и, соответственно, увеличите стоимость локализации. Но, поверьте, это поможет вам избежать многих проблем в процессе локализации на финальной стадии.

2. Ознакомление с историей игрового мира

Что это значит? Продюсер или гейм дизайнер должны подготовить небольшой текст с описанием игрового сюжета. Будут кстати скриншоты уровней, изображения героев.

3. Наличие скриншотов в материалах для переводчиков

Например для ХОГ игр очень важно иметь изображения абсолютно всех предметов поиска. Самый легкий пример из русского языка слово “лук” – имеет два совершенно разных смысловых значения.

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

4. Организация материалов для перевода

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

5. Информация о том кто говорит ту или иную реплику

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

Локализация – это сложный процесс, только если делать ее самостоятельно. Может показаться, что найти фриланс-переводчиков самостоятельно и сделать заказ очень просто, и нет смысла переплачивать агентствам. Но есть огромный риск не учесть огромное количество нюансов, которые в итоге испортят впечатление от игры у пользователей. И вы не только не заработаете денег, но и не окупите стоимости разработки игры. Желаем вам успешной локализации ваших проектов.

Если у вас есть вопросы – давайте начнем обсуждение в комментариях.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: