YellowStar
poon
offline
Опыт:
15,144Активность: |
Хранилище локализованных строк в wc3
Данная статья выложена для ознакомления юзеров с некоторыми методами работы с архивами.
Чтобы переводить по данному методу, вы должны иметь под рукой вторую мою статью о мультиязычности карт (где описана одна из MPQ возможностей) так как данная статья будет ссылаться на прошлую(LocaleID). Требование:
Знаниче Jass [Среднее] Прочтение прошлой статьи по MPQ переводам. Много времени и нервов.
Ну для начала загрузите файл карты. Для перевода нам потребуеться игровой кэш, так что создайте его в глобальных переменных(jass - кнопка переменных ; vjass - globals,englobals). Теперь создадим sample прелоад file. Создаем триггер срабатывающий на запуск карты в warcraft3ft и добавляем туда такую команду.
call PreloadGenStart()
call PreloadGenEnd("PRELOAD\\MySamplePreload.pld") можно и .j В целом у нас все готово переходим ко второму этапу. (Не забудьте закоментить строки прелоадГенСтарт и ГенЕнд, иначе потрет вашу дальнейшую работу, эти функции нам больше не понадобяться)
Чтобы понять как происходит перевод строк мы должны будем разобраться в .pld файле.
Прелоадер может:
Открыв наш файл MySamplePreload.pld мы видим такую конструкцию.
function PreloadFiles takes nothing returns nothing
call PreloadEnd(0.0)
endfunction
Заметьте функция PreloadFiles ОБЯЗАТЕЛЬНАЯ!!!! Если её удалить то прелоадер работать не будет. Кстати как пример могу показать что будет работать внутри прелоад файла. Также если в коде прелоадера будет хотя бы одна ошибка, весь прелоадер работать не будет!!
globals
boolean b=true endglobals function MessageTrue takes nothing returns string
return "TRUE" endfunction function MessageFalse takes nothing returns string
return "FALSE" endfunction function PreloadFiles takes nothing returns nothing
if b then call DisplayTextToPlayer(Player(0),0,0,MessageTrue()) else call DisplayTextToPlayer(Player(0),0,0,MessageFalse()) endif endfunction собственно этого достаточно знать чтобы перейти к следующему этапу.
Скопируем наш .pld файл столько количество раз, сколько будет у нас версий с переводом.
Далее мы попробуем локализовать такой код!!! function TestLocalization takes nothing returns nothing
call BJDebugMsg("That version ENGLISH") endfunction Чтобы его локализовать нам придеться добавить одну функцию...
function PreloadLocalPlayer takes player p returns boolean
return GetLocalPlayer()==p endfunction Далее мы делаем нашу запись такого типа.
function TestLocalization takes nothing returns nothing
local integer i=0 loop exitwhen i>11 if PreloadLocalPlayer(Player(p)) then call BJDebugMsg("That version ENGLISH") endif set i=i+1 endloop endfunction Это требуеться потому что работа с LocaleID подразумевает работу с Локальным игроком(так как мы будем использовать КЭШ!)
Собственно переходим к Кэшовой записи. Меняем call BJDebugMsg("That version ENGLISH")
на
call BJDebugMsg(GetStoredString(InitGameCache("SampleLocal"),"Version","That version ENGLISH"))
Теперь добавляем в наши .pld файлы такие строки. (К примеру у нас две версии RUS и ENG)
RUS:
call StoreString(InitGameCache("SampleLocal"),"Version","That version ENGLISH","Эта версия РУССКАЯ") ENG: call StoreString(InitGameCache("SampleLocal"),"Version","That version ENGLISH","That version ENGLISH") На данном этапе все. Переходим к следующему этапу.
Чтобы подключить перевод к карте, вам потребуеться изучить другую мою статью по поводу MPQ. Если вы её читали то заносим наши прелоад файлы в карту с ОДИНАКОВЫМИ именами и разными LocaleID. Русский перевод с RUS LocaleID ; Английскую с ENG LocaleID.
Теперь чтобы подключить перевод в карте, мы в скрипте при загрузки карты (вместо прелоад GENStart и ENd) записываем такую функцию. call Preloader("SampleLocaliz\\MySamplePreload.pld")
Это запрелоадит все строки в игровой Кэш, каждому пользователю на комп, в зависимости от версии варкрафта. (Совет: синхронизируйте данные внутри Кэшей после использование переменной, иначе возможен Десинк.(SyncStoredValue(gamecache,string,string)))
Все перевод в принципе готов. Все что вам осталось сделать это перевести строки и занести их в свои .pld и обновлять постоянно по количеству строк. Далее дело техники ;)...
Есди же вы все же решили переводить проффесионально то как вариант подойдет еще один метод. Копируем .wts файл. И меняем ему локальный ID. Далее достаем командой GetLocalizedString ;). Так будет намного удобнее и правильнее (Не будет различных десинхнронизаций)
P.S: Возможно выложу пример если не будет лень заниматься его реализацией.
Спасибо за внимание. |
24.11.2009, 12:56 | #1
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
iZucken
ШТО
offline
Опыт:
17,960Активность: |
Это же... КРУТО!!! Особенно многим пригодится вот это: Я о таком подозревал, но, думал что можно обойтись просто кешем... |
24.11.2009, 20:18 | #2
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
ScorpioT1000
Работаем
online
Опыт: отключен
|
|
25.11.2009, 12:09 | #3
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
FunkieFoO
offline
Опыт:
7,059Активность: |
А кстати насцет прелоада... в прелоад можно записать любой код? например си++ мона?
FunkieFoO добавил: А кстати насцет прелоада... в прелоад можно записать любой код? например си++ мона? |
01.12.2009, 08:14 | #4
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Sebra
offline
Опыт:
5,603Активность: |
narayan:
Раз уж всё равно делал, брось примерчики... А то уж больно сомнительно. ScorpioT1000, Не о том совсем. |
03.12.2009, 20:44 | #5
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
ScorpioT1000
Работаем
online
Опыт: отключен
|
Для локализации строк жасс-кода моя вещ рулит ) А так да, это солюшен, молодец. |
03.12.2009, 20:52 | #6
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Anufis
offline
Опыт:
6,290Активность: |
Ты можешь написать, не просто как создавать пустой прелоад, а что-то туда записать еще триггерами? |
08.12.2009, 17:55 | #7
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
YellowStar
poon
offline
Опыт:
15,144Активность: |
Как бы там в примерах написано все:). Реализовать можно самому за пять минут сеив лоад -,- как бы геимкэш работает внутри... |
08.12.2009, 18:00 | #8
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Anufis
offline
Опыт:
6,290Активность: |
narayan:
В каком пункте, а то я слепой. Не вижу, как заставить карту создать pld-файл и написать туда 5 строк триггерно. |
08.12.2009, 18:06 | #9
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Тзинч
offline
Опыт:
4,948Активность: |
Хм... хорошая статья. Но ей не хватает нормальной оформления. Например: те же примеры с кодом. Думает, бросать моделлинг и изучать жасс. |
09.12.2009, 12:31 | #10
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
ZeToX2007
offline
Опыт:
7,009Активность: |
Цитата:
можете кинуть пример ? |
|
24.04.2010, 21:01 | #11
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
YellowStar
poon
offline
Опыт:
15,144Активность: |
В барахолке выкладывал. |
25.04.2010, 00:08 | #12
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|