rootroll

 
<<< Назад

Шаблон поведения для MajorDomo Переводчик Яндекс.Translate

Скрипт для "Шаблоны поведения" позволяющий переводить слова/фразы/выражения с/на 93 языка

Доброго времени суток.
Не судите строго за оформление и текст - это мой первый пост.
Итак, возникла идея научить MD переводить слова/фразы/выражения.
Для этого нам потребуется API Яндекс.Переводчика, получить его можно по этой ссылке.
Думаю, что получить его не составит труда, доcтаточно быть зарегистрированным в Яндексе.

На странице получения API-key нужно нажать кнопку "Создать новый ключ", далее во всплывающем окне ввести описание ключа (в моём случае - "Подключение переводчика к MajorDomo"), после чего у вас в рапоряжении окажется API Яндекс.Translate.
Выглядит он примерно так: trnsl.1.1.20181225T111333Z.0123b80a04d1f688.c785034а63а514545328f67са3ca55f63c762e2c (это не рабочий API)
На этом закончим и приступим к основному занятию, т.е. написанию шаблона (в Вашем случае на первое время, копипасту :-)) ).

  1. Переходим в панель управления MajorDomo
  2. Выбираете пункт "Объекты", далее в раскрывающемся списке жмите "Шаблоны поведения".
  3. В основном окне нажмите кнопку "Добавить новую запись.
  4. В поле "Название" пишите название шаблона. В моём случае он называется "Яндекс.Переводчик".
  5. Нажмите кнопку "Добавить".

После нажатия на кнопку добавить появятся поля "Шаблон:" и "Выполнить при совпадении:"

  1. В поле "Шаблон" внесите следующее содержание (без кавычек (выделено жирным курсивом)): "(П|п)ереве(ди|сти|зти) на (.+) (слово|фраза|фразу|выражение)"
  2. Ниже, после "Выполнить при совпадении:" поставьте маркер около слова использовать "Код", и ниже после "Использовать для программирования:" поставьте маркер около слова "PHP".
  3. Далее в textarea, что под маркером PHP необходимо вставить следующий код:
    $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

Обсуждение (0) (7)

Москва, Россия