Идея о том, чтобы делать локализацию для разрабатываемых игр при помощи Google Translate, Deepl, или любого другого электронного переводчика, не нова — машинный перевод обходится в разы дешевле, чем работа специалистов, и делается гораздо быстрее.
Однако, его слабость очевидна — перевод всегда пестрит изъянами, неточностями, и в целом — углепластиком.
Крылатые выражения, сленговые фразочки — современный Google Translate хоть и может их перевести, но он всё равно не сможет правильно вписать их в контекст вашего сценария/интерфейса игры.
И, в свою очередь, из‑за невозможности сделать качественный машинный перевод, множество инди‑разработчиков, и просто низкобюджетных студий, теряют большое количество игроков.
Данная статья написана для того чтобы исправить ситуацию, и рассказать о том, как можно получить качественный машинный перевод, используя ChatGPT.
Это позволит нам не только лучше сохранить смысл ваших текстов, но и передать контекст для перевода - жанр игры, лор, характеры персонажей, и всё-всё-всё остальное.
Содержание статьи:
1 - Нам нужна таблица!
В целом, метод может быть использован с любой системой локализации, или даже без неё — закидывайте фразы в ChatGPT вручную, и спрашивайте перевод — получится неплохо.
Но мы здесь говорим об удобном, системном, и не сильно сложном способе — поэтому работать будем с Google Sheets.
Большинство движков, поддерживающих локализацию, с большой вероятностью поддерживают и экспорт всех данных перевода в таблицу. Вот ищите эту фичу у своего движка, и закидывайте полученные данные на гуглодиск.
В Unity, с пакетом Unity Localization, таблицу можно экспортировать сразу в Google Sheets при помощи специальной опции:
2 - Устанавливаем расширение и настаиваем ключ
Если ваша таблица локализации уже готова, то следующий этап — установка расширения для Google Sheets, которое будет связываться с OpenAI API, и запрашивать перевод ваших данных.
Тут ничего сложного — просто переходим по ссылке (Google Workspace Marketplace), и нажимаем — «Установить».
После чего идём к нашей таблице в Google Sheets -> Расширения -> GPT for Sheets and Docs -> Set API key
Соответственно, делаем себе API ключ на https://platform.openai.com/account/api‑keys.
Если у вас нет аккаунта OpenAI — заводим оный. Но понадобится номер телефона не из РФ.
Ключ засовываем в предназначенное для него поле:
Когда всё будет готово - жмём "Save API key".
Дальше идём в Расширения -> GPT for Sheets and Docs -> Enable GPT functions,
и на этом менюшку можно закрывать. ????
3 - Переводим! - Базовая формула
Бозовый принцип в следующем — взять клетку, положить в неё формулу, и растянуть до самого низа вашей таблицы. Всё.
Сама формула следующая:
=GPT_TRANSLATE(<текст или номер ячейки>; <Язык, в который переводить>; <Язык, из которого переводить>; <контекст>)
<Язык, в который переводить>
— наименование языка в любом формате. Я обычно пишу «en»(Английский), «zh‑CH»(Китайский урощённый) и т. д.<Язык, из которого переводить>
— то же самое, что и выше, но здесь указываем наименование языка оригинального текста.<контекст>
— контекст запроса на перевод, о нём в следующем блоке.
В собранном виде выглядит так:
=GPT_TRANSLATE(A1; "zh-CN"; "en"; "Text from medieval Action-RPG game localization table")
В результате, в клетке появится перевод нужного вам текста, на нужный вам язык.
4 - Переводим круче - Задаём контекст
Сейчас перевод уже будет лучше, чем перевод из Google Translate. Но мы ещё даже не задействовали поле<контекст> нашей формулы.
Сделайте отдельную ячейку где‑нибудь на задворках, и напишите туда общий контекст вашей игры. Что‑то вроде "Это таблица локализации игры в жанре Стратегия, в которой игрок - вечно пьяный и злой генерал Иван Иваныч. Он сражается против армии Эдуарда Рафаэлло - добродушного мужчины с итальянским акцентом".
И можете скормить адрес этой ячейки в нашу формулу, на место <контекста>
— нейросеть начнёт учитывать контекст вашей игры при переводе. Она будет понимать, что опечатки в речи Ивана Иваныча — это не ошибки, а пародирование речи пьяного человека, а Эдуард — итальянец.
Если для вашего проекта это важно, то можете дописать "Если в оригинальном тексте есть рифма, то постарайся соблюсти её и в переводе"
— но результат будет, конечно, хуже, потому что ChatGPT хоть и хороший инструмент, но не магический.
Но и на этом всё не заканчивается, потому что в контекст также можно включить комментарии к ключам. Знаю, что вообще не у всех инди-разработчиков есть колонка с комментариями, но для больших проектов, локализация которых идёт на аутсорс, колонка с комментариями почти всегда присутствует:
=GPT_TRANSLATE(<текст или номер ячейки>; <Язык, в который переводить>; <Язык, из которого переводить>; CONCATENATE(<общий контекст, ячейка>; " "; <ячейка с комментарием>))
И теперь, если у строки есть комментарий, нейросеть также будет учитывать и его! Это позволит нам добиться ещё большего качества перевода.
5 - Стоимость и качество
Итого, на перевод 3000 строк с английского на упр. китайский с помощью ChatGPT было потрачено не больше 5$, тогда как студия по локализации запросила >500$. На самом деле мы и отдали $500 баксов, потому что на тот момент я не додумался о переводе через ChatGPT ????
По качеству перевод через нейросеть, безусловно, уступал переводу от студии. Но разница была не на уровне "Небо и земля".
Если перевод от студии получился хороший со знаком плюс, то перевод от ChatGPT получился просто приемлимым, а также понадобилась пара часов на довольно банальные правки, которых было штук 30 на весь столбец из 3000 строк. И без которых всё в том числе выглядело бы нормально.
Если большие и средние студии разработки могут позволить себе большие траты на перевод, то товарищи индюки, на которых вся индустрия по сути и держится - нет.
И я считаю, что получаемое качество перевода с помощью нейронки - очень даже оправдывает затраты на токены OpenAI. $5 против $500 - разница в 100 раз, конечно оправдывает блин!
6 - Итог
В первую очередь, важно помнить, что каким бы удобным и выгодным не был данный способ — он всё равно не скоро заменит качественный человеческий перевод, сделанный «с заботой о продукте».
Надеюсь, что я помог кому‑то с успехом его будущего проекта. ????
Если у вас есть какие-то вопросы, или нужна помощь - я всегда рад помочь. Обращайтесь!
Мой телеграм-канал, в котором могут быть дополнительные материалы и новости по теме статьи.
Комментарии (6)
dimitrii_z
11.07.2023 10:13+2Статье плюс, опыт интересный. Но у вас простой случай рассмотрен. В строках может быть (и должно быть) большое количество констант, которые подставляются как переменные. Например, имя вашего персонажа, название местности и т.п., чтобы где-то не ошибиться в написании, например.
Тогда будет полезно добавить в промпт фразу типа "Сохрани в переводе исходное форматирование текста.". Также могут быть случаи неестественного для целевого языка порядка слов - надо добавить фразу "Используй для целевого языка естественный для него порядок слов.".
Вообще есть интересная статья про подбор промпта, люто бешено рекомендую https://habr.com/ru/articles/734954/
Judge_Solomon
11.07.2023 10:13Не раз задумывался, как выпускать игры на Unity на других языках. Идея, столь любимая китайскими разработчиками, использовать autotranslator - мне не особо нравилась. А вот нейронка - это хороший выход. Спасибо.
saboteur_kiev
Вроде гугл транслейт переводит не так плохо, как на вашем скриншоте.
Но я согласен, что чатГПТ лучше переводит в контексте
ligofff Автор
Насчет гугла я заметил такое, что он немного по-разному переводит в таблицах и на сайте.
И вот конкретно в таблицах получается больше бреда.
Car3man
Гугл меняет смысл от наличия заглавной буквы.
По своему опыту яндекс переводчик справляется с задачей перевода намного лучше.