Перейти к содержимому
Zone of Games Forum

Рекомендованные сообщения

144926-1.jpg

Товарищ Sneaksie выпустил русификатор для приключенческой игры Heaven’s Vault.


Товарищ Sneaksie выпустил русификатор для приключенческой игры Heaven’s Vault.

144926-1.jpg

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

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

Цитата

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

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

 

143903-3530689177_preview_1.jpg

143903-3530689177_preview_3.jpg

143903-3530689177_preview_2.jpg

143903-3530689177_preview_4.jpg

143902-3530689177_preview_5.jpg

143902-3530689177_preview_6.jpg

Поделиться сообщением


Ссылка на сообщение

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

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

Изменено пользователем 0wn3df1x

Поделиться сообщением


Ссылка на сообщение

@0wn3df1x геморрой, потому что нет нормальных ответвлений диалога для удобного перевода или там геморройно извлечь текст и запихнуть его обратно?

  • Лайк (+1) 1

Поделиться сообщением


Ссылка на сообщение
3 часа назад, Sudakov Pavel сказал:

@0wn3df1x геморрой, потому что нет нормальных ответвлений диалога для удобного перевода или там геморройно извлечь текст и запихнуть его обратно?

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

Первое и главное, что нужно понимать: Inkle - это не классическое диалоговое дерево “выберите вариант А, получите ветку А”. Inkle ткёт повествование из мелких фрагментов текста, переменных, функций и логических условий. Переводчик видит не цельные, готовые к переводу предложения, а их составные части - по сути, сырье, из которого движок будет склеивать финальный текст на лету. Это больше похоже на работу с ассемблером для текста, чем с привычными строковыми ресурсами. Как программист на ассемблере должен знать архитектуру процессора, так и локализатор Inkle обязан понимать внутреннюю логику его нарративной виртуальной машины.

К примеру, возьмём игру The Pale Beyond и её текстовый ФАЙЛИК на 33 мб.

Там есть функция ShortSentenceDeadClickTest:

"ShortSentenceDeadClickTest": [
    [
      "ev", "str", "^x", "/str", "/ev", { "temp=": "Xstring" },
      "ev", "str", "^y ", "/str", "/ev", { "temp=": "Ystring" },
      [
        "^Loop ", "ev", { "CNT?": ".^" }, "out", "/ev",
        "^. String X ", "ev", { "VAR?": "Xstring" }, "out", "/ev",
        "^. String Y ", "ev", { "VAR?": "Ystring" }, "out", "/ev", "\n",
        // ... логика выбора ...
        "ev", { "VAR?": "Xstring" }, "str", "^x", "/str", "+", { "temp=": "Xstring", "re": true }, "/ev",
        // ...
        "ev", { "VAR?": "Ystring" }, "str", "^y ", "/str", "+", { "temp=": "Ystring", "re": true }, "/ev",
      ],
    ],
]

Это квинтэссенция подхода Inkle. Там нет диалогов в привычном понимании. Это низкоуровневый программный код. Команды ev (evaluate), str (string), VAR? (get variable), out (output), temp= (assign to temporary variable), re= (reassign) - это инструкции для виртуальной машины движка. Этот код инициализирует две переменные и в цикле (CNT? - вероятно, счетчик цикла) конкатенирует (оператор +) к ним новые символы.

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

Так вот, раз уже я начал о конкатенации и связанном с ней грамматическом аде.

Конкатенация (простое склеивание строк) является в Inkle основным инструментом повествования. И именно в ней кроется дьявол для флективных языков, порождающий каскадные грамматические зависимости.

Гипотетический пример на английском:

itemCount = 1, itemAdjective = "red", itemName = "apple" -> "You have 1 red apple."

itemCount = 5, itemAdjective = "red", itemName = "apples" -> "You have 5 red apples."

Всё просто. Сценарист готовит две формы существительного и одно прилагательное.

Тот же пример, но на русском:

"У вас есть " + itemCount + " " + itemAdjective + " " + itemName + "."

itemCount = 1, itemAdjective = "красное", itemName = "яблоко". Получаем: «У вас есть 1 красное яблоко».

itemCount = 2, itemAdjective = "красных", itemName = "яблока". Получаем: «У вас есть 2 красных яблока».

itemCount = 5, itemAdjective = "красных", itemName = "яблок". Получаем: «У вас есть 5 красных яблок**_**».

Прилагательное “красный” и существительное “яблоко” меняют свои окончания в зависимости от числа itemCount. Причем правила для 1, 2-4 и 5+ разные. Движок этого не знает. Он просто подставит переменные. Локализатору нужно переписать всю эту строку в отдельную функцию с громоздкой логикой. А теперь представим, что таких переменных в игре тысячи, и они могут быть не только предметами, но и статусами, именами, локациями.

Вот реальный пример из функции GetWeeklyTitleCardTextSubtitle:

"GetWeeklyTitleCardTextSubtitle": [
    // ...
    "ev", "str",
      "ev", { "VAR?": "TERRITORY_0_WEEKSHERE" }, "out", "/ev",
      "^ Week",
      "ev", { "VAR?": "TERRITORY_0_WEEKSHERE" }, 1, ">", "/ev",
      [ { "->": ".^.b", "c": true }, { "b": [ "^s", ... ] } ],
      "nop",
      "^ on the Temperance.",
    "/str", "/ev",
    "~ret",
    // ...
],

Этот код генерирует фразу типа “1 Week on the Temperance”. Логика примитивна: если переменная TERRITORY_0_WEEKSHERE больше единицы, то с помощью условного перехода { "->": ".^.b", "c": true } (по сути, goto) добавляется строка ^s. Команда ~ret означает, что эта собранная строка возвращается как результат функции. Куда? Возможно, она будет подставлена в другую строку, создавая новый виток грамматического ада.

Переводчик видит три изолированных куска: [число], Week, on the Temperance.
На русском это превращается в неразрешимую задачу: 1 неделя, 2 недели, 5 недель. Просто добавить окончание невозможно. Нужно полностью переписывать эту функцию на уровне кода.

И так - везде. Каждая такая строка - это мина замедленного действия.

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

Пример с родом:

"The " + objectName + " is broken."
  • objectName = "Engine" (двигатель, мужской род) → Двигатель сломан.
  • objectName = "Radio" (радио, средний род) → Радио сломано.
  • objectName = "Door" (дверь, женский род) → Дверь сломана.

Прилагательное “broken” в русском языке должно согласовываться с родом существительного. Переводчик видит строку " is broken" в отрыве от objectName. Он не знает, к чему она будет применяться. Единственный выход - создавать для каждого объекта метаданные (например, его род), а затем вместо простой строки " is broken" писать целую функцию, которая будет запрашивать род объекта и возвращать правильную форму прилагательного: “сломан”, “сломана” или “сломано”. Это уже не перевод, а программирование.

Вот, например, функция listSurnamesWithCommas.

"listSurnamesWithCommas": [
    { "temp=": "if_empty" }, { "temp=": "list" },
    "ev", { "VAR?": "list" }, "LIST_COUNT", "/ev",
    [ "du", "ev", 2, "==", "/ev", { "->": ".^.b", "c": true },
        { "b": [
            "pop", "\n",
            "ev", { "VAR?": "list" }, "LIST_MIN", { "f()": "CrewNameToSurname" }, "out", "/ev",
            "^ and ",
            "ev", { "VAR?": "list" }, { "VAR?": "list" }, "LIST_MIN", "-", { "f()": ".^.^.^" }, "out", "/ev",
            // ...
        ]}
    ],
    // ...
],

Этот код берет список фамилий и красиво форматирует его в строку: "Smith, Jones and Williams". Он просто вставляет запятые и слово "and". А теперь представим, что нам нужно сказать не “Вот Смит и Джонс” (Именительный падеж), а “Я вижу Смита и Джонса” (Винительный падеж) или “Я говорю со Смитом и Джонсом” (Творительный падеж). Переводчик не может просто перевести "and" как "и". Ему нужно знать падеж, в котором будут стоять все эти фамилии, и создать отдельную функцию для каждого падежа.

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


Короче говоря, ад Inkle для локализации заключается в том, что:

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

Вот такие пироги. Вот такая красота:
JVmD7rZ.png

Изменено пользователем 0wn3df1x
  • +1 3

Поделиться сообщением


Ссылка на сообщение
22 часа назад, 0wn3df1x сказал:

Короче говоря, ад Inkle для локализации заключается в том, что:

Да уж, вероятно это надо ОЧЕНЬ сильно любить эту далеко не самую известную и мягко говоря не самую популярную (даже в узких кругах) игру.

Но сугубо объективно — мое почтение. Локализатор реально сверхчеловек. :)

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас популярно

    • 22 459
  • Продвигаемые темы

  • Последние сообщения

    • Да машинные сейчас в целом норм, но странно, что с ЗОГа никто не сделал свой машинный и не раздал его, если ее перевели, значит инструментарий есть. По факту самое сложное — распаковать, внедрить текст, и запаковать, чтобы ничего не отвалилось. Перевести нейронкой — много ума не надо, только железо нормальное То, что он продается — вообще вопрос спорный, ладно когда у тебя его реально люди переводили, вычитывали и т.д. А так — ну собери донатами, кто хочет заплатит, остальным раздай. Ибо юридически ты нихера не создал, а все, что создалось — создала нейронка. Ну технарям за инструментарий, конечно, заплатить можно
    • Эх, я бы забрал  Демка Русской Готики доступна всем: https://store.steampowered.com/app/3708420/Of_Ash_and_Steel_Demo/
    • C предком этой игры − Tactics Ogre: Reborn, ровно та же ситуация. Есть переведённая версия для Сеги Сатурн. Кто то уже научился работать с архивами для ПК версии. Но вместо того, что бы сделать нормальный перевод, продаётся машинный.
    • Так пусть делают как хотят, не нравится игра так и все равно… мне вот графика там вообще не мешает. И кстати в данном случае, это как Брат, который снят очень дешево, но не перестал быть отличным фильмом, но вы же сами не знаете что там за наполнение, но отлично рассуждаете о том, что такое позорище, сейчас я про вторую часть, про третью никто не знает.. пока. Дешевая графика это не всегда плохо и примеры я не просто так приводил.  А миллиард им не нужен, нужен бы был, я бы порассуждал, про Смуту все понятно, эффективно освоили деньги, вот и все… Я все это перечислял к тому, что такие игры тоже есть и не надо тут мне рассказывать, что это ностальгия, это дешево и очень дешево, вот и все. А ностальгия это отмазка! Т.е все так делают, а вопросы возникли только к русскому геймдеву, серьезно? Потому и написал, я и не русские игры с такой графикой постоянно вижу и не о всех могу плохо отозваться...
    • По нужде и не в такие подворотни не зайдешь.  Когда они АН эксклюзивно выкупали, и подобные фантазии высказывали.
    • А почему тогда atomic heart, для снг продаётся только там, если они не конкуренты, дали бы возможность всем желающим купить игру в стиме, но нет, загоняют в “отечественный” сервис.
    • Он здесь при том, что стоит на месте. Миллиард нужен? Пример смута. Позорище. Как там было? Ответ ведьмаку? Это как ответ мстителям от наших супергероев, не помню название фильма, где медведь… Аналогичное позорище. Причем тут наполнение? О нем не писал. Я не играл, не могу судить о наполнении. Зато могу сказать об визуале в 2025. Это ваша не 1 игра, ну почему такое все буратиновское? Многие делают пиксельные, и что? Там это сделано специально, типа ностальжи, хоть иногда и перегибают с этим палку. Причем тут 2д? Причем тут изометрия? Я что то об этом писал? Нет. Это ты уже жанры хз для чего пречислил. Да, читал что то про это, порезана, отдельно купи, но сильно не углублялся, не слежу за игрой.
    • Потому что: С эмулятором нужно возиться (стабильно работает только в Цитроне и то с подкруткой настроек + скачай ключи, прошивку, перепакуй nsp в nsz, а там опять ключи) Там ниже разрешение (скейлится плохо она) В стиме есть ачивки Потратил 4к рублей Судя по всем, мы знаем в каком файле текст, судя по всему игра поддерживает кириллицу, судя по всему есть готовый инструментарий для распаковки\запаковки, судя по всему люди готовы скинуть файлы и оттестить собранные, но судя по всему нет желания
    • Но лучше установить русик в пустую папку,например в C:\Dune 2000.Там будут папки MOVIES,Data\GAMESFX и ENPY,в ENPY папке находится унинсталлер.Папку C:\Dune 2000\MOVIES кидаем в  Dune2000_Online\Data\MOVIES с заменой затем содержимое папки C:\Dune 2000\Data\GAMESFX кидаем в Dune2000_Online\Data\GAMESFXRus так же с заменой.
    • ну так вк плей и не позиционировал себя как конкурент стиму)
  • Изменения статусов

    • Jimmi Hopkins  »  SerGEAnt

      Добавились версии для Linux и MAC OS
       
      · 0 ответов
    • Jimmi Hopkins  »  SerGEAnt

      Прошу обновить файл в архиве на https://disk.yandex.ru/d/suqA593ocxIJTQ
      или https://boosty.to/jimmihopkins/posts/d1df8532-9ac5-4a23-a87c-df2610efaf26
      Финальный релиз.
      Значительные изменения
      · 0 ответов
    • ElikaStudio

      https://www.youtube.com/watch?v=Nqcr83D8xhw
      https://www.youtube.com/watch?v=yRh3i7FKwOQ
      https://vk.com/video-48153754_456239346
      https://vk.com/video-48153754_456239345?list=ln-xnLZUtIyCEc6eshGvW
      https://ibb.co/p6BtMqWQ
      Перед тем, как ступить на борт корабля капитана Синей Бороды, нужно скачать озвучку!

      Life is Strange: Before the Storm:
      Эпизод 1: "Прoбуждeниe"
      Эпизод 2: "О дивный новый мир"
      Бонусный эпизод: "Прощание"
      Русская озвучка уже доступна для скачивания!

      ElikaStudio выражает огромную благодарность всем, кто принял участие в создании проекта! 
      Группе [club76249462|Mechanics VoiceOver R.G. MVO] , в частности их руководителю Дмитрию за неоценимую помощь в выпуске эпизода.

      Скачать для PC Classic (2018):
      GDrive: - https://drive.google.com/file/d/19CL_L80Mz0sIxcb54Ss64byAkeZmV22r/view?usp=sharing

      Скачать для PC Remastered (2022):
      GDrive: - https://drive.google.com/file/d/13q58Lpvw5_aYPYeZ7OGYZlAKOoS1gEbL/view?usp=sharing

      Скачать для Свитч(2022):
      GDrive: - https://drive.google.com/file/d/15e—T1LQiGQCYIHeNnj_C2qJA16Gvh1i/view?usp=sharing


      Баг репорт в обсуждении:
      https://vk.com/topic-48153754_52801766
      ___________________________________________
      Финансовый аппарат:
      www.donationalerts.com/r/elikastudio
      Пожертвовать средства на наши проекты:
      Кошелек ЮMoney 4100 1188 6818 3009
      карта Сбер банк 2202 2018 6334 1042
      карта Альфа банк 5559 4937 0209 8584
      Спасибо за вашу поддержку!
      #elikastudio #waylandteam #русскаяозвучка
      · 0 ответов
    • Максименко Вадим  »  jk232431

      Как перевести субтитры в winx club the game,а то у меня не получается выходит ошибка?
      · 0 ответов
    • Jimmi Hopkins  »  SerGEAnt

      Вышел русификатор для Knights and Bikes (текст и текстуры) steam/gog совместимый
      · 0 ответов
  • Лучшие авторы


Zone of Games © 2003–2025 | Реклама на сайте.

×