Доколе, доколе я буду видеть это?
Когда-то, а конкретно 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 у меня нет, поэтому я буду проверять на Рефордже, но поверьте и на более старых патчах всё будет работать.
И помните, чем древнее ваш способ, и патч на котором вы работаете, тем вы круче (С), но и про современные способы не забываем
`
ОЖИДАНИЕ РЕКЛАМЫ...
28
Это статья берги или перевод аналогичной статьи с хайва?
33
Это моя статья, примерно полгода goodlyhero скинул карту в дискорд XGM, я ещё тогда глянул, как оно устроено и разобрался, тут в принципе просто всё. Опубликовал, потому что меня триггернул grylll, своими скринами на которых по 2 языка в абилках👿

А то что аналогичное вышло на хайве 2 дня назад, это так совпало 😂

Вот у меня есть небольшой пруф
где я скачивал карту из дискорда в феврале, но она там ещё раньше появилась
Загруженные файлы
12
А вот и комментарий от Daro.
Все же перевод карты даже если ограничиваться файлом .wts долгий и трудоемкий процесс, который так или иначе придется делать в ручную. Привести весь файл ,wts целиком автоматически через какой-то онлайн переводчик , тоже не получится и мало кто захочет так заморачиваться.
Если рассматривать только патч 1.26.То у нас будет куча сложностей, текстовые строки в триггерах и в коде , которые не идут в .wts файл а остаются (пример: local string s = "|c00FF0303Я не могу носить два предмета одного класса!|r"). Так что делать в таком случае, выносить весь игровой текст, который выводится на экран в глобалки? Делать базу перевода в ручную с проверкой локализации?
Дальше заметил такой факт , что wts заполняется странно и довольно таки рандомно, огрызки от описания одной способности могут быть раскиданы очень далеко от друга. Дальше придется как-то обновлять версию перевода (англ) каждый раз после сохранения карты и добавлении изменений. Либо вести параллельно 2 и обновлять 2 версии текста самостоятельно каждый раз.
Все кажется что перевести англ. карту на русский язык для нас будет легче, чем наоборот.
Я не знаю может у кого есть скрипт на Пайтоне и что-то подобное , чтоб автоматически правильно перевести файл wts.
33
Daro, да хорошие замечания, способ идеально подойдёт для тех, кто очень много работает с ро и пишет текст целиком на через ГУИ, я думаю для Lord_Teo или же для grylll, с учетом их структуры карт, надо пробовать. Хочу и сам попробовать перевести какую-нить карту на английский или на русский, для образца, кидайте свой пример, мб что получится
12
Bergi, Даро тогда может попробовать перевести свою карту - Lich Defense на англ язык, как раз простая ГУИ+РО карта. Посмотреть что из этого получиться в итоге. Всего 1800 строк wts.
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
Ну мелкие проблемы может и есть, глобально вроде как нет
26
Хочу и сам попробовать перевести какую-нить карту на английский или на русский, для образца, кидайте свой пример, мб что получится
Ооох, теперь выскажусь я. Берите карту Игру в кальмара и смотрите, как мы там реализовали перевод.

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

Bergi
Ну только посмотри на это видео, на эту реакцию, когда и вопросов к карте нету за непонимание происходящего. Когда игроки тупо веселятся и не парятся над текстом :D
(при этом язык у чела не инглиш и не русский, да и вряд-ли бы русский понял бы :D )
8
konvan5:
Все-таки английский язык, людей из разных стран, знают больше, чем русский язык, и стоит понимать про эту вещь, о чем я могу согласиться с Конваном.
Я до сих пор считаю, что лучше все таки разделять карты на разные версии, и делать приписку ENG, RU, и тд, по мне это самый лучший способ, так же если перевод планируется не на финальную версию, то можно развивать свою карту, в разную сторону, допустим в русской версии ты понял, что карта пошла как-то не как ты хотел, реализуешь это в английской версии, по сути можно для себя разные пути в принципе сделать для одной карты таким способом.
Еще конечно есть способ с опросами, когда либо админ, либо игроки голосуют за выбор языка.
Есть еще диалоговые клавиши, как в Маньяке с Пилой, когда у каждого человека, может быть выбран свой язык.
Но способ, описанный в статье, для меня бы не подошел думаю, но для других людей, надеюсь подойдет.
В любом случае спасибо за статью!)
33
Все-таки английский язык, людей из разных стран, знают больше, чем русский язык, и стоит понимать про эту вещь, о чем я могу согласиться с Конваном.
Я и сам согласен, но это в корне не правильно, у нас вообще огромное количество русскоговорящих, делает карты только и сразу на английском типа для "охвата", это совершенно не правильно, они принижают свой язык, свою культуру.
8
Все-таки английский язык, людей из разных стран, знают больше, чем русский язык, и стоит понимать про эту вещь, о чем я могу согласиться с Конваном.
Я и сам согласен, но это в корне не правильно, у нас вообще огромное количество русскоговорящих, делает карты только и сразу на английском типа для "охвата", это совершенно не правильно, они принижают свой язык, свою культуру.
Ню, в данном случае, да, я не понимаю тех людей, кто только на английскую аудиторию работает, когда при этом человек русскоговорящий, и вполне можешь на русском языке карту сделать, или изначально можно было сделать так, но это уж воля такова у людей, видимо считают, что так правильно.
26
Я до сих пор считаю, что лучше все таки разделять карты на разные версии, и делать приписку ENG, RU, и тд, по мне это самый лучший способ, так же если перевод планируется не на финальную версию, то можно развивать свою карту, в разную сторону, допустим в русской версии ты понял, что карта пошла как-то не как ты хотел, реализуешь это в английской версии, по сути можно для себя разные пути в принципе сделать для одной карты таким способом.
Перевод в любом случае придется делать для 2 версий, а так ты еще и карту будешь делать 2 раза :D
+ так будут русские играть только с русскими и остальные только на инглише. А локализация позволяет в одной игре играть всем, и русским и англоязычным людям с полным пониманием происходящего.
8
konvan5:
Карту, не обязательно делать два раза) Я говорю если ты прямо делаешь карту, ты можешь сделать разделение в двух версиях, а перевод лучше осуществлять в финальной версии, когда человек считает, что более менее все сделано, тут даже не нужно карту второй раз делать, просто нужно переводить только будет.
Ну, а есть смысл такое делать, когда люди в принципе привыкли, когда такой локализации прямо нету? Может быть конечно где то это и может понадобиться, но а так обычно, я не видел, что кто-то так пытался сделать. Обычно для наших регионов используются следующие языки: Русский и Английский, русскоговорящий человек скорее всего играющий с людьми говорящими на англ языке, будет знать англ хотя бы на минимальном уровне.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.