#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;
}
Что мешает создать глобальный массив и загружать в него соответствующие данные стандартными средствами? Чем данный метод будет быстрее?
|