BlueWinds / CustomLocalization

CustomLocalization

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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» будет предложено выбрать файл в который необходимо сохранить результаты. Если файл уже существует, его содержимое НЕ будет перезаписано, он будет дополнен. Если файл не существует он будет создан.

About

CustomLocalization

License:MIT License


Languages

Language:C# 100.0%