Zireael |
Отправлено: 08 Декабря, 2018 - 21:31:22
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Перевод текста (Отобразить)CODE:external(INT, "MultiByteToWideChar", "MultiByteToWideChar", "Kernel32.dll");
external(INT, "WideCharToMultiByte", "WideCharToMultiByte", "Kernel32.dll");
external(INT, "wsprintf", "wsprintfA", "User32.dll" );
// Бесплатный ключ можно получить тут: https://tech.yandex.ru/keys/get/?service=trnsl
// Ограничение количества переводимых символов для 1 ключа: 1 000 000 символов в день, но не более 10 000 000 в месяц
// Поддерживаемые языки https://tech.yandex.ru/translate/doc/dg/concepts/api-overview-docpage
string api_key = "trnsl.1.1.20181207T020207Z.5ff9f307abbe30ca.683f64643665089eb5abe1625284bd866e378a1d"; // ключ
string rn=formatic(10)+formatic(13);
string text = "Need to translate this text."+rn+"Language will lead to Kiev."; // текст, который надо перевести
string result; // сюда запишется результат
messagebox(text);
result=translate(api_key, "ru", text); // перевести на русский
messagebox(result);
result=translate(api_key, "uk", text); // перевести на украинский
messagebox(result);
result=translate(api_key, "be", text); // перевести на белорусский
messagebox(result);
// функция принимает:
// api ключ
// язык, на который требуется перевести
// строка, которую нужно перевести
function translate(string api_key, string lang, string text)
{
int size_s, count_symbol;
string s;
// перевод из ascii в utf-8
new char c1[size(text)+1];
new char c2[sizearray(c1)*2];
new char c3[sizearray(c1)*2];
strcpy(#c1[0], text);
MultiByteToWideChar(1251, 0, address(#c1[0]), sizearray(c1), address(#c2[0]), sizearray(c2)); // ascii в utf-16
count_symbol=WideCharToMultiByte(65001, 0, address(#c2[0]), sizearray(c2)/2, address(#c3[0]), sizearray(c3), 0, 0); // utf-16 в utf-8
// перевод символов в HEX
char a[2];
text="";
for(int i=0; i<count_symbol-1; i++)
{
wsprintf(address(#a[0]), "%02x", formatci(c3[i]));
text=text+"%"+format(#a[0]);
}
//messagebox(text); // кодировка url, строка передаваемая для перевода
delete c1;
delete c2;
delete c3;
if (sendgetweb(#s, "", "GET", "https:/"+"/translate.yandex.net", "api/v1.5/tr/translate?key="+api_key+"&text="+text+"&lang="+lang)>0)
{
//messagebox (s); // сообщение от сервера, переведённый текст в utf-8
if(regexsearch(1, #s, s, "(?<=text\>).*?(?=\<\/text)", SINGLELINE)>0) // поиск переведённого текста
{
size_s=size(s);
new char c1[size_s+2];
strcpy(#c1[0], s); // копирование текста в массив
count_symbol=MultiByteToWideChar(65001, 0, address(#c1[0]), size_s, -1, 0); // узнать количество символов включая null
new char c2[count_symbol*2];
count_symbol=MultiByteToWideChar(65001, 0, address(#c1[0]), size_s, address(#c2[0]), sizearray(c2)); // из utf-8 в utf-16
delete c1;
s="";
if(count_symbol>0)
{
new char c1[count_symbol+1];
count_symbol=WideCharToMultiByte(1251, 0, address(#c2[0]), count_symbol, address(#c1[0]), sizearray(c1), 0, 0); // из utf-16 в ascii
if(count_symbol>0)s=format(#c1[0], count_symbol);
delete c1;
}
delete c2;
return s;
}
}
return ""; // вернёт пустую строку если sendgetweb выдал ошибку
} |
|
|
Zireael |
Отправлено: 20 Августа, 2019 - 02:06:36
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Определения языка, на котором написан текст (Отобразить)CODE:external(INT, "MultiByteToWideChar", "MultiByteToWideChar", "Kernel32.dll");
external(INT, "WideCharToMultiByte", "WideCharToMultiByte", "Kernel32.dll");
external(INT, "wsprintf", "wsprintfA", "User32.dll" );
// Бесплатный ключ можно получить тут: https://tech.yandex.ru/keys/get/?service=trnsl
string api_key = "trnsl.1.1.20181207T020207Z.5ff9f307abbe30ca.683f64643665089eb5abe1625284bd866e378a1d"; // ключ
string text = "Текст на русском"; // определить на каком языке написан этот текст
string result; // сюда запишется результат
result=translate(api_key, text); // определить язык
messagebox(result);
result=translate(api_key, "My name is"); // определить язык
messagebox(result);
// функция принимает:
// api ключ
// текст
function translate(string api_key, string text)
{
int size_s, count_symbol;
string s;
// перевод из ascii в utf-8
new char c1[size(text)+1];
new char c2[sizearray(c1)*2];
new char c3[sizearray(c1)*2];
strcpy(#c1[0], text);
MultiByteToWideChar(1251, 0, address(#c1[0]), sizearray(c1), address(#c2[0]), sizearray(c2)); // ascii в utf-16
count_symbol=WideCharToMultiByte(65001, 0, address(#c2[0]), sizearray(c2)/2, address(#c3[0]), sizearray(c3), 0, 0); // utf-16 в utf-8
// перевод символов в HEX
char a[2];
text="";
for(int i=0; i<count_symbol-1; i++)
{
wsprintf(address(#a[0]), "%02x", formatci(c3[i]));
text=text+"%"+format(#a[0]);
}
//messagebox(text); // кодировка url
delete c1;
delete c2;
delete c3;
if (sendgetweb(#s, "", "GET", "https:/"+"/translate.yandex.net", "api/v1.5/tr/detect?key="+api_key+"&text="+text)>0)
{
//messagebox (s); // сообщение от сервера
if(regexsearch(1, #s, s, "(?<=lang\=.)[a-z]+")>0)return s;
}
return ""; // вернёт пустую строку если sendgetweb выдал ошибку
} |
|
|
Kibor |
Отправлено: 20 Августа, 2019 - 10:10:59
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
CODE:MultiByteToWideChar(1251, 0, address(#c1[0]), sizearray(c1), address(#c2[0]), sizearray(c2)); // ascii в utf-16
Можно без char передавать
CODE:MultiByteToWideChar(1251, 0, text, size(text), address(#c2[0]), sizearray(c2)); // ascii в utf-16
код (Отобразить)CODE:
function translate(string api_key, string text)
{
int size_s, count_symbol;
string s;
// перевод из ascii в utf-8
new char c2[size(text)*2];
new char c3[size(text)*2];
MultiByteToWideChar(1251, 0, text, size(text), address(#c2[0]), sizearray(c2)); // ascii в utf-16
count_symbol=WideCharToMultiByte(65001, 0, address(#c2[0]), sizearray(c2)/2, address(#c3[0]), sizearray(c3), 0, 0); // utf-16 в utf-8
// перевод символов в HEX
char a[2];
text="";
for(int i=0; i<count_symbol-1; i++)
{
wsprintf(address(#a[0]), "%02x", formatci(c3[i]));
text=text+"%"+format(#a[0]);
}
//messagebox(text); // кодировка url
delete c2;
delete c3;
if (sendgetweb(#s, "", "GET", "https:/"+"/translate.yandex.net", "api/v1.5/tr/detect?key="+api_key+"&text="+text)>0)
{
//messagebox (s); // сообщение от сервера
if(regexsearch(1, #s, s, "(?<=lang\=.)[a-z]+")>0)return s;
}
return ""; // вернёт пустую строку если sendgetweb выдал ошибку
}
|
|
|
|