Скрипт для "Шаблоны поведения" позволяющий переводить слова/фразы/выражения с/на 93 языка
Доброго времени суток.
Не судите строго за оформление и текст - это мой первый пост.
Итак, возникла идея научить MD переводить слова/фразы/выражения.
Для этого нам потребуется API Яндекс.Переводчика, получить его можно по этой ссылке.
Думаю, что получить его не составит труда, доcтаточно быть зарегистрированным в Яндексе.
На странице получения API-key нужно нажать кнопку "Создать новый ключ", далее во всплывающем окне ввести описание ключа (в моём случае - "Подключение переводчика к MajorDomo"), после чего у вас в рапоряжении окажется API Яндекс.Translate.
Выглядит он примерно так: trnsl.1.1.20181225T111333Z.0123b80a04d1f688.c785034а63а514545328f67са3ca55f63c762e2c (это не рабочий API)
На этом закончим и приступим к основному занятию, т.е. написанию шаблона (в Вашем случае на первое время, копипасту :-)) ).
После нажатия на кнопку добавить появятся поля "Шаблон:" и "Выполнить при совпадении:"
$apikey = "Ваш API-ключ. Начинается с trnsl"; //API-ключ с яндекса получить можно здесь https://translate.yandex.ru/developers/keys КАВЫЧКИ НЕ УБИРАТЬ!!!
$message_text=$original; //вся фраза целиком (Переведи на английский фразу ПЕРЕВОДИМАЯ ФРАЗА)
$keywords = preg_split("/[\s,]+/",$original); //Разбиваем фразу на отдельные слова
$total=count($keywords); //Считаем сколько слов в оригинальной фразе
$xtotal=$total - 4; //$xtotal - количество слов после шаблонного запроса, ($total -4) цифра 4 - это количество слов в шаблоне запроса до переводимой фразы/слова
//извлекаем переводимое слово/фразу, т.е. отсекаем запрос "Переведи на английский фразу" от всего запроса оставляя то, что надо перевести на другой язык
for($i=$xtotal;$i<$total;$i++) {
$message_text = substr(strstr($message_text," "), 1);
}
$message_text_strrep = str_replace(" ","%20",$message_text); //заменяем пробелы на %20 в переводимом слове/фразе для запроса GET (не понимает пробелов)
//sayreply($message_text,2); //проверка на вывод поисковой фразы
$langfrom = file_get_contents("https://translate.yandex.net/api/v1.5/tr.json/detect?key=".$apikey."&text=".$message_text_strrep); // Определяем с какого языка будет перевод (если английский - вывод: {"code":200,"lang":"en"})
$langfrom = substr($langfrom , strpos($langfrom , 'g')+4); // обрезаем полученную строку {"code":200,"lang":"en"} с начала до en"}
$langfrom = strstr($langfrom , '"', true); // теперь режем последние символы "}, чтоб осталось en
//определяем переменную на какой язык надо перевести
if($matches[3]=="азербайджанский"){$langto="az";}
elseif($matches[3]=="албанский"){$langto="sq";}
elseif($matches[3]=="амхарский"){$langto="am";}
elseif($matches[3]=="английский"){$langto="en";}
elseif($matches[3]=="арабский"){$langto="ar";}
elseif($matches[3]=="армянский"){$langto="hy";}
elseif($matches[3]=="африкаанс"){$langto="af";}
elseif($matches[3]=="баскский"){$langto="eu";}
elseif($matches[3]=="башкирский"){$langto="ba";}
elseif($matches[3]=="белорусский" || $matches[3]=="беларуский"){$langto="be";}
elseif($matches[3]=="бенгальский"){$langto="bn";}
elseif($matches[3]=="бирманский"){$langto="my";}
elseif($matches[3]=="болгарский"){$langto="bg";}
elseif($matches[3]=="боснийский"){$langto="bs";}
elseif($matches[3]=="валлийский"){$langto="cy";}
elseif($matches[3]=="венгерский"){$langto="hu";}
elseif($matches[3]=="вьетнамский"){$langto="vi";}
elseif($matches[3]=="гаитянский" || $matches[3]=="креольский"){$langto="ht";}
elseif($matches[3]=="галисийский"){$langto="gl";}
elseif($matches[3]=="голландский"){$langto="nl";}
elseif($matches[3]=="горномарийский"){$langto="mrj";}
elseif($matches[3]=="греческий"){$langto="el";}
elseif($matches[3]=="грузинский"){$langto="ka";}
elseif($matches[3]=="гуджарати"){$langto="gu";}
elseif($matches[3]=="датский"){$langto="da";}
elseif($matches[3]=="иврит"){$langto="he";}
elseif($matches[3]=="идиш"){$langto="yi";}
elseif($matches[3]=="индонезийский"){$langto="id";}
elseif($matches[3]=="ирландский"){$langto="ga";}
elseif($matches[3]=="итальянский"){$langto="it";}
elseif($matches[3]=="исландский"){$langto="is";}
elseif($matches[3]=="испанский"){$langto="es";}
elseif($matches[3]=="казахский"){$langto="kk";}
elseif($matches[3]=="каннада"){$langto="kn";}
elseif($matches[3]=="каталанский"){$langto="ca";}
elseif($matches[3]=="киргизский"){$langto="ky";}
elseif($matches[3]=="китайский"){$langto="zh";}
elseif($matches[3]=="корейский"){$langto="ko";}
elseif($matches[3]=="коса"){$langto="xh";}
elseif($matches[3]=="кхмерский"){$langto="km";}
elseif($matches[3]=="лаосский"){$langto="lo";}
elseif($matches[3]=="латынь" || $matches[3]=="латинский"){$langto="la";}
elseif($matches[3]=="латышский"){$langto="lv";}
elseif($matches[3]=="литовский"){$langto="lt";}
elseif($matches[3]=="люксембургский"){$langto="lb";}
elseif($matches[3]=="малагасийский"){$langto="mg";}
elseif($matches[3]=="малайский"){$langto="ms";}
elseif($matches[3]=="малаялам"){$langto="ml";}
elseif($matches[3]=="мальтийский"){$langto="mt";}
elseif($matches[3]=="македонский"){$langto="mk";}
elseif($matches[3]=="маори"){$langto="mi";}
elseif($matches[3]=="маратхи"){$langto="mr";}
elseif($matches[3]=="марийский"){$langto="mhr";}
elseif($matches[3]=="монгольский"){$langto="mn";}
elseif($matches[3]=="немецкий"){$langto="de";}
elseif($matches[3]=="непальский"){$langto="ne";}
elseif($matches[3]=="норвежский"){$langto="no";}
elseif($matches[3]=="панджаби"){$langto="pa";}
elseif($matches[3]=="папьяменто"){$langto="pap";}
elseif($matches[3]=="персидский"){$langto="fa";}
elseif($matches[3]=="польский"){$langto="pl";}
elseif($matches[3]=="португальский"){$langto="pt";}
elseif($matches[3]=="румынский"){$langto="ro";}
elseif($matches[3]=="русский"){$langto="ru";}
elseif($matches[3]=="себуанский"){$langto="ceb";}
elseif($matches[3]=="сербский"){$langto="sr";}
elseif($matches[3]=="сингальский"){$langto="si";}
elseif($matches[3]=="словацкий"){$langto="sk";}
elseif($matches[3]=="словенский"){$langto="sl";}
elseif($matches[3]=="суахили"){$langto="sw";}
elseif($matches[3]=="сунданский"){$langto="su";}
elseif($matches[3]=="таджикский"){$langto="tg";}
elseif($matches[3]=="тайский"){$langto="th";}
elseif($matches[3]=="тагальский"){$langto="tl";}
elseif($matches[3]=="тамильский"){$langto="ta";}
elseif($matches[3]=="татарский"){$langto="tt";}
elseif($matches[3]=="телугу"){$langto="te";}
elseif($matches[3]=="турецкий"){$langto="tr";}
elseif($matches[3]=="удмуртский"){$langto="udm";}
elseif($matches[3]=="узбекский"){$langto="uz";}
elseif($matches[3]=="украинский"){$langto="uk";}
elseif($matches[3]=="урду"){$langto="ur";}
elseif($matches[3]=="финский"){$langto="fi";}
elseif($matches[3]=="французский"){$langto="fr";}
elseif($matches[3]=="хинди"){$langto="hi";}
elseif($matches[3]=="хорватский"){$langto="hr";}
elseif($matches[3]=="чешский"){$langto="cs";}
elseif($matches[3]=="шведский"){$langto="sv";}
elseif($matches[3]=="шотландский"){$langto="gd";}
elseif($matches[3]=="эстонский"){$langto="et";}
elseif($matches[3]=="эсперанто"){$langto="eo";}
elseif($matches[3]=="яванский"){$langto="jv";}
elseif($matches[3]=="японский"){$langto="ja";}
$lang = $langfrom."-".$langto; //направление перевода. пример en-ru
$text = file_get_contents("https://translate.yandex.net/api/v1.5/tr.json/translate?key=".$apikey."&text=".$message_text_strrep."&lang=".$lang."&format=plain"); //получаем перевод. Вывод GET запроса: {"code":200,"lang":"en-ru","text":["Перевести эту фразу"]}
$answercode = substr($text,8,3); //смотрим код ответа
//если всё хорошо то:
if ($answercode == 200) {
$text = substr($text, strpos($text, '[')+2); //обрезаем вывод GET запроса до символа [. +2 - удаляем сам знак [ и следующий за ним символ
$say = strstr($text, '"', true); //обрезаем вывод GET запроса с конца до первых кавычек, включая и кавычки
if ($matches[4] == "фразу") {$matches[4] = "фраза";} //делаем удобоваримый для слуха ответ от Алисы
say($matches[4].": ".$message_text." переводится на ".$matches[3]." как: ".$say,2); // собственно сам выхлоп перевода, то , что скажет нам в ответ Алиса
}
//иначе сообщаем об ошибке (пока почему-то не работает, при ошибке, file_get_contents возвращает пустое значение (через строку браузера всё работает :-( ))
elseif ($answercode == 401) {say("Неправильный API-ключ",2);}
elseif ($answercode == 402) {say("API-ключ заблокирован",2);}
elseif ($answercode == 404) {say("Превышено суточное ограничение на объем переведенного текста",2);}
else {say("Неизвестный код ответа сервера: ".$answercode,2);}
В шаблоне,после (слово|фраза|фразу|выражение) отсутствует переменная $matches[i] (в конкретном случае это был бы $matches[5]) поскольку в данном скрипте используется вся строка запроса из "Шаблона" - переменная $original
Москва, Россия