Gratt
Модостроитель
- Регистрация
- 14 Ноя 2014
- Сообщения
- 3.301
- Благодарности
- 4.638
- Баллы
- 625
- Акт первый.
Мысль в голове давно, до нормального обсуждения руки не доходили.
Имеется, скажем, некий файлик (да хоть простой txt, главное чтоб было удобно и просто), содержащий базу текстов в Юникоде, => на разных языках. Эти тексты разбиты на фразы, а фразы на ключевое кодовое слово и варианты его реализации.
- Как это выглядит в оригинале:
- Как это может выглядеть на деле:
- Что происходит:
Движок ищет ключевое слово в базе данных, извлекает из него реализацию и сопоставляет А. с системный языком Б. с языком, вручную заданным в параметрах игры. При отсутствии подставляется значение по умолчанию, то бишь оригинал, а при желании можно прикурить обработчик исключений.
- Взаимодействие с двумя словарями одновременно:
Если мы имеем два словаря, которые содержат одинаковые ключи, то языковая реализация этих ключей будет объединена на программном уровне.
- Вариант событий 1
Имеем первый словарь GlosRU.gls и второй словарь GlosEN_DE.gls. Оба хранят ключи DIA_Sekob_HALLO_01_00. И не сложно догадаться, что первый содержит только русские тексты, а второй - английские и немецкие одновременно. Программу это не смутит, ключ получит сразу все 3 реализации без потерь или ошибок.
- Вариант событий 2
MyMod.vdf содержит GlosRU_EN.gls, MyMod_Upd1.vdf - GlosEN_DE.gls, MyMod_Upd2.vdf - GlosDE.gls. Ситуация таже, все 3 файла имеют ключ DIA_Sekob_HALLO_01_00. По прежнему тексты будут дополнять друг друга, а уже существующая реализация - обновлять предыдущую. То есть если GlosEN_DE это обновление с более приоритетным томом чем GlosRU_EN, то ключ получит в дополнение немецкий текст и перезапишет английский. А обновление GlosDE перезапишет немецкий.
Процесс наложения на примере таблицы:
- Что делать если мод уже собран, исходники имеются, но переделывать тексты вручную = маленький АД?
На такой случай смогу подогнать автоматическую генерацию словаря и замену скриптовых текстов на ключи.
- А если нет исходников?
В теории можно перепарсить готовый бинарь и осторожно переколхозить все тексты на ключи.
- Эээ, шайтан! Но ведь готика не умеет в юникод!
Никто ее и не просит уметь в Юникод. Юникод нужен только переводчикам и словарю. Конечный текст будет нежно преобразован в Ансю.
И да, такой момент. Если кто-то будет использовать плагины и строки zSTRING, то он также получит дэфолтную совместимость юзать ключи прямо движком
Мысль в голове давно, до нормального обсуждения руки не доходили.
Имеется, скажем, некий файлик (да хоть простой txt, главное чтоб было удобно и просто), содержащий базу текстов в Юникоде, => на разных языках. Эти тексты разбиты на фразы, а фразы на ключевое кодовое слово и варианты его реализации.
DIA_Sekob_HALLO_01_00 | |
---|---|
RU | Что ты делаешь на моей земле? Здесь нечего украсть. Проваливай. |
EN | What are you doing in my land? There is nothing to steal. Get out! |
DE | Was machst du in meinem Land? Es gibt nichts zu stehlen. Geh raus! |
BAU_913_Thekla_Name | |
---|---|
RU | Текла |
EN | Thekla |
DE | Thekla |
- Как это выглядит в оригинале:
Daedalus:
AI_Output(self, other, "DIA_Sekob_HALLO_01_00"); //Что ты делаешь на моей земле? Здесь нечего украсть. Проваливай.
name[0] = "Текла";
Daedalus:
AI_Output(self, other, "DIA_Sekob_HALLO_01_00"); //$DIA_Sekob_HALLO_01_00
name[0] = "$BAU_913_Thekla_Name";
Движок ищет ключевое слово в базе данных, извлекает из него реализацию и сопоставляет А. с системный языком Б. с языком, вручную заданным в параметрах игры. При отсутствии подставляется значение по умолчанию, то бишь оригинал, а при желании можно прикурить обработчик исключений.
- Взаимодействие с двумя словарями одновременно:
Если мы имеем два словаря, которые содержат одинаковые ключи, то языковая реализация этих ключей будет объединена на программном уровне.
- Вариант событий 1
Имеем первый словарь GlosRU.gls и второй словарь GlosEN_DE.gls. Оба хранят ключи DIA_Sekob_HALLO_01_00. И не сложно догадаться, что первый содержит только русские тексты, а второй - английские и немецкие одновременно. Программу это не смутит, ключ получит сразу все 3 реализации без потерь или ошибок.
- Вариант событий 2
MyMod.vdf содержит GlosRU_EN.gls, MyMod_Upd1.vdf - GlosEN_DE.gls, MyMod_Upd2.vdf - GlosDE.gls. Ситуация таже, все 3 файла имеют ключ DIA_Sekob_HALLO_01_00. По прежнему тексты будут дополнять друг друга, а уже существующая реализация - обновлять предыдущую. То есть если GlosEN_DE это обновление с более приоритетным томом чем GlosRU_EN, то ключ получит в дополнение немецкий текст и перезапишет английский. А обновление GlosDE перезапишет немецкий.
Процесс наложения на примере таблицы:
MyMod.vdf - GlosRU_EN.gls | MyMod_Upd1.vdf - GlosEN_DE.gls | MyMod_Upd2.vdf - GlosDE.gls |
---|---|---|
RU | RU | RU |
EN | EN | EN |
DE | DE |
- Что делать если мод уже собран, исходники имеются, но переделывать тексты вручную = маленький АД?
На такой случай смогу подогнать автоматическую генерацию словаря и замену скриптовых текстов на ключи.
- А если нет исходников?
В теории можно перепарсить готовый бинарь и осторожно переколхозить все тексты на ключи.
- Эээ, шайтан! Но ведь готика не умеет в юникод!
Никто ее и не просит уметь в Юникод. Юникод нужен только переводчикам и словарю. Конечный текст будет нежно преобразован в Ансю.
И да, такой момент. Если кто-то будет использовать плагины и строки zSTRING, то он также получит дэфолтную совместимость юзать ключи прямо движком
C++:
zSTRING str = "&MyKey";
Последнее редактирование: