Мы делали ремастер
целый год
Gamedev
Maltsev Denis

Редактор локализаций для UE4

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

Translation Editor for UE4

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

Пример экспорта в Excel

Инструкция

  • Для начала нужно в Unreal Engine подготовить все для локализации: ссылка на статью об этом. Затем выполнить Gather и Compile для всех локализаций.
  • Дальше в утилите нужно открыть файл *.manifest из папки [YOUR_project]\Content\Localization\Game. Все локализации (*.archive) подтянутся автоматически.
  • Можно работать. Для того чтобы изменения применились к строке нужно жать [Ctrl] + [Enter].
  • Сохраняем все опять в *.manifest, а все *.archive cохранятся автоматически.
  • После запускаем Unreal Engine и делаем Gather + Compile. И все 😊

Теперь о том как делать импорт и экспорт:

  • Не забываем в начале и в конце делать Gather + Compile в UE4.
  • Открываем *.manifest
  • Выполняем File -> Export… и выбираем в какой файл сохранить. Утилита не требует Excel, все происходит через библиотеку EPPlus 4.5.
  • Таблица разделена на 2 части: верхние строки редактируемые (номер и ID ессно трогать нельзя), а все что лежит после красной строки
    --== ! DO NOT translate THE TEXT BELOW ! == service DATA ==--
    трогать вообще нельзя.
  • Непереведенные ячейки будут красными, так их легко найти переводчику, особенно если это вторая или третья итерация перевода.
  • После экспорта, я советую отсортировать все строки (из редактируемой части ессно) по ID. У нас так хоть какая-то логика сохраняется в текстах и переводчику проще понять что к чему относится.
  • Отправляем на перевод и ждем…
  • После того, как придет результат, не забываем отсортировать строки обратно по номеру (#).
  • В программе выбираем File -> Import… и, если все было сделано правильно, то загрузится перевод. Можно включить «глаз» (Hide Translated) и пощелкать по различным локейлам, чтобы проверить переведены ли все строки.
  • Далее жмем File -> Save As… и выбираем ваш *.manifest. Все.

Исходный код и программа

Утилита написана на C#, требует. Net 4.0 и пару пакетов из NuGet (они подтянутся автоматически). Исходники можно забрать отсюда:

Периодически я делаю релизы. Просто скачиваем, распаковываем и пользуемся:

Программа тестировалась только на нашей игре. Поэтому 100% гарантии работоспособности дать не могу. Если будут ошибки, замечания или предложения — пишите. Если прога форматнет ваш диск, украдет все ваши сбережения или убьет кота, то я ни при чем 😊

Надеюсь, утилита будет полезна не только нам, пользуйтесь на здоровье! Всем бобра!

0
23 комментария
Популярные
По порядку
Написать комментарий...

Спасибо за утилиту. Хотя вот прямо сейчас у меня нет надобности ее опробовать, но в будущем очень даже вероятно, понадобится. Круто, что поделились.

9

В дополнение к статье, привожу ссылку на демо нашей игры (в ней сейчас 4 локализации). Локализацию на английский делали при помощи ребят из AllCorrect. Локализацию на китайский и немецкий нам делал издатель PQube. Во всех случаях мы использовали Excel файлики сгенерированные при помощи утилиты. Ну т.е. "обкатка боем" была.

7

Ух ты The Unexpected Quest, она у меня в вишлисте есть)
Когда выходит?

1

Клева :) Планируем в ноябре, но точно сказать не могу, так как дату устанавливает издатель.

1

Счастья и успехов вам

3

 а тот момент он даже в мультилайн не умел (баг?)

Я пытался это пофиксить. Лазял по сурсам часов 5 пока не нашел, где отрисовка этого бокса. Добавил макрос в декларации, чтобы бокс стал мультилайновым. Чуток потестил и радостно запушал им пулл реквест. Они тоже особо не смотрели и радостно смерджили. Потом вышла новая версия движка с моим мультилайном, а интерфейс стал дико глючить и разъезжаться при определенных условиях, которые я не углядел. Мне было кринжово, с тех пор не смотрел, что там. Но если мультилайна до сих пор нет, то это значит они откатили мои изменения, вместо того чтобы пофиксить.

Я еще пытался это пофиксить сам конечно. Со слейтом знаком, писал сложные едитор екстеншены когда эта возможность еще не была задокументирована. Так вот, нихера у меня не получилось. Код там **КРАЙНЕ** запутанный. Всё в макросах, ебнутом инхеритансе, каких-то байндингах через жопу и неадекватном слейте. Скорее всего, нужно переписывать большие куски кода. Джуном, и может даже мидлом, это не починить. Тут надо быть топовым в мире специалистом. Они у них есть, но им не до этого, видимо. Как же, надо срочно добавить новую совместимость с каким-нить телеком или чайником и поломать пару систем в процессе. ред.

3

В 4.23 вроде уже работает, но я тоже стараюсь туда не заглядывать. :) Даже чинить не пытался, потому что было понятно - через UE мы игру не локализуем. Был вариант выгружать все в PO формат, но я не нашел бесплатных и удобных редакторов. Да и ХЗ как разные студии переводчиков будут с ними работать: слова там подсчитать и т.п. В итоге вот и вышла эта утилитка.

0

Привет!

Спасибо, что раскрываете тему. Инфы по локе в UE явно маловато.

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

Посмотрел, однако, формат, который испольузется у вас в эксельке, и у меня вопрос: почему вынесли SERVICE DATA вниз таблицы отдельно? На это есть какие-то технические причины, которые я не улавливаю? Просто было бы куда лучше оставить эти данные в отдельных столбцах прямо в основной таблице: так контекст был бы виден переводчику сразу (Source Reference очень помогает при переводе, плюс по нему можно сортировать — и получать более-менее хорошую группировку строк), искать и фильтровать по нему (фильтрация по asset name или кусочку имени, например, очень помогает увидеть все строки, так или иначе связанные с одним понятием или ассетом), ну и так далее. Плюсов много, но есть один очень важный: если бы все метаданные были в той же таблице, что и данные, а не под ней, то файл стал бы совместим с CAT-программами — а все стоящие переводчики сейчас только в них и работают, прямо в файлах очень редко когда переводят, разве что мелочь всякую. То есть формат таблицы (навскидку) #, Namespace, ID, Source Reference, Comments, Source Locale, Target Locale #1, ..., Target Locale #N без «лишних» данных внизу был бы как минимум универсальнее, а на мой профессиональный взгляд попросту лучше во всех отношениях.

А как вы вообще с текстом работаете в игре? У вас текст прямо в ассетах сидит или в стринг тейблс? Если в таблицах, то это ассеты или CSV-шки? Вообще, я бы с радостью пообщался с вами — у меня нехватка знаний по Unreal Engine (информации о локе вообще немного, а уж о том, как люди реально работают с текстом в UE и того меньше), зато есть чем поделиться про локализацию (я 15 лет перевожу и 4 года управляю проектами по локализации). Если вам это интересно, давайте поболтаем :) 

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

1

Привет!
Если хочется пообщаться по поводу локализации в UE4, то пишите на мыло maltsevda@yandex.ru. А тут коротенько:
1. Формат проектировал так, чтобы локализатор работал только с нужной ему информацией. Все "лишнее" вынес вниз. Возможно кому-то эта информация нужна, но у нас ни разу ее не спрашивали.
2. Комменты к тексту - это очень полезная фича. Но на уровне локейлов UE4 ее нет. Можно добавлять комменты только к таблицам строк... вроде. Но как их удобно вытаскивать, я пока не понимаю. Возможно стоит расширять формат UE4 своим файликом. В общем проблема есть, но как ее решать, пока не задумывался.
3. В игре у нас все или в таблицах строк или в отдельном С++ файле. В ассетах только ссылки на таблицы строк. Хотя вру. Еще в Data Table могут быть строки в чистом виде. Раньше мы строки кидали как попало, но столкнулись с некоторыми проблемами и пришлось все аккуратно "разложить".
В общем если есть предложения или вопросы - пишите. Обсудим :)

1

Хай. Игра мне очень понравилась. Залип был в демку :)

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

1

За игру спасибо! Мы старались :)

По поводу тулзы. Нет она не дублирует функционал UE4. Через нее нельзя добавлять/удалять новые локейлы или строки, она не чекает ключи (раз это делает UE4 в момент Gather) и т.п. И уж точно ее не стоит отправлять локализаторам, лично я не знаю в чем и с чем они работают. Это именно способ конвертировать локейлы UE4 в распространенный формат (xlsx) и отдать его менеджеру переводчиков и далее самим переводчикам. В самой тулзе я делаю только мелкие правки: вставить запятую, пробелы и т.п.

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

0

Понял. Спасибо

1

Если помните ссылочку на статью о локализациях в UE4, плиз, скиньте сюда. Я добавлю ее в свою публикацию.

0

СПС, полезная штука, в хозяйстве пригодится,)

1

Спасибо, реально полезная штука если в проекте больше чем 10 строк с текстом на разных языках.

1

Благодарю, как раз встал вопрос локализации) 

1

Не совсем понял, чем это потенциально лучше того же LocDirect ред.

0

Ага, я тоже. А как оно работает?

1

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

2

Супер! Пользуйтесь :) Я просто не работал, поэтому сказать точно в чем разница с нашей утилитой не могу.

2

Да давайте прямо тут пока и продолжим ветку про несекретное. На почту, впрочем, тоже напишу :)

1. А большинство переводчиков и компаний даже и не знают, что в UE можно подсмотреть в название ассета и внутренний путь к элементу в нем. Если в файле нет, то и не догадаются.

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

2. Комменты можно добавлять в таблицах строк, но... не в самом редакторе строковых таблиц в UE! Он этого не поддерживает. Можно экспортировать в CSV, добавить сколько угодно столбцов, накидать туда комменты, теги, контекст, да что угодно. Импортировать это обратно — и оно сохранится. Но вы этого не увидите и не сможете изменить или добавить прямо в UE. При том, что вообще-то сама суть и UI для работы с подобного рода таблицами в UE есть. На мой взгляд, это лишний раз убеждает, что сам эпик не пользуется редакторами строк в UE... Подозреваю, у них просто есть какие-то свои плагины/надстройки для редактора по работе с текстом и локой. С тем, что есть в редакторе по умолчанию, работать над проектом типа Фортнайт просто невозможно: слишком много и часто они релизят контент. Возможно поэтому лок дашборд и висит в статусе Experimental уже много лет и ничего там кроме как по острой необходимости не меняется.

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

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

(Кстати, вот хоть убей, но не понимаю, почему эпики сделали строковые таблицы бинарными. А главное зачем... Почему не текст?..)

0
Читать все 23 комментария
null