Перейти к содержанию

Мультиязычность сервера


Krivedkin

Рекомендуемые сообщения

Интересует сама реализация.

Пытался сделать через нпц переводчик, но слишком долго всё это делать.

Нашёл одну тему, где говорилось, что есть возможность брать с 2ух файлов (myeng.txt b myru.txt), чтобы не прописывать каждую проверку в каждого нпц.

И задумка появилась, сделать всё через команду @language <ID>.

Хотелось бы по подробнее об этом всём почитать.

Мб кто-нибудь направит?

Заранее спасибо.

Ссылка на комментарий
Поделиться на другие сайты

У меня была идея сделать это через привязку к аккаунту.

Не знаю как описать, но вот сама идея:

switch(select("En","Rus")){
case 1:
set #language, 1;
close;
case 2:
set #language, 0;
close;
}

map,x,y,z	script	kafra	spriteID,{
if(#language == 1) {
mes "hello";
close;
} else {
mes "Привет!";
close;
}
}

Вот что-то типо того.

Изменено пользователем D.Komyakov
Ссылка на комментарий
Поделиться на другие сайты

У меня была идея сделать это через привязку к аккаунту.

Не знаю как описать, но вот сама идея:

switch(select("En","Rus")){
case 1:
set #language, 1;
close;
case 2:
set #language, 0;
close;
}

map,x,y,z	script	kafra	spriteID,{
if(#language == 1) {
mes "hello";
close;
} else {
mes "Привет!";
close;
}
}

Вот что-то типо того.

хуевая идея наполовину

en.txt

setarray array[0][1],"hello","bye","world";

ru.txt

setarray array[1][1],"привет","пока","мир";

function mes_lng(id)
{
mes array[#language][id];
}

npc.txt


map,x,y,z script kafra spriteID,{
callfunc("mes_lng", 1); // привет
callfunc("mes_lng", 2); // мир
next;
callfunc("mes_lng", 3); // пока
close;
}

Ссылка на комментарий
Поделиться на другие сайты

У меня была идея сделать это через привязку к аккаунту.

Не знаю как описать, но вот сама идея:

switch(select("En","Rus")){
case 1:
set #language, 1;
close;
case 2:
set #language, 0;
close;
}

map,x,y,z	script	kafra	spriteID,{
if(#language == 1) {
mes "hello";
close;
} else {
mes "Привет!";
close;
}
}

Вот что-то типо того.

хуевая идея наполовину

en.txt

setarray array[0][1],"hello","bye","world";

ru.txt

setarray array[1][1],"привет","пока","мир";

function mes_lng(id)
{
mes array[#language][id];
}

npc.txt


map,x,y,z script kafra spriteID,{
callfunc("mes_lng", 1); // привет
callfunc("mes_lng", 2); // мир
next;
callfunc("mes_lng", 3); // пока
close;
}

То ли я туплю, то ли тут для каждого раза надо задавать массив.

А ведь так большого нпц устанешь записывать.

Изменено пользователем D.Komyakov
Ссылка на комментарий
Поделиться на другие сайты

en.txt

setarray array[0][1],"hello","bye","world";

ru.txt

setarray array[1][1],"привет","пока","мир";

выделенное это id языка, т.е. сколько хочешь разных, а не каждый раз пересоздавать

Это не у нпц записывать надо, а в языковом файле. Тогда переводить в разы проще и быстрее будет. Но надо изначально делать НПЦов под такую структуру

Ссылка на комментарий
Поделиться на другие сайты

en.txt

setarray array[0][1],"hello","bye","world";

А разве eAthena или rAthena поддерживает двумерные массивы в скриптах? :rolleyes:

Изменено пользователем Functor
Ссылка на комментарий
Поделиться на другие сайты

Думаю можешь понаблюдать за развитием вот этого проекта. Возможно найдешь что ищешь..

К сожалению у меня этот сайт не работает.

Ссылка на комментарий
Поделиться на другие сайты

en.txt

setarray array[0][1],"hello","bye","world";

А разве eAthena или rAthena поддерживает двумерные массивы в скриптах? :rolleyes:

ответ вы и сами знаете. По дефолту - нет. А так сорц где-то валялся на двумерные массивы... Сейчас же его трудно найти.

По поводу переводов - массивы в игре - бред. Лучше крепить их с базой. Там и переводить легче, и быстрее. И кода писать сильно много не нужно. Но да... переводы - запаристая, но очень хорошая идея.

Ссылка на комментарий
Поделиться на другие сайты

По поводу переводов - массивы в игре - бред. Лучше крепить их с базой. Там и переводить легче, и быстрее.

Ага. А еще добавлю - у меня, давненько уже правда, была мысль сделать что-то подобное. Ну два языка и т.п. Делал через массивы. Однако после некоторого количества они переставали записываться в память и были недоступны в эмуляторе в итоге. Поленился разобраться что и куда и вообще забил (:

Ссылка на комментарий
Поделиться на другие сайты

en.txt

setarray array[0][1],"hello","bye","world";

А разве eAthena или rAthena поддерживает двумерные массивы в скриптах? :rolleyes:

А это я уже не помню) Я на пхп пишу, а не скрипты для eA :rolleyes:

Ссылка на комментарий
Поделиться на другие сайты

Ага. А еще добавлю - у меня, давненько уже правда, была мысль сделать что-то подобное. Ну два языка и т.п. Делал через массивы. Однако после некоторого количества они переставали записываться в память и были недоступны в эмуляторе в итоге. Поленился разобраться что и куда и вообще забил (:

script_commands.txt

Arrays cannot hold more than 128 variables. (So the last one can't have a number higher than 127)
Ссылка на комментарий
Поделиться на другие сайты

en.txt

setarray array[0][1],"hello","bye","world";

А разве eAthena или rAthena поддерживает двумерные массивы в скриптах? :rolleyes:

ответ вы и сами знаете. По дефолту - нет. А так сорц где-то валялся на двумерные массивы... Сейчас же его трудно найти.

По поводу переводов - массивы в игре - бред. Лучше крепить их с базой. Там и переводить легче, и быстрее. И кода писать сильно много не нужно. Но да... переводы - запаристая, но очень хорошая идея.

Это да.

Лучше крепить всё с базой, потому что вносить в каждого нпц массив - тихий ужас + начались проблемы с дупликатами лейблов.

Перевод хорошая идея, особенно, если она реализована на 70-80%.

Остались самые громосткие части - перевод квестов по городам.

Подскажите, как сделать, чтобы при вводе команды @language или после разговора с нпц, сервер считывал информацию для игрока с определенной папки (ru или eng).

Куда мне копать?

Изменено пользователем Krivedkin
Ссылка на комментарий
Поделиться на другие сайты

Ага. А еще добавлю - у меня, давненько уже правда, была мысль сделать что-то подобное. Ну два языка и т.п. Делал через массивы. Однако после некоторого количества они переставали записываться в память и были недоступны в эмуляторе в итоге. Поленился разобраться что и куда и вообще забил (:

script_commands.txt

Arrays cannot hold more than 128 variables. (So the last one can't have a number higher than 127)

Массивы были не слишком большими. Их много просто было (:

Ссылка на комментарий
Поделиться на другие сайты

Ага. А еще добавлю - у меня, давненько уже правда, была мысль сделать что-то подобное. Ну два языка и т.п. Делал через массивы. Однако после некоторого количества они переставали записываться в память и были недоступны в эмуляторе в итоге. Поленился разобраться что и куда и вообще забил (:

script_commands.txt

Arrays cannot hold more than 128 variables. (So the last one can't have a number higher than 127)

Массивы были не слишком большими. Их много просто было (:

Массив составляет 3-4 строчки, но, как писал выше, возникают проблемы с дупликатами лейблов.

Лейблы приходится перезаписывать под себя.

Ссылка на комментарий
Поделиться на другие сайты

Массивы были не слишком большими. Их много просто было (:

А много, это сколько? :)

Врать не буду, не помню уже. Помню, что русские тексты все нормально отображались а около 2\3 английских при переключении языка были пустыми

Ссылка на комментарий
Поделиться на другие сайты

Массивы были не слишком большими. Их много просто было (:

А много, это сколько? :)

На каждого нпц.

Сам, думаю, догадаешься сколько это выйдет.

Ссылка на комментарий
Поделиться на другие сайты

На каждого нпц.

Сам, думаю, догадаешься сколько это выйдет.

Меня интересовало количество задействованных массивов, при котором проявлялся баг. А не сколько он их мог сделать.

Почему Вы решили, что он перевел всех нпц? Вам известны объемы выполненной им работы по переводу нпц и момент проявления бага?

Ссылка на комментарий
Поделиться на другие сайты

На каждого нпц.

Сам, думаю, догадаешься сколько это выйдет.

Меня интересовало количество задействованных массивов, при котором проявлялся баг. А не сколько он их мог сделать.

Почему Вы решили, что он перевел всех нпц? Вам известны объемы выполненной им работы по переводу нпц и момент проявления бага?

Хватает 1ого массива.

У меня на данный момент закончен перевод всех нпц.

По тому пути, по которому я пошёл, баг выявлялся и я избрал другой, но он ещё не проверен в деле, всего лишь задумка.

Ссылка на комментарий
Поделиться на другие сайты

Хватает 1ого массива.

В посте №13 я писал про лимит переменных в массиве.

Если Вы имеете в виду ограничение количества переменных в массиве, то это не баг.

Если баг проявляется при использовании массива с количеством переменных <= 128, то приведите пожалуйста пример такого массива.

Ссылка на комментарий
Поделиться на другие сайты

Хватает 1ого массива.

В посте №13 я писал про лимит переменных в массиве.

Если Вы имеете в виду ограничение количества переменных в массиве, то это не баг.

Если баг проявляется при использовании массива с количеством переменных <= 128, то приведите пожалуйста пример такого массива.

Переменная одна language==1, этого хватает.

Баг выявляется в дупликатах доп лейблов скрипта,т.е. нельзя к примеру 2 раза в 1 скрипте нпц повторять(merchant.txt) S_GiveSerial: в русском варианте и в английском варианте.

Ссылка на комментарий
Поделиться на другие сайты

Хватает 1ого массива.

В посте №13 я писал про лимит переменных в массиве.

Если Вы имеете в виду ограничение количества переменных в массиве, то это не баг.

Если баг проявляется при использовании массива с количеством переменных <= 128, то приведите пожалуйста пример такого массива.

Переменная одна language==1, этого хватает.

Баг выявляется в дупликатах доп лейблов скрипта,т.е. нельзя к примеру 2 раза в 1 скрипте нпц повторять(merchant.txt) S_GiveSerial: в русском варианте и в английском варианте.

Почему это вдруг баг? Элементарная логика подсказывает, что лейблы должны быть уникальными в пределах нпц... В случае необходимости лучше уж называть их S_GiveSerial_ru: и S_GiveSerial_en: или S_GiveSerial1: и S_GiveSerial0: и так далее..

Ссылка на комментарий
Поделиться на другие сайты

Хватает 1ого массива.

В посте №13 я писал про лимит переменных в массиве.

Если Вы имеете в виду ограничение количества переменных в массиве, то это не баг.

Если баг проявляется при использовании массива с количеством переменных <= 128, то приведите пожалуйста пример такого массива.

Переменная одна language==1, этого хватает.

Баг выявляется в дупликатах доп лейблов скрипта,т.е. нельзя к примеру 2 раза в 1 скрипте нпц повторять(merchant.txt) S_GiveSerial: в русском варианте и в английском варианте.

Почему это вдруг баг? Элементарная логика подсказывает, что лейблы должны быть уникальными в пределах нпц... В случае необходимости лучше уж называть их S_GiveSerial_ru: и S_GiveSerial_en: или S_GiveSerial1: и S_GiveSerial0: и так далее..

Вот именно, что делает всё более замудрённым.=)

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...
Яндекс.Метрика