Thule
Умник
Мультиязычность для сервера
Уровень сложности: средний
Вступление: каждый из вас хотя бы раз заходил на западный сервер и имел дискомфорт из-за языкового барьера. Если для русскоязычной аудитории эта проблема не стоит крайне остро, так как мы изучаем английский в учебных заведениях и можем пару слов перевести, то нашим друзьям из-за бугра находиться на русском сервере невозможно.
Выход есть - мультиязычность! С помощью неё можно реализовать на сервер одновременный перевод на два языка (можно больше).
Делать это по принципу:
PHP:
if(PlayerLang[playerid] == 0) SendClientMessage(playerid,-1,"Русский");
else SendClientMessage(playerid,-1,"English");
Вопросом двойного языка я занялся пару месяцев назад. Тогда я вступил в проект по созданию зомби-сервера. Как сделать удобную систему перевода, в плане кода, я придумал быстро, но тем не менее, это оставался долгий процесс. Проект распался. А вот пару дней назад мне вспомнились попытки подружиться с западом, поэтому я вернулся к старой затее. Проекта у меня нет, поэтому поделиться полученным опытом я решил с широкой публикой.
Теория:
Проще всего помещать текст в глобальные массивы:
PHP:
new text[2][] = {
{"Привет, мир!"},
{"Hello world!"}
};
PHP:
SendClientMessage(playerid,-1,text[PlayerLang[playerid]]
Все же у такого способа есть некоторые маленькие недостатки в удобстве использования.
Во-первых, необходимо много писать букв.
Во-вторых, иногда степень вложений в квадратные скобочки может зашкаливать.
Решение (отсюда начинается урок):
Для облегчения работы с проектом перевода я создал программу. Она позволяет автоматизировать многие действия и что самое важное: вы можете предоставить заняться переводом на другой язык совершенно непонимающего в павн человека.
2 - поле для текста под ID 1.
3 - список текущих массивов-перевода.
4 - название массива (не вводите туда русские или спец. символы!)
Первым делом, создайте необходимые "переводы". Сделать это просто: жмите кнопку "Добавить" (над списком), введите имя массива, добавьте русский и английский текст. Не забудьте сохранить созданный проект с помощью "Файл -> Сохранить как...".
Выберите папку include вашего сервера, для сохранения проекта.
Второй пункт: заходим в pwn файл вашего сервера и добавляем инклуд:
PHP:
#include "../include/название.inc"
Или можно включить переменную в enum pInfo, например, но не забудьте подкорректировать 4й пункт.
Четвертый пункт: создадим макрос, для упрощения себе жизни:
PHP:
#define L(%0,%1) %1[PlayerLang[%0]]
PHP:
#define L(%0) %0[PlayerLang[playerid]]
PHP:
SendClientMessage(playerid,-1,L(playerid,HelloWorld));
Готово! Все для двойного перевода сервера есть. Вам осталось только изучить английский :bs: или найти знающего человека.
PHP:
#include <a_samp>
#include "../include/lang.inc"
new PlayerLang[MAX_PLAYERS];
#define L(%0,%1) %1[PlayerLang[%0]]
main()
{
print("hh");
}
public OnGameModeInit()
{
SetGameModeText("LANG!");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}
public OnPlayerConnect(playerid)
{
ShowPlayerDialog(playerid,1,DIALOG_STYLE_MSGBOX,"Select language:","{FFFFFF}","Русский","Английский");
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 1)
{
PlayerLang[playerid] = !response;
ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,L(playerid,EnterTitle),L(playerid,EnterMsg),"X","");
}
return 1;
}
Скачать программу:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Вирус тотал:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Последнее редактирование:
