ziggi
04.09.2016, 18:37
zlang
GitHub (https://github.com/Open-GTO/zlang)
Описание
Языковая система для каждого игрока на основе GVar.
Требования
- Плагин GVar (https://github.com/samp-incognito/samp-gvar-plugin)
- foreach (https://github.com/Open-GTO/foreach) - не обязательно, но желательно
Библиотеки, совместимые с zlang
- mdialog (http://pro-pawn.ru/showthread.php?14311) - новый вид для функций Dialog_Open, Dialog_Message и Dialog_MessageEx.
Константы
Константа
Значение по умолчанию
Можно переназначить?
MAX_LANGS
2
Да
LANG_VAR_OFFSET
1000
Да
LANG_IGNORED_FIRST_SYMBOL
'\0', '#', ';'
Да
MAX_LANG_VAR_STRING
64
Да
MAX_LANG_VALUE_STRING
144
Да
MAX_LANG_SEPARATOR_STRING
64
Да
MAX_LANG_MVALUE_STRING
MAX_LANG_VALUE_STRING * 25
Да
MAX_LANG_CODE
2
Да
MAX_LANG_NAME
16
Да
MAX_LANG_FILES
5
Да
MAX_LANG_FILENAME
256
Да
INVALID_LANG_ID
Lang:-1
Нет
INVALID_LANG_FILE_ID
-1
Нет
Функции
Добавить язык
Lang:Lang_Add(code[], name[])
Удалить язык
Lang_Remove(Lang:lang)
Загрузить языковой файл
Lang_LoadFile(Lang:lang, filename[])
Выгрузить языковой файл
Lang_UnloadFile(Lang:lang, filename[] = "", fid = INVALID_LANG_FILE_ID)
Перезагрузить все языковые файлы для языка
Lang_Reload(Lang:lang)
Получить язык по его коду или имени
Lang:Lang_Get(code[] = "", name[] = "")
Установить название языка
Lang_SetName(Lang:lang, name[])
Получить название языка
Lang_GetName(Lang:lang, name[], const size = sizeof(name))
Получить название языка и возвратить его
Lang_ReturnName(Lang:lang)
Установить код языка
Lang_SetCode(Lang:lang, code[])
Получить код языка
Lang_GetCode(Lang:lang, code[], const size = sizeof(code))
Получить код языка и возвратить его
Lang_ReturnCode(Lang:lang)
Получить строку языковых кодов, разделённых символов separator
Lang_GetCodes(result[], const size = sizeof(result), const separator = '/', const bool:isuppercase = false)
Получить строку языковых кодов и вернуть её
Lang_ReturnCodes(const separator = '/', const bool:isuppercase = false)
Проверить язык на валидность
Lang_IsValid(Lang:lang)
Получить количество языков
Lang_GetCount()
Установить язык игроку
Lang_SetPlayerLang(playerid, Lang:lang)
Получить язык игрока
Lang:Lang_GetPlayerLang(playerid)
Установить язык игроку по коду
Lang:Lang_SetPlayerLangByCode(playerid, code[])
Установить язык игроку по названию
Lang:Lang_SetPlayerLangByName(playerid, name[])
Установить язык по умолчанию
Lang_SetDefaultLang(Lang:lang)
Получить язык по умолчанию
Lang_GetDefaultLang()
Получить языковой текст
Lang_GetText(Lang:lang, var[], text[], const size = sizeof(text), {Float, _}:...)
Получить языковой текст для игрока
Lang_GetPlayerText(playerid, var[], text[], const size = sizeof(text), {Float, _}:...)
Получить языковой текст для языка по умлочанию
Lang_GetDefaultText(var[], text[], const size = sizeof(text), {Float, _}:...)
Удалить языковой текст
Lang_RemoveText(Lang:lang, var[])
Проверить существование языкового текста
Lang_IsTextExists(Lang:lang, var[])
Языковая функция printf с языком по умолчанию
Lang_printf(var[], {Float, _}:...)
Языковая функция printf с определённым языком
Lang_printfex(Lang:lang, var[], {Float, _}:...)
Языковая функция print с языком по умолчанию
Lang_print(var[])
Языковая функция print с определённым языком
Lang_printex(Lang:lang, var[])
Отправить языковой текст игроку
Lang_SendText(playerid, var[], {Float, _}:...)
Отправить языковой текст всем игрокам
Lang_SendTextToAll(var[], {Float, _}:...)
Отправить языковой текст всем игрокам в массиве
Lang_SendTextToPlayers(players[], var[], {Float, _}:...)
Показать языковой диалог для игрока
Lang_ShowDialog(playerid, dialogid, style, var_caption[], var_info[], var_button1[], var_button2[], {Float, _}:...)
Показать языковой GameText для игрока
Lang_GameText(playerid, time, style, var[], {Float, _}:...)
Показать языковой GameText для всех игроков
Lang_GameTextForAll(time, style, var[], {Float, _}:...)
Создаёт TextDraw игрока с языковой переменной
Lang_CreatePlayerTextDraw(playerid, Float:x, Float:y, var[], {Float, _}:...)
Устанавливает языковой текст для TextDraw игрока
Lang_PlayerTextDrawSetString(playerid, PlayerText:text, var[], {Float, _}:...)
Формат языкового файла
Формат языкового файла представляет из себя обычный INI файл (без секций). Поддерживаются различные спецсимволы, такие как: \n, \t, \%, \s, \\, \<число>, \x<hex>.
Переменные
Вы можете использовать переменные в ваших текстовых файлах. Это поддерживает любой уровень вложенности.
HELLO_MSG = Hello
COLOR_RED = {FF0000}
COLOR_GREEN = {00FF00}
COLOR_WHITE = {FFFFFF}
NAME_ONE = \v(COLOR_RED)Alex\v(COLOR_WHITE)
NAME_TWO = \v(COLOR_GREEN)Peter\v(COLOR_WHITE)
MESSAGE_HELLO = \v(COLOR_WHITE)\v(HELLO_MSG) \v(NAME_ONE) and \v(NAME_TWO)
Пример использования
#include <a_samp>
#include <gvar>
#include <zlang>
enum e_LANG_INFO {
Lang:e_LANG_EN,
Lang:e_LANG_RU,
}
static
gLang[e_LANG_INFO];
main() {}
public OnGameModeInit()
{
// загрузить языки
gLang[e_LANG_RU] = Lang_Add("ru", "Russian");
gLang[e_LANG_EN] = Lang_Add("en", "English");
Lang_LoadFile(gLang[e_LANG_RU], "ru.ini");
Lang_LoadFile(gLang[e_LANG_EN], "en.ini");
// установить английский как язык по умлочанию
Lang_SetDefaultLang(gLang[e_LANG_EN]);
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp(cmdtext, "/ru", true, 3) == 0) {
Lang_SetPlayerLang(playerid, gLang[e_LANG_RU]);
Lang_SendText(playerid, "LANGUAGE_CHANGED");
return 1;
}
if (strcmp(cmdtext, "/en", true, 3) == 0) {
Lang_SetPlayerLang(playerid, gLang[e_LANG_EN]);
Lang_SendText(playerid, "LANGUAGE_CHANGED");
return 1;
}
if (strcmp(cmdtext, "/help", true, 5) == 0) {
Lang_SendText(playerid, "HELLO_MSG");
Lang_SendText(playerid, "COMMANDS_LIST");
return 1;
}
if (strcmp(cmdtext, "/help330", true, 5) == 0) {
Lang_SendText(playerid, "Hello, World!");
Lang_SendText(playerid, "Commands: /help, /en, /ru");
return 1;
}
return 0;
}
scriptfiles/en.ini:
COLOR_GRAY = {CCCCCC}
LANGUAGE_CHANGED = \v(COLOR_GRAY)Now you are using english language.
HELLO_MSG = Hello, {00FF00}World!
COMMANDS_LIST = Commands: /help, /en, /ru
scriptfiles/ru.ini:
COLOR_GRAY = {CCCCCC}
LANGUAGE_CHANGED = \v(COLOR_GRAY)Теперь вы используете русский язык.
HELLO_MSG = Привет, {00FF00}Мир!
COMMANDS_LIST = Команды: /help, /en, /ru
# in zlang 3.3.0
Hello, World! = \v(HELLO_MSG)
Commands: /help, /en, /ru = \v(COMMANDS_LIST)
Скачать
Последнюю версию вы всегда можете найти на странице релизов GitHub (https://github.com/Open-GTO/zlang/releases).
GitHub (https://github.com/Open-GTO/zlang)
Описание
Языковая система для каждого игрока на основе GVar.
Требования
- Плагин GVar (https://github.com/samp-incognito/samp-gvar-plugin)
- foreach (https://github.com/Open-GTO/foreach) - не обязательно, но желательно
Библиотеки, совместимые с zlang
- mdialog (http://pro-pawn.ru/showthread.php?14311) - новый вид для функций Dialog_Open, Dialog_Message и Dialog_MessageEx.
Константы
Константа
Значение по умолчанию
Можно переназначить?
MAX_LANGS
2
Да
LANG_VAR_OFFSET
1000
Да
LANG_IGNORED_FIRST_SYMBOL
'\0', '#', ';'
Да
MAX_LANG_VAR_STRING
64
Да
MAX_LANG_VALUE_STRING
144
Да
MAX_LANG_SEPARATOR_STRING
64
Да
MAX_LANG_MVALUE_STRING
MAX_LANG_VALUE_STRING * 25
Да
MAX_LANG_CODE
2
Да
MAX_LANG_NAME
16
Да
MAX_LANG_FILES
5
Да
MAX_LANG_FILENAME
256
Да
INVALID_LANG_ID
Lang:-1
Нет
INVALID_LANG_FILE_ID
-1
Нет
Функции
Добавить язык
Lang:Lang_Add(code[], name[])
Удалить язык
Lang_Remove(Lang:lang)
Загрузить языковой файл
Lang_LoadFile(Lang:lang, filename[])
Выгрузить языковой файл
Lang_UnloadFile(Lang:lang, filename[] = "", fid = INVALID_LANG_FILE_ID)
Перезагрузить все языковые файлы для языка
Lang_Reload(Lang:lang)
Получить язык по его коду или имени
Lang:Lang_Get(code[] = "", name[] = "")
Установить название языка
Lang_SetName(Lang:lang, name[])
Получить название языка
Lang_GetName(Lang:lang, name[], const size = sizeof(name))
Получить название языка и возвратить его
Lang_ReturnName(Lang:lang)
Установить код языка
Lang_SetCode(Lang:lang, code[])
Получить код языка
Lang_GetCode(Lang:lang, code[], const size = sizeof(code))
Получить код языка и возвратить его
Lang_ReturnCode(Lang:lang)
Получить строку языковых кодов, разделённых символов separator
Lang_GetCodes(result[], const size = sizeof(result), const separator = '/', const bool:isuppercase = false)
Получить строку языковых кодов и вернуть её
Lang_ReturnCodes(const separator = '/', const bool:isuppercase = false)
Проверить язык на валидность
Lang_IsValid(Lang:lang)
Получить количество языков
Lang_GetCount()
Установить язык игроку
Lang_SetPlayerLang(playerid, Lang:lang)
Получить язык игрока
Lang:Lang_GetPlayerLang(playerid)
Установить язык игроку по коду
Lang:Lang_SetPlayerLangByCode(playerid, code[])
Установить язык игроку по названию
Lang:Lang_SetPlayerLangByName(playerid, name[])
Установить язык по умолчанию
Lang_SetDefaultLang(Lang:lang)
Получить язык по умолчанию
Lang_GetDefaultLang()
Получить языковой текст
Lang_GetText(Lang:lang, var[], text[], const size = sizeof(text), {Float, _}:...)
Получить языковой текст для игрока
Lang_GetPlayerText(playerid, var[], text[], const size = sizeof(text), {Float, _}:...)
Получить языковой текст для языка по умлочанию
Lang_GetDefaultText(var[], text[], const size = sizeof(text), {Float, _}:...)
Удалить языковой текст
Lang_RemoveText(Lang:lang, var[])
Проверить существование языкового текста
Lang_IsTextExists(Lang:lang, var[])
Языковая функция printf с языком по умолчанию
Lang_printf(var[], {Float, _}:...)
Языковая функция printf с определённым языком
Lang_printfex(Lang:lang, var[], {Float, _}:...)
Языковая функция print с языком по умолчанию
Lang_print(var[])
Языковая функция print с определённым языком
Lang_printex(Lang:lang, var[])
Отправить языковой текст игроку
Lang_SendText(playerid, var[], {Float, _}:...)
Отправить языковой текст всем игрокам
Lang_SendTextToAll(var[], {Float, _}:...)
Отправить языковой текст всем игрокам в массиве
Lang_SendTextToPlayers(players[], var[], {Float, _}:...)
Показать языковой диалог для игрока
Lang_ShowDialog(playerid, dialogid, style, var_caption[], var_info[], var_button1[], var_button2[], {Float, _}:...)
Показать языковой GameText для игрока
Lang_GameText(playerid, time, style, var[], {Float, _}:...)
Показать языковой GameText для всех игроков
Lang_GameTextForAll(time, style, var[], {Float, _}:...)
Создаёт TextDraw игрока с языковой переменной
Lang_CreatePlayerTextDraw(playerid, Float:x, Float:y, var[], {Float, _}:...)
Устанавливает языковой текст для TextDraw игрока
Lang_PlayerTextDrawSetString(playerid, PlayerText:text, var[], {Float, _}:...)
Формат языкового файла
Формат языкового файла представляет из себя обычный INI файл (без секций). Поддерживаются различные спецсимволы, такие как: \n, \t, \%, \s, \\, \<число>, \x<hex>.
Переменные
Вы можете использовать переменные в ваших текстовых файлах. Это поддерживает любой уровень вложенности.
HELLO_MSG = Hello
COLOR_RED = {FF0000}
COLOR_GREEN = {00FF00}
COLOR_WHITE = {FFFFFF}
NAME_ONE = \v(COLOR_RED)Alex\v(COLOR_WHITE)
NAME_TWO = \v(COLOR_GREEN)Peter\v(COLOR_WHITE)
MESSAGE_HELLO = \v(COLOR_WHITE)\v(HELLO_MSG) \v(NAME_ONE) and \v(NAME_TWO)
Пример использования
#include <a_samp>
#include <gvar>
#include <zlang>
enum e_LANG_INFO {
Lang:e_LANG_EN,
Lang:e_LANG_RU,
}
static
gLang[e_LANG_INFO];
main() {}
public OnGameModeInit()
{
// загрузить языки
gLang[e_LANG_RU] = Lang_Add("ru", "Russian");
gLang[e_LANG_EN] = Lang_Add("en", "English");
Lang_LoadFile(gLang[e_LANG_RU], "ru.ini");
Lang_LoadFile(gLang[e_LANG_EN], "en.ini");
// установить английский как язык по умлочанию
Lang_SetDefaultLang(gLang[e_LANG_EN]);
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp(cmdtext, "/ru", true, 3) == 0) {
Lang_SetPlayerLang(playerid, gLang[e_LANG_RU]);
Lang_SendText(playerid, "LANGUAGE_CHANGED");
return 1;
}
if (strcmp(cmdtext, "/en", true, 3) == 0) {
Lang_SetPlayerLang(playerid, gLang[e_LANG_EN]);
Lang_SendText(playerid, "LANGUAGE_CHANGED");
return 1;
}
if (strcmp(cmdtext, "/help", true, 5) == 0) {
Lang_SendText(playerid, "HELLO_MSG");
Lang_SendText(playerid, "COMMANDS_LIST");
return 1;
}
if (strcmp(cmdtext, "/help330", true, 5) == 0) {
Lang_SendText(playerid, "Hello, World!");
Lang_SendText(playerid, "Commands: /help, /en, /ru");
return 1;
}
return 0;
}
scriptfiles/en.ini:
COLOR_GRAY = {CCCCCC}
LANGUAGE_CHANGED = \v(COLOR_GRAY)Now you are using english language.
HELLO_MSG = Hello, {00FF00}World!
COMMANDS_LIST = Commands: /help, /en, /ru
scriptfiles/ru.ini:
COLOR_GRAY = {CCCCCC}
LANGUAGE_CHANGED = \v(COLOR_GRAY)Теперь вы используете русский язык.
HELLO_MSG = Привет, {00FF00}Мир!
COMMANDS_LIST = Команды: /help, /en, /ru
# in zlang 3.3.0
Hello, World! = \v(HELLO_MSG)
Commands: /help, /en, /ru = \v(COMMANDS_LIST)
Скачать
Последнюю версию вы всегда можете найти на странице релизов GitHub (https://github.com/Open-GTO/zlang/releases).