Проект по переводу миссий

Автор Сорда, 14 марта 2014 18:13:59

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

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

Сорда

Ощутить всю красоту и атмосферу мода TDM способны по большей части те, кто умеет читать по-английски. Однако не все это умеют. Поэтому я предлагаю начать перевод фан-миссий.
Чтобы не быть голословным, вот парочка статей о том, как это можно сделать.
http://wiki.thedarkmod.com/index.php?title=I18N_-_Translating_Fan_Missions Здесь достаточно неплохой пример, как это делается.
http://wiki.thedarkmod.com/index.php?title=I18N.pl Здесь речь идет о том, за счет чего же собственно, выполняется локализация.
http://wiki.thedarkmod.com/index.php?title=Internationalization Здесь речь о самом термине.
Все статьи на английском, правда, однако, если кто-то заинтересован в этом, могу разъяснить, о чем там.
Когда попробовал выполнить пример из первой статьи, столкнулся с тем, что консоль говорит об ошибке. Мол, файла или директории не найдено, хотя она есть (english.lang).

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


anix

Этот скрипт нужно применять только тогда когда у самой миссии нет поддержки I18N иначе будут ошибки. У обучающей и Saint Luсia I18N есть из коробки, а скрипт имеет смысл применять например к Builder Roads, Deceptive Shadows и т. п. фмкам у которых не папки strings.

Сорда

#2
Перевод статьи http://wiki.thedarkmod.com/index.php?title=Internationalization
Может быть, понадобиться кому-нибудь. Если нет, я пойму, т.к. в переводе не очень много применяемой информации.
Данная статья посвящена переводу как самого TDM, так и фан-миссий.
I18N выступает за интернационализацию (18 - число недостающих букв между I и N), а L10N - для локализации.
В TDM это означает, что и в миссии, HUD и весь читаемый контент (и GUI) может быть отображен на языке, выбранном пользователем.

Для пользователей
Вы можете переключить язык TDM через главное меню, проследуя в Настройки\Видео\Язык. Язык хранится в файле CVAR sys_lang (Примечание: в v1.07, она хранилась в tdm_lang).
Переключение языка не требует перезагрузки, за исключением русского\английского языков. Игра сообщит пользователю, что для корректного отображения символов, необходимо перезапустить игру.
После изменения языка, главное меню, и основные (т.е. "системные") предметы инвентаря, будут написаны на выбранном языке.
Примечание: не все миссии интернационализированы, поэтому предметы могут\будут отображаться на английском языке. Также есть список уже переведенных модов.

Для мапперов.
Есть два основных способа - первый, это ждать, пока кто-то будет колупаться в вашем файле с миссией .pk4. Как показывает практика, это не оправдывается, т.к. перевод в таком случае продвигается весьма и весьма медленно. Второй способ заключается в том, что можно "вытянуть" все текстовые строки из миссии, таким образом, обеспечив простой доступ к ним, не говоря уже о том, что один подобный файл с текстом могут одновременно переводить много людей. Кроме этого, вероятно, возможно подключить базу словарей к этому файлу для "автоперевода".
Специальные словари для фан-миссий.
Рекомендуется посмотреть статью о переводе миссии. http://wiki.thedarkmod.com/index.php?title=I18N_-_Translating_Fan_Missions

Выбор имен
Основной словарь TDM обладает множеством строк, таких как названия для монстров, предметов, мест и прочего. Желательно использовать какое-то одно, известное слово, например, "Серебряный" вместо "Серебристый". Это облегчит перевод, если вы соберетесь использовать l18 для перевода. Посмотрите strings/all.lang, чтобы увидеть доступный текст.
Распределение названия предмета в несколько строк.
Если у вашего предмета название слишком длинное, вы можете подразделить его на две части (не более!), при помощи тега \n. Пример: ""#str_20000" "This is a very very\nlong item name." ("#str_20000" "Это очень длин\nное название предмета")
Лучше поэксперементировать, чтобы узнать более подходящий вариант.
Поддержка в DR.
Редактор DarkRadiant в настоящее время не поддерживает словари, поэтому вместо "ОК" вы увидите "#str_07118". Более подробная информация здесь: http://bugs.angua.at/view.php?id=2845

Для разработчиков.
CVAR tdm_lang
Файл D3 CVAR sys_lang использует несколько жестко заданных значений, и потому не может быть использован. Мы добавили новый файл CVAR tdm_lang, в котором содержатся строки в нижнем регистре, например "английский", "немецкий", "португальский" и прочее. Эта переменная контролируется через GUI, делая вызов обратно в код SDK, который переключает язык и перезагружает GUI. Если вы измените CVAR вручную (через консоль f.i.), необходим перезапуск TDM для дальнейшей работы.
Код
Главный объект перевода происходит из класса CI18N  (который является сокращением от "Класс интернационализации"), и находится в framework/I18N.cpp  и framework/I18N.h.
Кодировка текста
Код D3, который обрабатывает растровый шрифт GUI, может загружать байты только в определенном диапазоне, как символы. Чтобы получить максимальную отдачу от используемых записей, используется специальная кодировка ISO 8859-1 с некоторыми дополнениям. Подробности можно найти на этой странице.

Новые строки.
Если вам необходимо добавить новую строку, выполните следующее:
Найдите неиспользуемый ID в строках /all.lang, и добавье строку там. Если возможно, добавьте любой перевод, и попросите переводчиков сделать это, повторно сгенерировав языковые файлы с perl devel/gen_lang.pl.
Если переводы для новых строк утеряны, то все будет использоваться англоязычная (или исходная) версия текста для этой строки. Если впоследствии будут добавляться новые переводы, то снова необходимо сделать языковые файлы. Посмотрите на следующую строку:
Необходимо редактировать all.lang только в кодировке UTF-8 и сохранять в ней же, иначе, все изменения будут потеряны.

Добавление нового языка.
Система i18n в TDM работает при наличии переведенных строк, имеющих собственные номера. Эти номера подключаются из отдельных языковых файлов во время компилляции, а затем заменяются на содержимое строк во время работы.
Файлы:
* all.lang - все языки
* devel/gen_lang.p - скрипт на Perl для разбивания файла all.lang на отдельные файлы, например english.lang, russian.lang.
Кратенький обзор процесса перевода:
* Отредактируйте файл all.lang. Просто скопируйте раздел на английском языке в конце файла, и переименуйте в новый раздел (english.lang, к примеру).
* Запустите скрипт devel/gen_lang.pl; для этого вам нужно иметь доступ к инструменту SVN. Этот скрипт разделит ваш файл all.lang на отдельные файлы, для каждого переведенного документа.
Таким образом, новые строки будут доступны при следующей компиляции.
GUI (графический интерфейс пользователя)
В версии 1.07 имелась ошибка в choiceDef внутри интерфейса, которая не позволяла использование иных символов, кроме a-z. Для преодоления этого, были добавлены две новые команды -  initChoice и  stepChoice. Тем не менее, в v. 1.08, ошибка была полностью устранена, поэтому более не требуются подобные костыли.

p.s. - файл all.lang подразумевает под собой то, что вместо all может стоять english, russian и любой другой выбранный язык!




=========================================================================================================================================
Продолжение.
Перевод статьи http://wiki.thedarkmod.com/index.php?title=I18N_-_Translating_Fan_Missions

I18N - Перевод фан-миссий.
Введение
Внимание: Используйте скрипт i18n.pl для подготовки вашего .pk4-файла до того, как попытаетесь перевести его.
Перевод
darkmod.txt
Из-за бага №3012, пока еще нет возможности редактировать darkmod.txt, поэтому игнорируйте эту часть.
Если вы переводите строки в darkmod.txt, НЕ переводите поля имен, подобные Author:, Required TDM Version: и т.д. Они должны быть на английском, иначе игра неправильно распознает их. Переводите только те строки, что идут после них. Если вы используете i18n, то эти поля должны быть автоматически проигнорированы скриптом. Поэтому не трогайте darkmod.txt в этом случае.
Если вы хотите добавить свое имя в качестве переводчика в авторах, включите файл readme.txt внутрь YOURFM_l10n.pk4.

Специальные словари внутри файла фан-миссии.
Они находятся в strings/fm/ и должны находится в специальном формате, объясняемом далее. Имя каждого словара похоже на language.lang, т.е. будет english.lang, russian.lang.
Идентификаторы (ID) для миссий - номера с 20000 по 89999, использование этих номеров не вызывает конфликтов в коде игры. Заметьте, если вам нужны строки, которые есть в коде игры (т.е. ее номер будет меньше 20000, например "Silver Key", "#str_10000"), тогда можете со спокойной совестью использовать его. Это предотвращает повторный перевод одних и тех же строк.
Вы должны также отделить их от вашей мисси, назвав файл имямиссии_i10n.pk4; это гарантирует, что TDM установит\обновит пакет i18n должным образом.
Пример:

Цитироватьoutpost.pk4:

  xdata/outpost.xd
  maps/outpost.map
  maps/outpost.cm
  maps/outpost.proc
  maps/outpost.script
  maps/outpost.aas32
  strings/fm/english.lang         // копия FM
                                  // также работает самостоятельно

outpost_l10n.pk4:

  strings/fm/english.lang
  strings/fm/french.lang
  README.txt                      // т.е. с переводчкиком в числе авторов

Заметьте, что под Линуксом названия файлов должны писаться строчным шрифтом.
Пример словаря. Обратите внимание, что содержимое находиться в фигурных скобках {}.
Цитировать// String table english (iso-8859-1) for: The Outpost

// This file was generated automatically on 2011-08-20 13:56 UTC by i18n.pl v0.02
{
  "#str_20000"  "The Outpost"
  "#str_20001"  "Break into a builder outpost to retrieve a gold ingot."
  "#str_20002"  "Gold Ingot"
  "#str_20003"  "Leave the outpost after your main objectives are done and get back to the front gates."
  "#str_20004"  "You won't find bags full of money in a builder outpost, but take away any valuables you can get hold of. Find valuables worth at least 600."
  "#str_20005"  "You won't find bags full of money in a builder outpost, but take away any valuables you can get hold of. Find valuables worth at least 700."
  "#str_20006"  "No knock outs too."
  "#str_20007"  "Killing is not your style. No corpses tonight."
  "#str_20008"  "You won't find bags full of money in a builder outpost, but take away any valuables you can get hold of. Find valuables worth at least 800."
  "#str_20009"  "The massive gold ingot should be worth a fair amount of money. Find out where the ingot is kept and change its ownership."
}
Такие действия делают работу переводчика легче, потому что достаточно только копировать english.lang, переименовать его, в, например, russian.lang, и перепаковать myfm_i10n.pk4.

Изображения с текстом.
Если текст размещен на изображении, то необходимо перерисовать текст на изображении, на нужный язык. Если вы не можете это сделать, попросите одного из переводчиков.
Кроме того, это делается в зависимости от того, где используется. Если изображение используется внутри GUI, вы можете настроить шейдер материала на использование в зависимости от языка, и каждый материал, таким образом, будет использовать изображение (с переведенно-перерисованным текстом, разумеется)с выбранным языком.

Замечание: если изображение используется, как текстура для стены, то применяется схожая технология перевода.

Для начала, создайте файл под названием materials/yourfmname.mtr. Здесь для примера из Thief, Ден использует внутреигровую карту (местности) в инвентаре:
Цитировать// blends in-game map details onto background parchment
thiefsdenmap
{
        {
                blend filter
                map guis/assets/maps/thiefsdenmap
        }
}

// italien map
thiefsdenmap_it
{
        {
                blend filter
                map guis/assets/maps/thiefsdenmap_it
        }
}
Здесь показаны только английский и итальянский, для каждого языка нужен свой подобный алгоритм.
Также вам нужны такие изображения, в данном случае:
Цитироватьdds/guis/assets/maps/thiefsdenmap_it.dds (Итальянская версия, помещается в "yourfm_l10n.pk4" для каждого языка)
dds/guis/assets/maps/thiefsdenmap.dds (Оригинал на английском, в файле "yourfm.pk4")
После модификации GUI (т.е. для данного примера - guis/thiefsdenmap.gui, карта используется так:
ЦитироватьwindowDef Desktop {
    rect      0, 0, 640, 480
    nocursor 1
    windowDef background_map {
        rect      100, -10, 440, 480
        background "guis/assets/readables/oldparchment_landscape"
        visible 1
        windowDef actual_map {
            rect      33, 70, 400, 340
            background "thiefsdenmap" // shader of the map
            visible 1
        }
    }
}
И заменяем красную строку:
Цитироватьbackground "#str_20100" // shader of the map
Номер 20100 в данном примере является свободным. Он может быть любым, кроме того, что уже используется в fm/strings/english.lang!
В fm/strings/english.lang, добавьте следующую строку:
Цитировать"#str_20100" "thiefsdenmap"
Это позволяет шейдеру отображать карту. Тогда, в fm/strings/italian.lang, добавьте:
Цитировать"#str_20100" "thiefsdenmap_it"
Это активирует другие шейдеры для использования.
Теперь карта должна отображаться в выбранном языке.

Обратите внимание - не добавляйте строки в оригинальный english.lang, этот словарь используется как исходный (т.е. на этом языке написано содержимое книг, табличек на стенах и прочего).

Пример:
http://www.bloodgate.com/mirrors/tdm/pub/pk4/i18n/thiefs_den.pk4
http://www.bloodgate.com/mirrors/tdm/pub/pk4/i18n/t

Сорда

Цитата: Skina от 14 марта 2014 22:21:50
Этот скрипт нужно применять только тогда когда у самой миссии нет поддержки I18N иначе будут ошибки. У обучающей и Saint Luсia I18N есть из коробки, а скрипт имеет смысл применять например к Builder Roads, Deceptive Shadows и т. п. фмкам у которых не папки strings.
Skina, если ты шаришь, может быть, объяснишь по пунктам, что и как делать нужно? А то может это давно известно, а я фигней с переводами статей из Вики страдаю. Уж больно охота заниматься этим.

anix

А с чем конкретно сложности? Если думаешь перевести фмку берешь из .pk4 файла папку string (если ее там нет применяешь к pk4 файлу применяешь этот скрипт) создаешь текстовый файл с кодировкой 1251 russian.lang, копируешь туда содержание english.lang и переводишь.  Тема про перевод tdm здесь http://darkfate.org/forum/index.php?topic=311.0

Сорда

Skina, у меня, когда я пытаюсь применить этот скрипт, выкидывает ошибку, мол, невозможно прочесть файл english.lang, и номер строки, 1048. И еще мне не ясно, куда и какие файлы помещать, если папки string в .pk4 нет.

anix

#6
Какая фмка? Сбрось архив посмотрю. Если папки string нет нужно применять скрипт к архиву.

Сорда

Я еще не разобрался, как здесь вложения делать, но скажу, что файл называется alchemist.pk4. Не думаю, что это что-то скажет, но все же.