Gamedev
Khrystsina Trusava
1566

Как подготовиться к локализации: 10 основных правил

Сначала делаем, а думаем потом — или наоборот? Alconost рассказывает, какие особенности локализации стоит учесть на этапе разработки игры.

В закладки
Аудио

Эту статью мы написали как ответ на повторяющиееся вопросы разработчиков: «Что с моей игрой не так? Почему перевода недостаточно? Как это исправить?»

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

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

Для начала разберемся с терминологией. Локализовать игру — значит адаптировать её к выбранной локали (языковому стандарту, стране или региону), переведя интерфейс на целевой язык и сделав поправки на культурные, религиозные и политические факторы.

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

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

Ещё один пример локализации — это перевод текста с числами. В некоторых языковых стандартах, таких как en-US (американский английский) числа иногда нужно записывать словами, а не цифрами. В других языках числам должны соответствовать определенные формы единственного и множественного числа существительных. Например, в русском намного больше вариантов, чем one и more than one, которыми прекрасно обходится английский язык. А в японском и китайском вообще нет форм для множественного числа. Ну, а если числа и тексты в игре зафиксированы в виде статических изображений, просто перевести текст будет недостаточно.

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

Вообще, технические задачи, которые предшествуют локализации, относятся к интернационализации (кратко — «i18n»). Это, как правило, технические проблемы, которых можно было избежать, а на их исправление могут потребоваться усилия со стороны разработчиков.

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

1. Выберите языки локализации заранее

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

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

Возникает вопрос: как лучше выбирать перспективные языки до начала работы над игрой?

  • Проанализируйте локализационные проекты конкурентов. Обычно если конкурирующая игра популярна на определенном рынке, то и ваш локализованный продукт имеет больше шансов на успех.
  • Присмотрите к локализованным играм в вашем жанре. Например, если вы инди-разработчик и планируете выпустить игру в ретро-стиле, то некоторое представление о потенциальных рынках можно получить, обратив внимание на успешные примеры локализации в этом жанре игр, к примеру, Streets of Rogue, которая локализована на семь языков, не считая английского. Ещё можно рассмотреть этот вопрос с региональной точки зрения. К примеру, видеоигры очень популярны в японской культуре. Поэтому если у вас видео-игра, присмотритесь к Японии уже на самых ранних этапах разработки.
  • Изучите, какие языки локализации самые востребованы для игр. Здесь можно использовать наше предыдущее исследование, опубликованное на английском языке в статье «Лучшие языки для локализации игр».

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

И ещё, мы рекомендуем уже с первого дня разрабатывать игру с прицелом, как минимум, на два языка.Эти два языка «по умолчанию» скорее всего — английский и русский. При таком раскладе у вас будет несколько преимуществ. Во-первых, игру можно переводить на другие языки уже с английского, согласованно и единообразно. Во-вторых, реализуя двуязычность в игре с первого дня, вы автоматически наткнетесь на подводные камни подготовки к локализации. И переход к 20-и языковым версиям не будет таким сложным.

2. Подготовьте интерфейс для возможных языков

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

Но у нас есть ещё одна идея, получше. Если вы начали с правила № 1 и уже составили список языков, разрабатывайте интерфейс под самый сложный (самый объёмный для локализации) языковой стандарт.

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

3. Не встраивайте текстовые строки в код

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

Ещё один важный совет: старайтесь не составлять тексты из отдельных слов или фрагментов. Наглядным примером такой ошибки поделился на платформе StackExchange разработчик из Google:

String currency = Locale::getCurrencyString() + money.toString(); // дает «$123»

В этом примере мы получаем строку вида «$123», хотя в некоторых других языках знак валюты должен стоять после числа.

Поэтому лучше использовать форматирующие строки, которые могут быть локализованы. Например:

String format = Locale::get("currency format"); // возвращает «${0}» в английском

String currency = String::Format(format, money.toString());

Последний вариант дает переводчикам возможность переставлять слова внутри строки.

4. Помните, что время, даты, единицы измерения и числа тоже должны быть локализованы

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

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

И это не говоря уже о том, что форматы дат и единиц измерения различаются в разных языках.

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

5. Используйте переменные и средства установки формата и дайте к ним доступ

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

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

Неправильно: "Mommy ate " + %num + " apples."
Правильно: "Mommy ate %num apples."

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

6. Не зашивайте текст в изображения

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

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

7. Используйте правильные шрифты и кодировку

Если вы применяете «спѐциа́льнꙑе» символы, которые не вписываются в строковый класс, будут проблемы с кодировкой. И если после локализации у целевого продукта будет неправильная кодировка, на устранение символов вроде ��� уйдёт много времени и сил.

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

Мы рекомендуем вместо ASCII использовать Unicode: UTF-8 — самая распространенная и оптимальная кодировка.

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

8. Готовы к локализации? Попробуйте псевдоперевод

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

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

Такой предварительный тест — не панацея, но он помогает. А ещё, тестировать новый интерфейс с «абракадаброй» вместо текста бывает очень даже весело.

9. Начинайте составлять глоссарий заранее

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

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

10. Будьте готовы дать контекст

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

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

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

Надеемся, вам помогли наши советы. Желаем удачи и побольше довольных игроков! Ну, а если понадобится помощь в локализации или совет, пишите нам в Alconost.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Khrystsina Trusava", "author_type": "self", "tags": [], "comments": 21, "likes": 30, "favorites": 195, "is_advertisement": false, "subsite_label": "gamedev", "id": 96069, "is_wide": false, "is_ugc": true, "date": "Thu, 23 Jan 2020 18:08:24 +0300", "is_special": false }
0
{ "id": 96069, "author_id": 206678, "diff_limit": 1000, "urls": {"diff":"\/comments\/96069\/get","add":"\/comments\/96069\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/96069"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "last_count_and_date": null }
21 комментарий
Популярные
По порядку
Написать комментарий...
4

Локализации НЕНУЖНЫ.
переведя интерфейс на целевой язык

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

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

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

Все что не запрещено законодательно - разрешено.
Вот например типичный пример локализаторства из недавних: https://www.oneangrygamer.net/2020/01/nisa-translators-admit-to-altering-content-for-trails-of-cold-steel-3/101353/

Ответить
0

Плюсую. А то так можно и имена адаптировать чтоб ухо не резало и сюжет переписать. Конечно я поддерживаю отдельные моменты адаптации типа перевода единиц измерения в СИ, но разрабы уже давно завозят ее по умолчанию. Но остальное ненужно

Можно в кратце чо там НИСА сделали?

Ответить
0

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

https://www.twitch.tv/videos/536164003?t=01h00m50s

Ответить
0

Заебись, а потом мы получаем убогие диалоги в ФЭ на 3дс

Ответить
3

Комментарий удален по просьбе пользователя

Ответить
1

нас бы переместить) вроде, нужно решение редакторов)

Ответить
1

Комментарий удален по просьбе пользователя

Ответить
0

спасибо)

@Gamedev заберите нас, плиз, есть статья нра

Ответить
1

Надо просто пост распубликовать и сменить подсайт.

Ответить

Комментарий удален

1

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

Ответить
–2

Наверное, и вправду много времени прошло. Мы теперь тщательно отбираем переводчиков с самым высоким NPS  по результатам предыдущих проектов. Все лингвисты с большим опытом, проверены не одним проектом. Если у кого-то и были недоработки, то сейчас эти люди уже не с нами.

Ответить
3

Представьте, мне тогда то же самое говорили:)

Ответить
–2

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

Ответить
1

по мне хоть NPC хоть NPS - я ожидал определенного результата от вас, и заплатил очень много денег. как вы думаете, пойду ли я к вам снова?

Ответить
0

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

Ответить
0

Нет, спасибо, уже научился. А ещё очень сильно после этого всего раздражает ваша реклама, которая появляется у меня с тех пор на ютуб почти перед каждым роликом, выглядит как издевка:)

Ответить
0

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

Ответить
2

Это ведь реклама от пользователя, а не от редакции. Просто минус ставь, если не нравится, я вот именно так и сделал. 

Ответить
2

Ну хз, мне понравилось. Порой полезно узнать что-то, о чем раньше даже не думал

Ответить
0

Это не промо-пост.

Ответить
0

Где пункт помолиться? 

Ответить

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovz", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "chvjx", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "chfbl", "p2": "gnwc" } } } ]
{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }