#international message file
#imessage v1.0.0 by Bombo is needed
#Поддерживаемые языки: "ru","en","fr","uk","es","cs","de","it","pl","tr","sr","bg","ro"
#
#Формат имени сообщения: "\n[MESSAGE_NAME]\n", имя сообщения всегда латинскими буквами
#Формат задания языка: "\nxx {", где xx - обозначение языка, всегда 2 латинских символа
#Формат конца строчки: "};\n", все три символа должны находиться рядом, без пробелов
#В конце файла обязательно: "\n\n" (!), иначе потеряется последнее сообщение
#
#Кодировка файла: UTF8
#Конец строки: Unix
#
#Файл практически не имеет ограничения по объёму.
#Расположение: в одной директории с samp03svr
[HELLO_MESSAGE]
en {Set your language};
ru {Укажите ваш язык};
[YOUR_LANGUAGE]
en {Your language: };
ru {Ваш язык: };
es {Su idioma: };
[HELPLANG]
en {{00FF00}/lang <xx> {FFCC00}- set your language, xx: {FF0000}en,ru,es};
es {{00FF00}/lang <xx> {FFCC00}- seleccione su idioma, xx: {FF0000}en,ru,es};
ru {{00FF00}/lang <xx> {FFCC00}- укажите ваш язык, xx: {FF0000}en,ru,es};
[HELPSHOW]
en {{00FF00}/show {FFCC00}- show you language of all online players.};
es {{00FF00}/show {FFCC00}- mostrarle país y el idioma los jugadores en línea.};
ru {{00FF00}/show {FFCC00}- язык всех онлайн игроков.};
#fr {...};
[NEWLANG]
en {Your language is: };
es {Ahora su idioma: };
ru {Теперь ваш язык: };
[COMMAND_USAGE]
en {Usage: };
es {Uso: };
ru {Использование команды: };
#include <a_samp>
...
#include <imessage>
...
public OnFilterScriptInit()
{
...
//указываем файл со строками, который должен
//лежать в одной папке с сервером samp03svr
init_ifile("pattern.txt");
...
return 1;
}
public OnFilterScriptExit()
{
...
//закрываем файл (для избежания утечки памяти)
close_ifile();
...
return 1;
}
public OnPlayerConnect(playerid) //или в любой другой функции
{
new imes[128]; //заранее выделяем память под строчку
...
//запрашиваем строчку с нужным переводом
imessage(imes, "HELLO_MESSAGE", "ru");
//собственно, используем эту строчку как угодно
SendClientMessage(playerid, 0xAAFF00AA, imes);
...
return 1
}

|
Кончено хорошо, но негде использовать. Чаще всего игрок выбирает сервер с языком, на котором он говорит. Если русскоязычный игрок, играет на русскоязычных серверах, англоязычный - на англоязычных, и так далее
|
if(strncmp(in_language, "ru", 2) == 0)
{
conv = iconv_open("CP1251", "UTF8");
}
else
{
conv = iconv_open("CP1252", "UTF8");
}
if(conv == (iconv_t)(-1))
return;
|
Код:
if(strncmp(in_language, "ru", 2) == 0)
{
conv = iconv_open("CP1251", "UTF8");
}
else
{
conv = iconv_open("CP1252", "UTF8");
}
if(conv == (iconv_t)(-1))
return;
|
#include<stdio.h>
#include<iconv.h>
#include<time.h>
#include<unistd.h>
#include<string.h>
#define CONVERTS 1000000
int main(int argc, char *argv[])
{
clock_t tm1, tm2;
long i;
char str[]="самая обычная, не длинная и не короткая строчка, которая отправляется в чат";
char buff[256];
iconv_t conv;
size_t size_in, size_out;
char *ptr_in, *ptr_out;
//тест №1
memset(buff, 0, sizeof(buff));
tm1 = clock();
//конвертируем бедную строчку до посинения..
for(i = 0; i < CONVERTS; ++i)
{
conv = iconv_open("CP1251", "UTF8"); //вызываем каждый раз в цикле
ptr_in = str;
size_in = strlen(str);
ptr_out = buff;
size_out = sizeof(buff);
iconv(conv, &ptr_in, &size_in, &ptr_out, &size_out);
iconv_close(conv);
}
tm2 = clock();
fprintf(stderr, "результат теста №1 (%d циклов): %.3f сек\n", CONVERTS, (tm2-tm1-0.0)/CLOCKS_PER_SEC);
fprintf(stderr, "%s\n", str);
fprintf(stderr, "%s\n", buff);
//тест №2
memset(buff, 0, sizeof(buff));
tm1 = clock();
conv = iconv_open("CP1251", "UTF8"); //вызываем один раз перед циклом
for(i = 0; i < CONVERTS; ++i)
{
ptr_in = str;
size_in = strlen(str);
ptr_out = buff;
size_out = sizeof(buff);
iconv(conv, &ptr_in, &size_in, &ptr_out, &size_out);
}
iconv_close(conv);
tm2 = clock();
fprintf(stderr, "результат теста №2 (%d циклов): %.3f сек\n", CONVERTS, (tm2-tm1-0.0)/CLOCKS_PER_SEC);
fprintf(stderr, "%s\n", str);
fprintf(stderr, "%s\n", buff);
return 0;
}
|
Что мешает создать глобальный массив и загружать в него соответствующие данные стандартными средствами? Чем данный метод будет быстрее?
|