Мультиязычные миссии: как это сделано

Автор Zontik, 25 октября 2018 11:00:47

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Zontik

В связи с намечающимися переводами на иные языки, помимо русского, решил углубиться в вопрос. И, честно говоря, озадачен.
Для примера выбрал недавно (ну, как недавно - ровно год назад) вышедшую DCE. Русско-английская версия, то есть две в одной упаковке. На первый взгляд, все просто: там, где есть необходимость перевода, тексты заботливо разложены по папкам RUSSIAN и ENGLISH. Но дьявол скрывался в деталях.
Начал сравнивать количество файлов в папках. И вот в папке BOOKS\RUSSIAN оказалось на 4 текста меньше, чем в английской версии. Обнаружил, например, что файл m1_l_linda2.str в папке English есть, а в папке Russian его нет. Вполне, кстати, сюжетный текст, довольно длинный. А что будет в игре?
Я понимаю так: движок начнет искать текст и не найдет. Поэтому будет пустая страница. Или он полезет шарить по всем соседним папкам? Тогда будет предложена английская версия. Хреново, но все же лучше, чем ничего. Но будет ли он это делать? И как в этом случае устанавливается приоритет - из какой папки брать сначала, а в какие лезть, только если чего-то не хватает? Если вообще такая вещь существует, то она должна быть указана в каком-то файле, который тоже не может быть одинаковым для русской и английской версии... Дальше моя соображалка отказала.
Полез дальше. О! Объекты! Текстуры! И в них - тоже разбиение на RUS/ENG. И - догадайтесь с трех раз? Ну точно: в русской версии на 4 текстуры меньше. И что будет в игре на этих местах? Английские версии соответствующих надписей или ничего?
И вот к чему я виду. При таком количестве файлов потерять один-два - это не так уж сложно. Я сам это делал десятки раз. Соответственно рассчитывать на то, что переводчики окажутся более тщательными, чем сам автор - это утопия. Наверняка какие-то файлы они потеряют, а с какими-то банально не справятся или не успеют. Ну есть вещи достаточно сложные для перерисовки, хотя бы те же автокарты. И вот мне интересно, как поступит движок, не найдя в папке с где-то как-то заданным языком нужных файлов. Будет ли он их искать где-то еще, и если да - то кем и как это регулируется? Автором? Игроком в своих конфигурационных файлах? В последнем случае я испытываю традиционное недоверие к неподконтрольной системе. И у меня совершенно нет желания оставить игроков наедине с пустыми страницами или с непрорисованными текстурами, на которых должно быть нарисовано что-то важное.
Есть, правда, достаточно надежное и проверенное решение: плюнуть на все эти языковые папки и организовать отдельные языковые ZIPы, распаковывающиеся и переписывающие файлы прямо поверх установленной игры (как я всегда до сих пор и делал). Единственный минус этого метода - необходимо вручную выполнить одно несложное движение. А плюс - почти стопроцентно предсказуемый результат. Потерянные файлы не будут заменены и останутся на английском, но никуда не пропадут. Кто поленится перевести карту, например - будет любоваться английской, не так уж и страшно. Лучше, чем совсем без карты.
Я склоняюсь именно к этому решению, но хотелось бы выслушать возможные возражения. Время еще есть.
И еще одно: именно вас все это никак не коснется. Русская версия будет выпущена отдельно. Речь идет о несчастных европейцах (в основном), кому не посчастливилось родиться в англоговорящих семьях. Их на удивление много, но и языков тоже немало, а на количество версий больше двух (русская и англо-мультиязычная) у меня банально не хватит ресурсов.
Дайте глазам отдохнуть! Тёмное место

Призрак Boris'а3000

#1
Английское будет на месте недостающих русских ресурсов. Или ты думаешь, что если в конфигах прописано "language russian+english", то создание пустой папки Russian оставит миссию вообще без ресурсов? Это было бы сильно. К тому же это элементарно проверить, даже на русике оригинала.
Вот если бы было прописано "language russian", вот тогда бы да.

И на самом деле движок ничего не ищет. То, что он там чего-то ищет и долго и упорно анализирует приоритеты, это просто модель происходящего, более понятная человеку. На самом же деле происходит совсем другое -- движок просто тупо начинает прогружать все имеющиеся ресурсы подряд, начиная с самого низкого приоритета и далее по его возрастанию. При этом ресурсы с такими же именами, с какими уже были загружены, грузятся в то же место оперативной памяти, перезаписывая предыдущие. Соответственно, последним окажется ресурс с максимальным приоритетом. Он и останется в памяти и будет принимать участие в создании итоговой картинки на экране.
То бишь по сути происходит оно самое:
Цитата: Zontik от 25 октября 2018 11:00:47
Есть, правда, достаточно надежное и проверенное решение: плюнуть на все эти языковые папки и организовать отдельные языковые ZIPы, распаковывающиеся и переписывающие файлы прямо поверх установленной игры
Но только не на винте, а в оперативке.
Поэтому, например, если у тебя пирамидка из десятка модов, да ещё с кучей языковых папок, то не стоит удивляться долгой загрузке миссии -- все эти моды и языки будут считаны и прогружены, по десять раз перезаписывая друг друга в оперативке, даже если самый главный, верхний мод, имеет в своём составе все необходимые ресурсы.

По поводу того, что куда запаяно. Языковые папки -- чистая условность. Это просто вторая, параллельная моддинговая система. Ничего не мешает прописать в конфиг "language blablabla1+blablabla2", создать везде по две этих подпапки (blablabla1 и blablabla2) и напихать в них не тексты, а, например, текстуры и оформить таким образом текстурный хай-рез пак.
В общем, между модами и локализациями нет никакой разницы. И то и другое можно оформить как с помощью mod_path, так и с помощью language. Разница есть только на человеческом уровне абстракции, в компьютере её нет.

Значит, движок читает всё подряд, стартуя с самой чмошной папки, далее по возрастанию их элитности, и заканчивая самой элитарной. Степень элитарности прописана в mod_path, resname_base, language и прочие строки конфигов. Степень же элитарности самих этих строк в сравнении друг с другом (кто круче -- mod_path или language) запаяна в движок, вот и всё.

Я в принципе тоже за то, чтоб предать языковые папки анафеме, дабы не городить приоритеты приоритетов приоритетов приоритетов n-ого порядка.
Corsair HX1000i / Gigabyte GA-X48-DS4 / Intel Core2-Quad Q9650@4.1GHz / Hynix 8GB DDR2-800@1100MHz /
EVGA 6GB GDDR5 <GeForce GTX 980Ti> K|NGP|N Edition / Creative SB X-Fi Xtreme Gamer Fatal1ty Pro Edition /
2xSSD Intel X25-M 120GB в RAID 0 / Samsung SyncMaster 957MB (CRT 2048х1536) / UPS PCM SKP-2000A /
Windows XP Professional SP3 VL 32-bit + Windows 7 Enterprise SP1 U 64-bit / ForceWare 368.81 / New-Dark 1.26

Zontik

Из всего перечисленного меня больше всего смущает тот факт, что я понятия не имею, что будет прописано в конфигах у игрока. Он может и language french прописать, его право, и он будет слюни пускать, крича, что всегда все работало, а теперь вдруг карты не стало, и никто никогда не угадает причины. Вот этой ситуации я и пытаюсь избежать. Я-то знаю, что в мультиязычной версии базовой считается английская (то есть по твоему описанию - она загружается первой, или, другими словами, у ней более низкий автоприоритет), и именно это должно быть указано в конфигах, а вот как объяснить это игроку и как проконтролировать исполнение - фиг знает.
Помимо всех прочих нюансов, получается, что отсутствие языковых папок еще и ускоряет загрузку? А при большом количестве ресурсов - значительно ускоряет?
Дайте глазам отдохнуть! Тёмное место

Призрак Boris'а3000

Цитата: Zontik от 25 октября 2018 14:19:48
Из всего перечисленного меня больше всего смущает тот факт, что я понятия не имею, что будет прописано в конфигах у игрока. Он может и language french прописать, его право, и он будет слюни пускать, крича, что всегда все работало, а теперь вдруг карты не стало, и никто никогда не угадает причины. Вот этой ситуации я и пытаюсь избежать.
Этого очень просто избежать -- продублируй содержимое папок english в общих папках (в которых лежат эти english). Ведь языковые папки необязательны, и общие папки просматриваются всегда. Но это, разумеется, приведёт к увеличению размера миссии и времени её загрузки.
Или уж рубить до конца -- после выполнения предыдущего действия просто удалить все папки english.
В принципе, вероятность, что у пользователя куда-то потеряется english из строки language, весьма мала, т. к. в этом случае у него будут большие проблемы с оригиналом. А тебя же небольшие вероятности не интересуют, как показал разговор про конфигурационные файлы?

Цитата: Zontik от 25 октября 2018 14:19:48
Помимо всех прочих нюансов, получается, что отсутствие языковых папок еще и ускоряет загрузку? А при большом количестве ресурсов - значительно ускоряет?
Да. Мой оригинал с пирамидой модов грузится с SSD столько же времени, сколько оригинал без модов (ну или с одним модом для большей корректности сравнения) с HDD.
Corsair HX1000i / Gigabyte GA-X48-DS4 / Intel Core2-Quad Q9650@4.1GHz / Hynix 8GB DDR2-800@1100MHz /
EVGA 6GB GDDR5 <GeForce GTX 980Ti> K|NGP|N Edition / Creative SB X-Fi Xtreme Gamer Fatal1ty Pro Edition /
2xSSD Intel X25-M 120GB в RAID 0 / Samsung SyncMaster 957MB (CRT 2048х1536) / UPS PCM SKP-2000A /
Windows XP Professional SP3 VL 32-bit + Windows 7 Enterprise SP1 U 64-bit / ForceWare 368.81 / New-Dark 1.26

Zontik

Попробую подвести черту.
Выбор, получается, таков.
Первый вариант:
- все английские тексты (назовем их текстами, хотя подразумеваются все ресурсы) - вне языковых папок. Скажем, просто в BOOKS;
- все греческие (условно) тексты - в подпапке BOOKS\GREEK.
При этом первыми грузятся все английские тексты, затем некоторые из них переписываются в оперативке имеющимися в наличии греческими.
При этом не имеет значения, что пользователь понаписал в конфигах.
Так или нет?
И если так, то как вывести игру на английский вариант вместо греческого?
И второй вариант: подняли задницу со стула и распаковали файлы с переводом, заменяя существующие файлы. При этом, возможно, придется задействовать небольшую часть мозга, чтобы случайно не распаковать куда-то не туда.
По первому вариантов вопросов куда больше.
Как у меня сделано сейчас, за отсутствием переводов: все книги - в папке Books. Никаких подпапок. Это кому-нибудь чем-нибудь грозит?
Дайте глазам отдохнуть! Тёмное место

Призрак Boris'а3000

Цитата: Zontik от 25 октября 2018 15:16:08
Первый вариант:
- все английские тексты (назовем их текстами, хотя подразумеваются все ресурсы) - вне языковых папок. Скажем, просто в BOOKS;
- все греческие (условно) тексты - в подпапке BOOKS\GREEK.
При этом первыми грузятся все английские тексты, затем некоторые из них переписываются в оперативке имеющимися в наличии греческими.
При этом не имеет значения, что пользователь понаписал в конфигах.
Так или нет?
Так, кроме конфигов. Чтоб сработала перезапись греческим языком, надо, чтобы где-то в конфигах сидела строчка language greek или language greek+чтоугодно. И никто, кроме тамошних переводчиков, этот самый greek в конфиги не добавит. Так же как и у нас russian прописывает русик Дона. Если же русик оригинала не ставили, то значит, надо прописать руками по мануалу русика ФМ.
У нас же тут было несколько случаев, когда переводчики распихали перевод по подпапкам russian, и у многих он не сработал, т. к. в конфигах у них было language english и всё.

Я ж говорю, эти языковые папки -- чистая условность. Они никакие не языковые, а просто папки. Движок о них не знает ничего, и именно поэтому их надо прописывать в конфиг. Ты не язык прописываешь в конфиг, а папку, в которой лежат ресурсы. Только пишешь её не в resname_base, а в language, вот и вся разница.

Цитата: Zontik от 25 октября 2018 15:16:08
Как у меня сделано сейчас, за отсутствием переводов: все книги - в папке Books. Никаких подпапок. Это кому-нибудь чем-нибудь грозит?
Не понял, чем это от первого варианта отличается?
Corsair HX1000i / Gigabyte GA-X48-DS4 / Intel Core2-Quad Q9650@4.1GHz / Hynix 8GB DDR2-800@1100MHz /
EVGA 6GB GDDR5 <GeForce GTX 980Ti> K|NGP|N Edition / Creative SB X-Fi Xtreme Gamer Fatal1ty Pro Edition /
2xSSD Intel X25-M 120GB в RAID 0 / Samsung SyncMaster 957MB (CRT 2048х1536) / UPS PCM SKP-2000A /
Windows XP Professional SP3 VL 32-bit + Windows 7 Enterprise SP1 U 64-bit / ForceWare 368.81 / New-Dark 1.26

Zontik

Цитироватьникто, кроме тамошних переводчиков, этот самый greek в конфиги не добавит.
Вот это несколько спорный момент. Эти конфиги добавляются к архиву с миссией? Если нет, то это абсолютно не имеет отношения к переводчикам, а остается на совести пользователя. Который может оказаться напрочь ее лишен.
ЦитироватьНе понял, чем это от первого варианта отличается?
Отсутствием папок, которые я условно называю языковыми. И - если я в очередной раз понял правильно - отсутствием привязанности к содержимому конфигов. Используются файлы из "корневых" папок, и только они одни. Других просто нет. И даже если идиот-игрок пропишет в конфиг language chinese+чтоугодно, движок сначала загрузит все английские (или какие там будут по умолчанию) ресурсы, затем поищет китайские, не найдет и плюнет.
Я когда ставил себе DCE, пошел именно по второму сценарию. Пришлось, конечно, все распаковывать вручную, чтобы избавиться от папок Russian. Но в тот момент у меня не было уверенности, что движок поведет себя именно так, как описано выше.
Дайте глазам отдохнуть! Тёмное место

Призрак Boris'а3000

Цитата: Zontik от 25 октября 2018 15:54:00
Вот это несколько спорный момент. Эти конфиги добавляются к архиву с миссией?
Нет. Конечно, переводчики могут только в ридми указать на необходимость правки конфигов или написать инсталлятор, который будет их править, а собственно запускать этот инсталлятор или править руками придётся самим пользователям.

Цитата: Zontik от 25 октября 2018 15:54:00
остается на совести пользователя. Который может оказаться напрочь ее лишен.
Значит, будет играть в английскую версию. Она никуда не убежит. Вероятность, что убежит, не больше, чем у нас тут с нашими русификаторами.

Цитата: Zontik от 25 октября 2018 15:54:00
Отсутствием папок, которые я условно называю языковыми
Так их нет, потому что у тебя на данный момент лишь один язык. Если нужен будет ещё один, то они появятся, и первый вариант и получится.
Всё нормально. Базовый язык, имеющий самый низкий приоритет, лежит в общих папках, имеющих самый низкий приоритет вне зависимости от конфигов. Так и должно быть. Папки english чисто логически -- лишние. Так, для порядка разве что, чтоб кучи-малы не было, не более.
Corsair HX1000i / Gigabyte GA-X48-DS4 / Intel Core2-Quad Q9650@4.1GHz / Hynix 8GB DDR2-800@1100MHz /
EVGA 6GB GDDR5 <GeForce GTX 980Ti> K|NGP|N Edition / Creative SB X-Fi Xtreme Gamer Fatal1ty Pro Edition /
2xSSD Intel X25-M 120GB в RAID 0 / Samsung SyncMaster 957MB (CRT 2048х1536) / UPS PCM SKP-2000A /
Windows XP Professional SP3 VL 32-bit + Windows 7 Enterprise SP1 U 64-bit / ForceWare 368.81 / New-Dark 1.26

Maxim

#8
Цитироватьэто должно быть указано в конфигах, а вот как объяснить это игроку и как проконтролировать исполнение - фиг знает.
Этого ни в коем случае нельзя делать. Ты всегда нарвёшься на тех, кто что-то не прочитает или забьёт вообще на это дело. А потом будут у себя на TTLG причитать по этому поводу и костерить тебя. Блин, некоторые предысторию в тексте загрузчика миссий порой не читают, ожидая, что в самой миссии будет продублировано или схоже объяснено всё. Чего уж там говорить про чтение определённой строки, даже с пометкой "Важно". Да и потом, это в принципе "не солидно". Надо избавлять игроков от каких-то дополнительных манипуляций. Я, между прочим, читая всё и обращая внимания на тексты, сам же схож с ними. То есть считаю, что игроку надо просто начать проходить и не должно на его стороне быть каких-то танцев с бубнами или дополнительной работой по перетаскиванию каких-то файлов куда-то или вписывания конфиг. параметров. Тут же возникает ощущение безалаберного отношения (в тех случаях, когда реально была возможность сделать иначе). И без того хватает того бреда, который неизбежно творится с патчами, когда нужно быть реально посвящённым рыцарем треугольного Thief стола, чтобы знать что есть такой newdark и что определённые архивы надо распаковать в определённые папки, а ещё потом настроить возможно сброшенное разрешение экрана и т.д. Это и так уже сократило аудиторию, потому что есть такие люди, которые вообще новички и просто хотят поиграть. И вот они наконец кое-как установили  ньюдарк (а кто-то и этого не сделал), а теперь ещё нужно повышенное внимание к определённым миссиям? В общем, нужно сократить возможности исполнения дополнительных вещей к минимуму. Насколько это возможно. В тех случаях, когда невозможно, убедись хотя бы в соответствующем форматировании текста. Чтобы такие вещи как требуемая версия ново-мрака и необходимость что-то куда-то вписать, что-то переместить или довольствоваться картами с пометками на глобализационном языке обозначались ярким цветом жирного шрифта. В начале. Хотя чего тебе всё это говорить? Это меня и удивляет. Ты же сам всё прекрасно знаешь. В общем, унификация наше фсёёё. А на размер архива всегда забивай. Уже не в эпоху модемов живём.
Still they talk anyway
When there's nothing to say
There's so much said in empty words...

Zontik

Насчет размера... лично меня он уже начал напрягать. А бывают ситуации и похуже.
Maxim, я так и не понял, ты за какой из двух вариантов? Манипуляции есть в обоих, только в одном ясные и однозначные, а в другом  невнятные и, возможно, необязательные.
Совсем без манипуляций - увы. Это надо тогда брать голубой вертолет и летать по всем пользователям, самому настраивать.
Дайте глазам отдохнуть! Тёмное место

Zontik

Вооруженный знаниями, провел эксперимент, по-всякому издеваясь над конфигами. Схема по первому варианту (английские файлы - в "корне", локализованные - в подпапках) выглядит очень надежной, а дополнительного вмешательства пользователя не требует вообще. Одно лишь ограничение: readme. Он не подменяется локализованной версией. Что логично - движок-то еще не активирован. Поэтому при выборе такого варианта все Readme придется запихивать в один файл. А это уже диакритическая ситуация.
Поэтому выбор пока неоднозначен. В пользу первого варианта - снятие бремени распаковки с пользователя (хотя за предыдущие 12 лет ни один человек на это бремя не пожаловался). В пользу второго - Readme не превращается в многостраничный свиток + некоторое ускорение загрузки (реально очень много мелких файлов). Не знаю, что выбрать. Голосовалку, что ли, прикрутить? Статистика будет собрана потрясающая.
Дайте глазам отдохнуть! Тёмное место

MoroseTroll

Если ReadMe сделаешь в формате DOC или PDF, то прямо в самом его начале можно будет разместить оглавление со ссылками на соответствующие разделы документа, и тогда каждый сможет перейти в нужный ему языковой раздел всего одним щелчком мышки. Не уверен насчёт формата RTF, но, быть может, там тоже есть такая возможность.

Zontik

Для меня крайне важно, чтобы игроки прочитали Readme. В связи с этим надо максимально упростить процедуру. Я уже сократил текст до абсолютного минимума, и все равно не уложился в одну страницу.
При этом очень хорошо понимаю, как могут бесить многостраничные документы, когда уже шило завертелось и хочется поскорее играть.
Дайте глазам отдохнуть! Тёмное место

Призрак Boris'а3000

Цитата: Zontik от 25 октября 2018 21:57:10
шило завертелось и хочется поскорее играть.
Школотэ левел.
Corsair HX1000i / Gigabyte GA-X48-DS4 / Intel Core2-Quad Q9650@4.1GHz / Hynix 8GB DDR2-800@1100MHz /
EVGA 6GB GDDR5 <GeForce GTX 980Ti> K|NGP|N Edition / Creative SB X-Fi Xtreme Gamer Fatal1ty Pro Edition /
2xSSD Intel X25-M 120GB в RAID 0 / Samsung SyncMaster 957MB (CRT 2048х1536) / UPS PCM SKP-2000A /
Windows XP Professional SP3 VL 32-bit + Windows 7 Enterprise SP1 U 64-bit / ForceWare 368.81 / New-Dark 1.26

MoroseTroll

Тогда предлагаю сделать защиту от дурака "не прочтения" ReadMe ;D : при запуске миссии, игрок окажется в пустой комнате, где будет циферблат, на котором ему придётся набрать комбинацию из нескольких цифр. Саму комбинацию распредели по ReadMe в виде номеров пунктов (скажем, №5, №7, №2) или выделенных слов (пять, семь, два).
Понятное дело, что самые нетерпеливые сразу начнут ныть на форуме и спрашивать ответ, но таких уже ничем не проймёшь, а другого действенного способа ознакомить игрока с содержимым ReadMe я пока не вижу. Не высылать же каждому на дом по адвокату и приставу ;D!