NyashniyVladya / Translator3000

Automatic translator of games made on Ren'Py engine.
https://nyashniyvladya.github.io/
GNU General Public License v3.0
121 stars 18 forks source link

Раздельные файлы перевода для каждой игры #15

Open Feans opened 3 years ago

Feans commented 3 years ago

Translator3000 создаёт единый файл translations.json в users\current\vladya's projects database\translator3000\Google\1.1

В него попадают переводы от всех игр, в результате он растёт до больших размеров, и предполагаю, что это создаст проблемы в будущем в виду того что, во первых он не очищается, а только увеличивается со временем, и во вторых скрипт грузит дополнительные строки перевода от других игр, совершенно лишние.

Рациональное предложение: этот файл должен сохраняться и загружаться из папки с самой игрой, например в папке _translator3000Data для каждой игры свой файл. После прохождения игры он просто удаляется вместе с игрой. Ну и нет мусора за пределами игровой папки.

NyashniyVladya commented 3 years ago

В него попадают переводы от всех игр ...

Это, что называется, - "не баг, а фича". Идею создавать для каждой игры свой файл я отмёл ещё на этапе первых тестов.

Во первых, похожие фразы в разных играх встречаются весьма часто и если один раз был переведён какой-нибудь "Привет, как дела?", зачем лишний раз обращаться к серверу из за этого?

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

он растёт до больших размеров...

Для современных ПК это вряд ли большие размеры. Видеовставки иногда весят больше. Я думаю над тем, чтобы сменить формат хранилища на более быстрый в плане записи (SQL, например), чтобы уменьшить время сброса БД на ЖД. Но от самой концепции единой базы переводов я отказываться точно не хочу.

Feans commented 3 years ago

Во первых, похожие фразы в разных играх встречаются весьма часто и если один раз был переведён какой-нибудь "Привет, как дела?", зачем лишний раз обращаться к серверу из за этого?

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

В случае хранения перевода в папке игры, всё старое придётся переводить заново. При такой реализации, как сейчас - предыдущие эпизоды будут уже переведены.

Почему? Ведь старый перевод останется в папке с игрой.

Я думаю над тем, чтобы сменить формат хранилища на более быстрый в плане записи (SQL, например), чтобы уменьшить время сброса БД на ЖД. Но от самой концепции единой базы переводов я отказываться точно не хочу.

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

Почему вообще я об этом заговорил... мне как пользователю хочется больше прозрачности и контроля над файлами на своём компьютере. Хочется видеть, что куда сохраняется и удалять уже ненужное. В этом плане всё довольно непрозрачно: переводчик молчаливо создаёт файлы, за пределами папки с игрой, в users/current/ и я не могу настроить этот путь. А если я захочу portable игру с переводом? :) В общем можно было бы добавить настройку - куда сохранять кеш. Кому не надо - по дефолту единый файл, кому надо - свой путь в конфиге.

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

Или просто я хочу очистить кеш, для данной игры потому что недоволен качеством перевода, не затрагивая ранее переведенные игры в которые играю. На онлайн переводчики находит бывает такое, что начинают отдавать на запросы ухудшенный вариант, как было недавно. Спасибо, что поправили.

NyashniyVladya commented 3 years ago

В случае хранения перевода в папке игры, всё старое придётся переводить заново. При такой реализации, как сейчас - предыдущие эпизоды будут уже переведены.

Почему? Ведь старый перевод останется в папке с игрой.

Как правило, новые эпизоды разрабы выпускают отдельными билдами (говорю, как опытный читатель всяких хентайных проектов с "патреона") и в этом случае юзеру придётся вручную перетаскивать файл перевода в новую папку (а люди, как правило, очень не любят что либо делать вручную).

Ну тогда неплохо было бы дать возможность очищать перевод ненужных, пройденных игр.

Это можно. Займусь на досуге.

А если я захочу portable игру с переводом? :)

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

Однажды плохо переведенная фраза, сохранится навечно и будет такой всегда?

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

Feans commented 3 years ago

в этом случае юзеру придётся вручную перетаскивать файл перевода в новую папку (а люди, как правило, очень не любят что либо делать вручную).

Можно было бы просто добавить настройку для продвинутых юзеров - куда сохранять кеш и остальные файлы. Portable режим. Кому не надо - по дефолту единый файл, кому надо - свой путь в конфиге.