Правила локализации для разработчиков



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

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

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

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

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

    Статья написана в 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.

    Об авторе

    Alconost занимается локализацией игр, приложений и сайтов на 70 языков. Переводчики-носители языка, лингвистическое тестирование, облачная платформа с API, непрерывная локализация, менеджеры проектов 24/7, любые форматы строковых ресурсов.

    Мы также делаем рекламные и обучающие видеоролики — для сайтов, продающие, имиджевые, рекламные, обучающие, тизеры, эксплейнеры, трейлеры для Google Play и App Store.

    → Подробнее
    Alconost
    Локализуем на 70 языков, делаем видеоролики для IT

    Комментарии 3

      0
      Ещё было бы интересно почитать про сложности перевода фраз, связанных с падежами, полом персонажа, числительными:
      Reward 50 gold — награда 50 золотых
      Reward 51 gold — награда 51 золотой
      и как всего этого избегать
        +2
        Если коротко, то удобный, понятный и универсальный подход — ICU-синтаксис.
        Выглядеть будет как-то так:
        "{gender_of_host, select, "
          "female {"
            "{num_guests, plural, offset:1 "
              "=0 {{host} does not give a party.}"
              "=1 {{host} invites {guest} to her party.}"
              "=2 {{host} invites {guest} and one other person to her party.}"
              "other {{host} invites {guest} and # other people to her party.}}}"
          "male {"
            "{num_guests, plural, offset:1 "
              "=0 {{host} does not give a party.}"
              "=1 {{host} invites {guest} to his party.}"
              "=2 {{host} invites {guest} and one other person to his party.}"
              "other {{host} invites {guest} and # other people to his party.}}}"
          "other {"
            "{num_guests, plural, offset:1 "
              "=0 {{host} does not give a party.}"
              "=1 {{host} invites {guest} to their party.}"
              "=2 {{host} invites {guest} and one other person to their party.}"
              "other {{host} invites {guest} and # other people to their party.}}}}"

          0

          Как обычно, выберите из трёх вариантов что-то одно, к сожалению

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

      Самое читаемое