Решил ещё поковырять аддоны на предмет поиска хороших примеров. В итоге увлёкся и потратил несколько вечеров. И вот что по итогу:
1) Для перевода Library OXP мне пришлось делать то, чего опасался больше всего - переопределять методы. Это всё равно лучше, чем создавать отдельный русифицированный аддон, т.к. большая часть кода дополнения не затрагивается, но всё равно требует тщательного отслеживания изменений в случае обновлений оригинальных дополнений.
2) Понял, что в shipdata.plist, несмотря на название, указываются конфигурации вообще любых типов игровых объектов, как то корабли, астероиды, станции и т.д. Захотел перевести названия остальных объектов...
3) ... но в коде Library OXP заметил в паре мест, что есть проверка на то, не пристыкован ли сейчас корабль к Rock Hermit. Да, проверка делалась именно по имени, а не по уникальному ключу. Оказалось, что для объектов станций просто не предусмотрено наличие соответствующего свойства или возвращающего этот ключ метода, хотя для тех же объектов кораблей почему-то есть ключ dataKey. Это порождает очевидную проблему: какое бы то ни было изменение имён объектов может сломать код того или иного аддона.
4) В одном месте Library OXP, а именно в Lib_PAD_Events.js в методе playerCompletedContract происходит формирование строки с подстановкой в неё значения аргумента result. Проблема в том, что этот аргумент хоть и получает некую строку, но это всего лишь код - она не предназначена для вывода и не подлежит локализации. Из-за этого мне пришлось дополнить код метода (сделал это довольно топорно - через вложенные тернарные операции, - только ради максимального сохранения изначальной структуры метода).
5) В missiontext.plist были ещё тексты ошибок, но я решил их не переводить. Мотивация: с оригинальным описанием ошибки будет проще добиться помощи от других игроков и автора аддона в частности. По той же причине не занимался переводом логов.
6) По ходу дела ближе ознакомился с изначальным переводом ванили - очень много отсебятины. Так, лобстеры превратились в омаров и крабов, а миры (worlds) - в колонии. При этом техническая сторона, а именно приколы связанные с разными склонениями, выполнена отлично, видно, что человек заморочился. В любом случае, перевод требует вычитки, причём при прямом сравнении с оригиналом - а там более 2000 строк...
Вот ссылка на мои варианты русификаторов, там я ещё приложил русификатор FPO Zaonce.
https://disk.yandex.ru/d/3IrvCRoQJ5h-SgВ виду вышеизложенного, есть пожелания авторам аддонов (потом на англоязычном форуме продублирую):
1) Избегать объявления строк внутри методов;
2) Если такие строки не являются некими изменяемыми значениями, то их стоит хранить в missiontext.plist, получать в коде их можно глобальной функцией
expandMissionText();
3) Если есть строки, в которые нужно подставлять какие-то значения, то их так же целиком выносить в missiontext.plist, а подставлять значения с помощью expandMissionText(). При чём так стоит делать даже в том случае, если строка целиком состоит из таких вот значений - это обеспечит гибкость для локализации;
4) По возможности избегать подстановки неподдающихся локализации строковых значений (пример выше с playerCompletedContract).
--------------------------------------------------------------
Krager:
Я так понимаю нужно вынести переводимые слова в отдельный файл и далее работать с переводом только в нём. С таким подходом, если начать однообразно переводить дополнения, можно будет в будущем включить в основную игру переключатель языка, который будет это всё подхватывать.
В идеале было бы так. Но боюсь, что это у разработчиков не в приоритете, как минимум потому что нужно заботиться о сохранении совместимости со старыми форматами. С другой стороны, при помощи имеющегося инструментария отдельным дополнением уже можно делать полноценную локализацию. Главное, чтобы разработчики аддонов придерживались способствующего этому подхода.
Krager:
Может есть какая-либо программа, которой скармливаешь файл, а она на его основе создаёт -overrides, в котором потом и заниматься переводом? Чтоб не покоцать сами скрипты.
Где-то встречал утилиту, которая для какого-то файла могла производить конвертацию из старого формата (как в equipment.plist) в новый (как в equipment-overrides.plist). А вот для этих файлов такого не находил. Но там не сложно - по описанию файлов на вики и по моим примерам общий принцип должен быть примерно понятен.
Krager:
По поводу очерёдности загрузки вообще озадачили. Тут уже надо уметь программировать и разбираться досконально в написанных, добавленных модулях. Я пока могу только методом тыка. Добавил - посмотрел. Переместил - посмотрел. Тут вообще надо отдельно человека чтоб занимался логикой очерёдности загрузки, чтоб максимально интегрировались дополнения друг с другом, или идти по методу пакетов.
С очерёдностью я к счастью столкнулся сразу же - когда попытался использовать русифицированный BGS. У меня так же установлено одно из дополнений, которое в числе прочего заменяет картинку фона в главном меню. Так вот после твоего BGS (а оригинальный я временно удалил) фон из того аддона пропал.
К слову, очерёдность так же желательно соблюдать у скриптов в самом аддоне - они прописываются в конфиге world-scripts.plist.
Krager:
Хотя с манефестом спорный вопрос, иногда описание с манифеста выводиться на экран и лучше она будет на русском.
Скорее всего это описание не манифеста, а скрипта (хотя часть значений по-умолчанию он берет из манифеста). Тут так же нужно учесть, что если в аддоне несколько скриптов, каждый из них может содержать ряд свойств со своими значениями
https://wiki.alioth.net/index.php/Oolit ... properties.
Krager:
Насчёт названий техники я с вами не соглашусь, кто знает английский, тому и перевод не нужен. А мне например лучше видеть название "Удав", а не "Boa" или "Гадюка", а не "Adder". Так что тут уже индивидуальные предпочтения.
Я бы предложил компромиссный вариант: указывать переведённое название в скобках (
примечание переводчика). Но в любом случае, в виду изложенных выше причин лучше пока избегать каких либо правок названий кораблей, станций и т.д. - это может ломать логику тех или иных аддонов.
Krager:
Как к стати и "Ведьмино пространство". Так как "Ведьма" у меня ассоциируется только с девкой на метле и при чём тут космос не понятно. Так что на счёт антуража не согласен, я вырос на Элите Владимира Кладова (31.03.95), в которой вообще перевода не было.
Уверяю, у англоязычных игроков и авторов аддонов ровно те же ассоциации

Тем не менее, отказываться от него они не спешат. Опять же, можно примечание переводчика в скобках оставлять.
Но вообще, пока я делал свои варианты русификаторов, то пришёл к более универсальному подходу к переводу. Основная проблема с переводом Оолиты в том, что это не законченное произведение -- сама игра постоянно развивается, иногда появляются новые (а возможно изменяются старые) тексты, но самое главное, что постоянно обновляются и создаются новые аддоны со своими текстами. Из-за этого по ходу перевода ты никогда не знаешь, какой смысл будет вложен в тот или иной термин в будущем, не говоря уже о том, что вряд ли тут кто-то будет заниматься предварительной вычиткой всего текста на английском для формирования какого-то словаря терминов, а будет просто переводить по ходу дела. И если какой-то термин будет переведен некорректно, то встретив далее его использование с другим смыслом может потребоваться либо как-то изощряться для сохранения смысла, либо выкинуть этот кусок текста, либо перелопачивать все ранее переведённые тексты для более точного перевода. Чтобы этого избежать нужно пытаться добавлять как можно меньше отсебятины (однако совсем без неё не обойтись, всё таки перевод - дело творческое), а термины переводить максимально близко к изначальному значению. Так же стоит учитывать устоявшиеся практики перевода.
Например, у названий политических формирований со словом "Объединение" это слово на английский будет переводиться как "Union", а со словом "Содружество" - "Commonwealth". В обратную сторону так же. Но вот в Элите есть "Galactic Co-operative of Worlds". И хоть по смыслу "Co-operative" можно перевести хоть как содружество, хоть как объединение, но всё таки это отдельный термин. К тому же, в игре активно используется сокращение GalCop, которое при использовании неточных переводов звучать будет совсем странно. По этому остаётся изначальный вариант - "Кооператив". Но звучит он для постсоветского уха забавно, по этому тут можно слегка видоизменить на "Кооперация". В итоге "Galactic Co-operative of Worlds" стал "Галактической Кооперацией Миров", а GalCop остался ГалКоп`ом.
Krager:
Переводчик использую в основном Яндекс иногда Деепл, однако зачастую яндекс переводит точнее.
Пока не забыл, ещё рекомендую использовать какой нибудь текстовый редактор с подсветкой синтаксиса, например Sublime Text или VSCode. В основном пригодится при работе с js, но и с файлами конфигов можно использовать, если там новый формат записи (как в equipment-overrides.plist) - нужно только для такого файла форсировать подсветку синтаксиса как для javascript (это условность - они просто частично похожи, и такой подход даст лучшее визуальное восприятие).
П.С.: добавился в чат