您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatic translation of incoming and outgoing messages on the site VKontakte. Translation service - Google Translate.
// ==UserScript== // @id vk.com-7af28330-d5e1-4496-806c-38a99cf0e28d@scriptish // @name Vkontakte chat translator // @version 1.0 // @namespace http://userscripts.org/users/Kilowatt // @author Kilowatt // @description Automatic translation of incoming and outgoing messages on the site VKontakte. Translation service - Google Translate. // @grant GM_xmlhttpRequest // @include https://vk.com/im* // @include https://vk.com/al_im* // @include http://vk.com/im* // @include http://vk.com/al_im* // @match https://vk.com/im* // @match https://vk.com/al_im* // @match http://vk.com/im* // @match http://vk.com/al_im* // @run-at document-end // ==/UserScript== var MyLang; function translateText(phrase, callback, reverse) { document.getElementById('GoogleTranslateSelect').style.background = "url(https://vk.com/images/upload.gif)"; GM_xmlhttpRequest( { method: 'GET', url: (reverse ? "http://translate.google.ru/translate_a/t?client=t&sl=auto&tl="+MyLang+"&q=" + phrase : "http://translate.google.ru/translate_a/t?client=t&sl="+MyLang+"&tl="+document.getElementById('GoogleTranslateSelect').value+"&q="+phrase ), onload: (function() { var _callback = callback; return function(data) { document.getElementById('GoogleTranslateSelect').style.background = "transparent"; var response = JSON.parse(data.responseText.replace(/(,)+/g,",").replace(/\[,/g,"[")); var translationArray = response[0]; var translationText = ""; for (var i in translationArray) translationText += translationArray[i][0]; //console.log(translationText); _callback(translationText); } })(), onerror: function(e) { console.log(e); } } ); } function TranslateHandler() { if (document.getElementById('GoogleTranslateCheckbox').checked) translateText(unsafeWindow.Emoji.editableVal(unsafeWindow.IM.getTxt()), function(response) { unsafeWindow.IM.getTxt().innerHTML = response; // TODO: превратить все unicode-смайлики в HTML unsafeWindow.IM.send(); }); else unsafeWindow.IM.send(); } // вешаем переводчика на ентер в поле ввода unsafeWindow.removeEvent(unsafeWindow.IM.getTxt(), 'keydown'); unsafeWindow.IM.getTxt().addEventListener("keydown", function(ev){ if (ev.keyCode == 10 || ev.keyCode == 13 && !(ev.ctrlKey || ev.metaKey && browser.mac)) { TranslateHandler(); } }); // вешаем переводчика на кнопку "отправить" document.getElementById('im_send').onclick = function(){ TranslateHandler(); }; // Обработчик входящего сообщения unsafeWindow.IM.getTable(unsafeWindow.cur.peer).addEventListener('DOMNodeInserted', function(e){ if (document.getElementById('GoogleTranslateCheckbox').checked && e.relatedNode.tagName == "TR" && e.relatedNode.className.indexOf('im_in')>-1) { var msg_text = e.relatedNode.getElementsByClassName('im_msg_text')[0]; if (msg_text != undefined) translateText(msg_text.textContent, function(response){ msg_text.textContent = response; }, true); } }); // Построение панельки переводчика (внизу справа) var GoogleTranslateDiv = document.createElement('div'); GoogleTranslateDiv.style.position = "fixed"; GoogleTranslateDiv.style.bottom = 0; GoogleTranslateDiv.style.right = 0; GoogleTranslateDiv.style.background = "white"; GoogleTranslateDiv.style.border = "1px solid blue"; GoogleTranslateDiv.innerHTML = '<select id="GoogleTranslateSelect" style="background: transparent;">'+ '<option value="af">Afrikaans</option>'+ '<option value="sq">Albanian</option>'+ '<option value="ar">Arabic</option>'+ '<option value="az">Azerbaijani</option>'+ '<option value="eu">Basque</option>'+ '<option value="bn">Bengali</option>'+ '<option value="be">Belarusian</option>'+ '<option value="bg">Bulgarian</option>'+ '<option value="ca">Catalan</option>'+ '<option value="zh-CN">Simpl. Chinese</option>'+ '<option value="zh-TW">Trad. Chinese</option>'+ '<option value="hr">Croatian</option>'+ '<option value="cs">Czech</option>'+ '<option value="da">Danish</option>'+ '<option value="nl">Dutch</option>'+ '<option value="en" selected>English</option>'+ '<option value="eo">Esperanto</option>'+ '<option value="et">Estonian</option>'+ '<option value="tl">Filipino</option>'+ '<option value="fi">Finnish</option>'+ '<option value="fr">French</option>'+ '<option value="gl">Galician</option>'+ '<option value="ka">Georgian</option>'+ '<option value="de">German</option>'+ '<option value="el">Greek</option>'+ '<option value="gu">Gujarati</option>'+ '<option value="ht">Сreole Haitian</option>'+ '<option value="iw">Hebrew</option>'+ '<option value="hi">Hindi</option>'+ '<option value="hu">Hungarian</option>'+ '<option value="is">Icelandic</option>'+ '<option value="id">Indonesian</option>'+ '<option value="ga">Irish</option>'+ '<option value="it">Italian</option>'+ '<option value="ja">Japanese</option>'+ '<option value="kn">Kannada</option>'+ '<option value="ko">Korean</option>'+ '<option value="la">Latin</option>'+ '<option value="lv">Latvian</option>'+ '<option value="lt">Lithuanian</option>'+ '<option value="mk">Macedonian</option>'+ '<option value="ms">Malay</option>'+ '<option value="mt">Maltese</option>'+ '<option value="no">Norwegian</option>'+ '<option value="fa">Persian</option>'+ '<option value="pl">Polish</option>'+ '<option value="pt">Portuguese</option>'+ '<option value="ro">Romanian</option>'+ '<option value="ru">Russian</option>'+ '<option value="sr">Serbian</option>'+ '<option value="sk">Slovak</option>'+ '<option value="sl">Slovenian</option>'+ '<option value="es">Spanish</option>'+ '<option value="sw">Swahili</option>'+ '<option value="sv">Swedish</option>'+ '<option value="ta">Tamil</option>'+ '<option value="te">Telugu</option>'+ '<option value="th">Thai</option>'+ '<option value="tr">Turkish</option>'+ '<option value="uk">Ukrainian</option>'+ '<option value="ur">Urdu</option>'+ '<option value="vi">Vietnamese</option>'+ '<option value="cy">Welsh</option>'+ '<option value="yi">Yiddish</option>'+ '</select><br/>'+ '<input type="checkbox" id="GoogleTranslateCheckbox">Translate</input>'; document.body.appendChild(GoogleTranslateDiv); // определение моего языка (MyLang) var VkLanguages = []; VkLanguages[3] = 'en'; VkLanguages[0] = 'ru'; VkLanguages[1] = 'uk'; VkLanguages[4] = 'es'; VkLanguages[12] = 'pt'; VkLanguages[73] = 'pt'; VkLanguages[6] = 'de'; VkLanguages[16] = 'fr'; VkLanguages[7] = 'it'; VkLanguages[61] = 'nl'; VkLanguages[57] = 'az'; VkLanguages[18] = 'zh-CN'; VkLanguages[80] = 'Монгол'; //??? VkLanguages[15] = 'pl'; VkLanguages[10] = 'Magyar'; //??? VkLanguages[64] = 'da'; VkLanguages[60] = 'sv'; VkLanguages[55] = 'no'; VkLanguages[53] = 'sl'; VkLanguages[71] = 'sk'; VkLanguages[9] = 'hr'; VkLanguages[11] = 'sr'; VkLanguages[72] = 'Bosanski'; VkLanguages[8] = 'bg'; VkLanguages[5] = 'Suomi'; VkLanguages[22] = 'Eesti'; VkLanguages[56] = 'lv'; VkLanguages[19] = 'lt'; VkLanguages[14] = 'el'; VkLanguages[59] = 'Shqip'; VkLanguages[54] = 'ro'; VkLanguages[21] = 'cs'; VkLanguages[17] = '한국어'; VkLanguages[20] = '日本語'; VkLanguages[98] = 'العربية'; VkLanguages[74] = 'فارسی'; VkLanguages[85] = 'اردو'; VkLanguages[90] = 'پنجابی'; VkLanguages[76] = 'हिन्दी'; VkLanguages[83] = 'नेपाली'; VkLanguages[78] = 'বাংলা'; VkLanguages[94] = 'ಕನ್ನಡ'; VkLanguages[77] = 'සිංහල'; VkLanguages[69] = 'id'; VkLanguages[79] = 'te'; VkLanguages[68] = 'ภาษาไทย'; VkLanguages[119] = '臺灣話'; VkLanguages[81] = 'ဗမာစာ'; VkLanguages[75] = 'Tiếng Việt'; VkLanguages[99] = 'עברית'; VkLanguages[95] = 'Kiswahili'; VkLanguages[97] = 'ru'; VkLanguages[87] = 'ru'; VkLanguages[66] = 'Moldovenească'; VkLanguages[114] = 'be'; VkLanguages[2] = 'be'; VkLanguages[82] = 'tr'; VkLanguages[63] = 'ქართული'; VkLanguages[58] = 'Հայերեն'; VkLanguages[65] = 'O‘zbek'; VkLanguages[62] = 'Türkmen'; VkLanguages[70] = 'Тоҷикӣ'; VkLanguages[50] = 'ru'; VkLanguages[91] = 'Ирон'; VkLanguages[102] = 'ru'; VkLanguages[101] = 'ru'; VkLanguages[107] = 'ru'; VkLanguages[108] = 'ru'; VkLanguages[110] = 'ГIалгIай мотт'; VkLanguages[52] = 'ru'; VkLanguages[344] = 'ru'; VkLanguages[555] = 'eo'; for (i in unsafeWindow.StaticFiles) if (i.indexOf('lang')==0) MyLang = VkLanguages[i.split('_')[0].split('lang')[1]];