SA-MP Forums Archive
[Include] zlang - GVar per player lang system - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Filterscripts (https://sampforum.blast.hk/forumdisplay.php?fid=17)
+---- Forum: Includes (https://sampforum.blast.hk/forumdisplay.php?fid=83)
+---- Thread: [Include] zlang - GVar per player lang system (/showthread.php?tid=622845)



zlang - GVar per player lang system - ZiGGi - 27.11.2016

zlang
GitHub
About
GVar per player lang system.

Requirements
- GVar plugin
- foreach - not necessary but recommended

Libraries compatible with zlang
- mdialog - new look for Dialog_Open, Dialog_Message and Dialog_MessageEx functions.

Defines
List of all defines here (no table tag on this forum): https://github.com/Open-GTO/zlang#defines

Functions
Add language
PHP код:
Lang:Lang_Add(code[], name[]) 
Remove language
PHP код:
Lang_Remove(Lang:lang) 
Load language file
PHP код:
Lang_LoadFile(Lang:lang, filename[]) 
Unload language file
PHP код:
Lang_UnloadFile(Lang:lang, filename[] = "", fid = INVALID_LANG_FILE_ID) 
Reload all language files
PHP код:
Lang_Reload(Lang:lang) 
Get language id by *code* or *name*
PHP код:
Lang:Lang_Get(code[] = "", name[] = "") 
Set language name
PHP код:
Lang_SetName(Lang:lang, name[]) 
Get language name
PHP код:
Lang_GetName(Lang:lang, name[], const size = sizeof(name)) 
Get language name and return it
PHP код:
Lang_ReturnName(Lang:lang) 
Set language code
PHP код:
Lang_SetCode(Lang:lang, code[]) 
Get language code
PHP код:
Lang_GetCode(Lang:lang, code[], const size = sizeof(code)) 
Get language code and return it
PHP код:
Lang_ReturnCode(Lang:lang) 
Get language codes string
PHP код:
Lang_GetCodes(result[], const size = sizeof(result), const separator = '/', const bool:isuppercase = false) 
Get language codes string and return it
PHP код:
Lang_ReturnCodes(const separator = '/', const bool:isuppercase = false) 
Check language on valid
PHP код:
Lang_IsValid(Lang:lang) 
Get languages count
PHP код:
Lang_GetCount() 
Set player language
PHP код:
Lang_SetPlayerLang(playerid, Lang:lang) 
Get player language
PHP код:
Lang:Lang_GetPlayerLang(playerid) 
Set player language by code
PHP код:
Lang:Lang_SetPlayerLangByCode(playerid, code[]) 
Set player language by name
PHP код:
Lang:Lang_SetPlayerLangByName(playerid, name[]) 
Set default server language
PHP код:
Lang_SetDefaultLang(Lang:lang) 
Get default server language
PHP код:
Lang_GetDefaultLang() 
Get language text
PHP код:
Lang_GetText(Lang:lang, var[], text[], const size = sizeof(text), {Float, _}:...) 
Get player language text
PHP код:
Lang_GetPlayerText(playerid, var[], text[], const size = sizeof(text), {Float, _}:...) 
Get default language text
PHP код:
Lang_GetDefaultText(var[], text[], const size = sizeof(text), {Float, _}:...) 
Remove language text
PHP код:
Lang_RemoveText(Lang:lang, var[]) 
Is language text exists
PHP код:
Lang_IsTextExists(Lang:lang, var[]) 
Language printf function with default language
PHP код:
Lang_printf(var[], {Float, _}:...) 
Language printf function with specific language
PHP код:
Lang_printfex(Lang:lang, var[], {Float, _}:...) 
Language print function with default language
PHP код:
Lang_print(var[], {Float, _}:...) 
Language print function with specific language
PHP код:
Lang_printex(Lang:lang, var[]) 
Send language text to player
PHP код:
Lang_SendText(playerid, var[], {Float, _}:...) 
Send language text to all players
PHP код:
Lang_SendTextToAll(var[], {Float, _}:...) 
Send language text to all players in array
PHP код:
Lang_SendTextToPlayers(players[], var[], {Float, _}:...) 
Show language dialog to player
PHP код:
Lang_ShowDialog(playerid, dialogid, style, var_caption[], var_info[], var_button1[], var_button2[], {Float, _}:...) 
Show language game text to player
PHP код:
Lang_GameText(playerid, time, style, var[], {Float, _}:...) 
Show language game text to all players
PHP код:
Lang_GameTextForAll(time, style, var[], {Float, _}:...) 
Create player TextDraw with language var
PHP код:
Lang_CreatePlayerTextDraw(playerid, Float:x, Float:y, var[], {Float, _}:...) 
Sets the language text to the player TextDraw
PHP код:
Lang_PlayerTextDrawSetString(playerid, PlayerText:text, var[], {Float, _}:...) 
Language file format
Language file format is a standard INI file format (without sections). It supports a variety of special characters, such as \n, \t, \%, \s, \\, \<value>, \x<hex>.

Variables
You can use variables in your text files. This supports any nesting level.
PHP код:
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) 
Example
PHP код:
#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()
{
    
// load languages
    
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");
    
// set english as the default language
    
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:
PHP код:
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:
PHP код:
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) 
Download
- GitHub download page: https://github.com/Open-GTO/zlang/releases


Re: zlang - GVar per player lang system - ZiGGi - 25.11.2017

zlang v3.3.0 is available!

Now you can use variables in text files and using strings like a keys!

PHP код:
if (strcmp(cmdtext, "/help330", true, 5) == 0) {
    
Lang_SendText(playerid, "Hello, World!");
    
Lang_SendText(playerid, "Commands: /help, /en, /ru");
    return 
1;
} 
PHP код:
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) 



Re: zlang - GVar per player lang system - Kaperstone - 25.11.2017

Woah, weird that this include went unnoticed.

Very nice tho.


Re: zlang - GVar per player lang system - ToiletDuck - 25.11.2017

Woow Great, Is this include will automatically converts or translate? I haven't read the whole thread yet lol.

EDIT: oh it's manual, Thanks for this I might use this


Re: zlang - GVar per player lang system - Kaperstone - 15.01.2018

GVar is slow compared to regular variables, why use it?


Re: zlang - GVar per player lang system - ZiGGi - 16.01.2018

Quote:
Originally Posted by Kaperstone
Посмотреть сообщение
GVar is slow compared to regular variables, why use it?
Nope. Any existed algorithm for search by string keys on Pawn is slower than existed in GVar. I was made some tests compared to y_languages and GVar's is much faster.


Re: zlang - GVar per player lang system - Kaperstone - 16.01.2018

Quote:
Originally Posted by ZiGGi
Посмотреть сообщение
Nope. Any existed algorithm for search by string keys on Pawn is slower than existed in GVar. I was made some tests compared to y_languages and GVar's is much faster.
Maybe faster than y_lang, that'd be even great if you could add them to the thread to see some comparison (if possible with source), but regular variables definitely are faster than gvar.
http://forum.sa-mp.com/showpost.php?...3&postcount=11
http://forum.sa-mp.com/showpost.php?...2&postcount=14

I'd say language is definitely a time critical because text is used everywhere.


Re: zlang - GVar per player lang system - ZiGGi - 16.01.2018

Quote:
Originally Posted by Kaperstone
Посмотреть сообщение
Maybe faster than y_lang, that'd be even great if you could add them to the thread to see some comparison (if possible with source), but regular variables definitely are faster than gvar.
http://forum.sa-mp.com/showpost.php?...3&postcount=11
http://forum.sa-mp.com/showpost.php?...2&postcount=14

I'd say language is definitely a time critical because text is used everywhere.
I know what they are faster, but they didn't provide similar functionality, like string keys. Languages can be realized with regular arrays, but code with arrays will be not too clear and functional. Also if someone wan to get maximum performance, tthey shouldn't use even arrays just pure strings with tons of if's.

Upd: i will add some tests with other language libraries later


Re: zlang - GVar per player lang system - Kaperstone - 16.01.2018

Quote:
Originally Posted by ZiGGi
Посмотреть сообщение
Upd: i will add some tests with other language libraries later
Great, would love to see that.


By the way, I wanted to know whether I'll need to use Russifikatsia of the compiler to send/display text in Russian with Cyrillic alphabet?


Re: zlang - GVar per player lang system - kurta999 - 16.01.2018

Nice. I did multilang system in my server in same way, funniest thing was export already existed messages from mode


Re: zlang - GVar per player lang system - Fairuz - 29.04.2018

Sorry for bump,

is this possible with formatex.inc ?
lets say i want to make message with %p format


Re: zlang - GVar per player lang system - ZiGGi - 29.04.2018

Quote:
Originally Posted by Dice_
Посмотреть сообщение
Sorry for bump,

is this possible with formatex.inc ?
lets say i want to make message with %p format
No, for now zlang is not working with formatex and I don't know how to do it.