Доколе, доколе я буду видеть это?
Когда-то, а конкретно 20 лет назад, эту технологию знали многие, но спустя годы она была утеряна, я сейчас говорю про автоматическую локализацию карты для любого патча, начиная от 1.03 и заканчивая 1.32.10.
Неужели не у кого не было вопроса, а что же это за такая графа язык в MPQ editor'е
А весь наш текст находится в файле WTS, читаем подробнее о структуре файлов WC3
По умолчанию из карты считывается war3map.wts нейтрального языка
war3map.wts
STRING 1
{
LocaleTest
}

STRING 2
{
UNKNOWN
}

STRING 3
{
NODESCRIPT
}

STRING 4
{
UNKNOWN
}

STRING 7
{
Test String
}

STRING 8
{
Player 1
}

STRING 9
{
Player 2
}

STRING 10
{
Clan 1
}

STRING 11
// Units: hspt (Test Unit), Name (Name (unam))
{
Test Unit
}
Однако, если загрузить второй файл, то игра при проверке нашей локализации игры, прочитает уже файл war3map#0419
war3map#0419
STRING 1
{
ТЕСТ ЛОКАЛИЗАЦИИ
}
STRING 2
{
Не важно
}
STRING 3
{
Описание отсутствует
}
STRING 4
{
Неизвестно
}
STRING 7
{
ТЕСТОВАЯ СТОКА
}
STRING 8
{
ИГРОК 1
}
STRING 9
{
ИГРОК 2
}
STRING 10
{
Клан 1
}
STRING 11
Units: hspt (Test Unit), Name (Name (unam))
{
ТЕСТОВЫЙ ЮНИТ
}

Практика

С теорий разобрались, а теперь практика. Так как мы на XGM, где преобладает русскоговорящее комьюнити, то основной язык у нас будет русский, а язык перевода - английский, и я рекомендую работать именно так, и никак не наоборот (основной английский, перевод русский).
Вот допустим мы сделали свою карту на русском языке, у нас там способности, куча текста в триггерах и так далее, пришло время её перевести.
  1. Извлекаем war3map.wts из карты в любое удобное для нас место
  2. Переводим все строки или выборочно, например я переведу только 1 способность в STRING 12
STRING 12
// Способности: Asps (Похищение магии), Tip (Подсказка: используется)
{
Похищение Русского языка (|cffffcc00T|r)
}
ну и напишу там вот так вот
STRING 12
// Способности: Asps (Похищение магии), Tip (Подсказка: используется)
{
Stealing russian language (|cffffcc00T|r)
}
Да простят меня англоговорящие
  1. Переименовываем war3map.wts в war3map1.wts, чтобы его не перезаписало при импорте
  2. Помещаем наш файл war3map1.wts в корневую папку карты
  3. Устанавливаем нашему файлу локализацию => Установить язык файлов
  1. Переименовываем, чтобы в конечном итоге получилось вот так:
Всё наш файл превратился в war3map#0409.wts
ВАЖНО
Манипуляции по добавлению файла перевода, необходимо будет проводить в самую последнюю очередь, все переводы будут удалены при сохранении карты в World Editor.
Остаётся только проверить, английской версии 1.26 у меня нет, поэтому я буду проверять на Рефордже, но поверьте и на более старых патчах всё будет работать.
И помните, чем древнее ваш способ, и патч на котором вы работаете, тем вы круче (С), но и про современные способы не забываем
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
15
Daro, при конвертации ГУИшных строк в JASS они заменяются на строку формата "TRIGSTR_XXXX", где XXXX - число. Собственно в wts файле эти константы как раз определены, поэтому локальные строки по-любому можно вынести туда.
23
Может кто подскажет? В карте длина паузы в диалогах зависит от длины текста. Если делать мультиязычную карту по описанному выше методу, то при игре двух игроков с разными настройками языка будет десинк. Есть какие идеи обхода этой проблемы?
28
Daro, когда я-таки доделаю свой генератор описаний, то переводить будет довольно просто.

makkad, во время сборки карты высчитывать время на основе самого длинного описания.
33
makkad, во время сборки карты высчитывать время на основе самого длинного описания.
Молодцы что так сделали, а то было бы плохо да
23
PT153, как отослаться к локальным строкам из других языков? И нужно чтобы всё было оптимально, если играющие одноязычны. Т.е. если оба русскоязычны, то и высчитывать время только на основе русскоязычного .wts
15
makkad, можно проверять чему равна любая строка TRIGSTR_XXXX из wts-файла и синкать язык через кэш.

makkad, ещё как вариант можно сравнивать длину звуков, в каждой озвучке они разные.
23
makkad, можно проверять чему равна любая строка TRIGSTR_XXXX из wts-файла и синкать язык через кэш.
Вообщем, сверяться и синкать через кэш каждый раз. Ок. Это ведь можно в любой версии Warcraft?
33
да, в этом и вся суть метода, что можно через любой варкрафт
23
Bergi, Я хотел уточнить что проблем именно с кэшем и синхронизацией нет во всех версиях варкрафт. Это так?
33
Ну мелкие проблемы может и есть, глобально вроде как нет
25
Хочу и сам попробовать перевести какую-нить карту на английский или на русский, для образца, кидайте свой пример, мб что получится
Ооох, теперь выскажусь я. Берите карту Игру в кальмара и смотрите, как мы там реализовали перевод.

Выскажу несколько моментов, которые хотел бы подчеркнуть:
МнОгА бУкАф
  1. Если основной язык по умолчанию будет будет русский, то и карта у не англоязычных интерфейсов (к примеру китайских, корейских, португальских, испанских французских и тд) будет русским, что ооооочень не круто когда весь мир лучше понимает инглиш нежели наш родной русский. Именно по этой причине по умолчанию язык мы ставим английский. А вот для русских уже локализируем игру, чтобы только у русских игра была русской, а у всех остальных на инглише (извините за столько повторов русский).
  2. По поводу триггерного текста и кода. Обычно одна полная строка попадает в файл спокойно. А вот уже разделение по подстрокам в файл не записывается. Но если мы таки хотим записать этот текст по кускам - то можно использовать функцию Externalized string("текст"), которая насильно запишет кусок вашего текста в файл. Эта функция есть даже в 1.26а варике.
  1. Есть момент или баг, что если по стандарту у вас стоит инглиш и есть локализация на русский, то разрабатывать карту должны с английской версией варика (в рефордже, про 1.26а не знаю). Ибо если у вас в варике указана русская локализация, а вы сохраните карту где основной перевод инглиш и есть русская локализация - то оно заменит основную инглиш на русскую, то есть основной станет русская локализация а инглиш потеряется. Скорее всего это баг рефорджевской версии.
  2. Исходя из 1 пункта, карту желательно разрабатывать изначально на инглише. Но если у вас с ним все очень плохо, то можно делать карту на русском, а в конце, когда можно выпускать карту в свет и весь основной контент готов, копируете .wts файл и делаете его как русская локализация (не забываем делать бекапы), а в файле по умолчанию все переводите. Оооооооочень не советую кидать весь текст разом в гугл переводчик. Лучше по предложению отдельно каждый string_XXXX переводить и по своему скилу стараться замечать, те-же фразы используются под вашими словами или берутся снова другие и править сразу текст. Муторно, зато ошибок будет гораздо меньше, и править меньше, и менее стыдно будет потом показывать другим свою работу. (хотя наша карта сделана тоже не идеально и все равно стыдно местами XD )
  3. Еще подмечу, что так-же можно локализировать картинки и звуки, да вообще любой импорт, как минимум в Рефордже. Просто закинув в папку со соответствующей локализацией.
И да, после ЛЮБОГО изменения в строке (в ро это или в триггерах) строку снова надо локализировать и импортировать локализацию. Очень запарно при создании обновы, но привыкнуть можно. Зато играешь с иностранцами спокойно, даже если у тебя интерфейс русский а у них английский будет :)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.