Git Product home page Git Product logo

customlocalization's Introduction

CustomLocalization

Этот мод предназначен для облегчения локализации модов и модпаков Battletech.
Он содержит библиотеку, модифицирующую строки во время работы игры и две утилиты.
Первая утилита предназначена для переводчиков модов в случае если автор мода не может/не хочет модифицировать свой мод и подготавливаться его для перевода.
Вторая утилита предназначена для развертывания перевода модов авторы, которых не могут/не хотят подготавливать их для перевода.

Что послужило причиной создания данного мода? Немного основ: судя по всему, HBS при разработке игры не предполагала ее хоть сколько-нибудь значительной популярности, в том числе у не англоязычного игрового сообщества. Поэтому они архитектурно не заложились в локализацию. В результате, когда у площадки, через которые происходило распространение, потребовали локализацию у них остались только две возможности: подвергнуть код и ресурсы значительной модификации или сделать что-то ужасное. К сожалению, они выбрали второй путь. Локализация в игре, с точки зрения кода, выглядит так – для каждого поддерживаемого языка загружается таблица с огромным количеством регулярных выражений – количество соответствует количеству разнообразных строк в игре. Перед каждым выводом на экран каждая строка прогоняется через эту таблицу на предмет совпадений и если совпадение найдено строка меняется на локализованный вариант. Очевидным (пожалуй, единственным) плюсом этого варианта является отсутствие необходимости в многочисленных модификациях кода и ресурсов (пусть и мелких) и отсутствие необходимости в отслеживании, того везде ли были применены изменения. Минусов больше. Некоторое падение производительности (прогон строки перед выводом через 100500 регулярок) сглаживается высокой производительностью современных процессоров и относительно небольшим количеством текста в игре. Главный минус в утрате контроля того что и как нужно переводить. Три примера – я дал своему альтер-эго позывной MiSSioN, к сожалению, эта строка попала под одно из регулярных выражений. В половине случаев он был, как и задумывалось MiSSioN, а в половине (особенно в диалогах) его стали называть «Задание». Второй пример неприятнее – есть слово close, оно с одной стороны может обозначать расстояние close range (близкое расстояние) с другой стороны действие close the door (закрыть дверь). Из-за того что при применении регулярного выражения информации о контексте уже нет на русском при описании радиуса действия вооружения для оружия малого радиуса действия мы получаем в лучших традициях руссЕфикаций «дистанция: закрыть». Все потому что где-то в другом месте close надо переводиться именно как «закрыть», а регулярное выражение одно. Если его поменять будет «дистанция: малая», но в другом месте появится «малая дверь». И это принципиально невозможно исправить с таким подходом. Третий пример самый страшный – у мехов и техники есть так называемые тэги, которые могут использоваться для определения может ли данная техника использоваться в данном задании (со стороны ИИ). Если модер определит для контракта свой набор тэгов и один из этих тэгов попадет под регулярное выражение – пиши пропало – вместо противников будут мехи «Report me». Это особенно часто проявлялось в RogueTech в силу того что этот модпак особенно активно использовал данный механизм (это правда было исправлено в последних версиях с помощью костыля запрещающего переводить тэги). Еще один минус в том, что такой механизм перевода очень неудобен для модеров и переводчиков. Файл, содержащий регулярные выражения один и нет механизмов позволяющих его сделать модульным, т.е. совместить несколько файлов перевода из разных модов. Сложность написания регулярных выражений так же не способствует тому, что бы модеры занимались переводом даже при наличии желания. Данный мод создан для того что бы хотя бы отчасти решить проблему с локализацией модов. Как делают перевод классически – везде, где встречается строка, которая должна быть локализована, помещают не саму строку, а ссылку на нее в таблице локализации. При выводе такая строка заменяется реальным значением в зависимости от текущего языка. Данный мод делает следующее – подгружает в память таблицу локализации из файлов вида Localization.json, которые он рекурсивно ищет в директории Mods. Причем, результирующая таблица является результатом объединения этих файлов – локализция одной и той же строки для разных языков может содержаться в разных файлах. Все выводимые строки сравниваются с шаблоном “//” , если RefID существует в таблице локализации, то осуществляется замена содержимого. Основная проблема в том, что мод который подвергается такой локализации должен быть либо создан с учетом этого или подготовлен соответствующим образом – все выводимые строки в моде должны быть заменены на “//” и подготовлен Localization.json. Для этого созданы утилиты CustomLocalizationPrepare и CustomLocalizationSetup. Первая предназначена для переводчиков – она позволяет выбрать мод/моды и их элементы, которые будут подвергнуты обработке. В результате работы утилиты выбранные строки модов будут заменены на ссылки на таблицу локализации и будет создана первоначальная таблица локализации для выбранных языков. Вторая утилита CustomLocalizationSetup необходима тем, кто собирает моды в пакет. Она подгрузит текущую локализацию и пройдется по всем модам в директории Mods, если в ресурсах мода содержатся строки из таблицы локализации, они будут заменены на ссылки на таблицу локализации. Локализация может повлиять на работоспособность модов, по этому необходимо что бы был выбор – локализовывать их или нет.

CustomLocalizationPrepare После запуска надо нажать на кнопку «>» и выбрать базовую директорию игры. В левом списке появится список распознанных модов. В центральном окне, можно выбрать какие элементы мода надо подвергнуть обработке. В правом перечень языков которые должны быть включены в файл. При нажатии на кнопку «Prepare selected mods» будет предложено выбрать файл в который необходимо сохранить результаты. Если файл уже существует, его содержимое НЕ будет перезаписано, он будет дополнен. Если файл не существует он будет создан.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.