Ru-Board.club
← Вернуться в раздел «Программы»

» Opera - плагины, дополнения, панели, кнопки, утилиты

Автор: Capushon
Дата сообщения: 16.04.2015 21:04
omamont: 21:59 16-04-2015
Цитата:
Иди рюши опере рисуй - школота оценит...
Какие рюши? Ты что там куришь?
Автор: Liandri
Дата сообщения: 17.04.2015 10:51
regist123
Цитата:
Liandri, думаю было бы неплохо текст в options.html перевести на русский.
Кто хочет - может перевести. Для себя я даже не стал убирать нерабочие настройки и исправлять умолчания - считаю что в настройки достаточно залезть 1 раз.

Otto_Romwel
Цитата:
У меня google-translate.js модифицированный в мае 2014 до сих пор работает прекрасно. За это время два раза была проблема с “капчей”. Открывает перевод иногда меньше чем за секунду, в среднем: 1-1,5 сек.
Ну а у меня не заработал. Только версия от октября работает. Судя по той ветке, временные проблемы - норма для этого скрипта.
Цитата:
не позволял назначить на ряду с клавиатурной командой жест для активации
Жестами не пользуюсь, но разве что-либо из обсуждаемого позволяет использовать жесты?

Capushon
Цитата:
Это не тот скрипт, я говорил об этом
Если вчитаешься в моё сообщение, поймёшь что я говорил совсем не про userjs, а про другой GM-скрипт.
Цитата:
Но если работает это - зачем XTranslate?
Предлагаю просто попробовать использовать рабочее расширение и сравнить. У меня аналогичный вопрос - если есть более надежные и функциональные расширения - зачем google-translate.js? Для меня это вопрос удобства, а для кого-то, похоже - вопрос религии.
Автор: Otto_Romwel
Дата сообщения: 17.04.2015 13:25
Liandri 10:51 17-04-2015
Цитата:
но разве что-либо из обсуждаемого позволяет использовать жесты?
google-translate.js позволяет, как и пункты меню.

Цитата:
временные проблемы - норма для этого скрипта
Временные проблемы существуют у всех подобных скриптов/расширений, когда сервис перевода или разработчики браузера что-то меняют. В google-translate.js ещё проблемой бывает прокси, который легко заменить самому на другой, с мая прошлого года исправно работает через light--proxy.appspot.com. У меня, после первой проблемы с капчей, рядом с рабочим, лежит запасной скрипт с другим прокси, с мая прошлого года пользовался запаской два раза.

Цитата:
У меня аналогичный вопрос - если есть более надежные и функциональные расширения - зачем google-translate.js?

По-мимо упомянутых выше жестов и пунктов меню, в отличии от Instant-Translate соблюдает перевод строки, даёт возможность задействовать два сервиса перевода (с translate.ru, кстати показывает направление перевода, раньше и гугл показывал, сейчас нет и это минус), позволяет перетаскивать окно с переводом.
Преимуществ Instant-Translate в функционале не вижу. Скажем возможность автоматического перевода на указанный язык, если язык выделенного текста совпадает с "целевым", запросто решается назначением жеста или пункта меню, причём таким образом можно назначить несколько необходимых вариантов.
Автор: Liandri
Дата сообщения: 17.04.2015 13:33
Otto_Romwel
Цитата:
google-translate.js позволяет, как и пункты меню.
Можно подробнее про процесс настройки таких жестов? В сорце ничего про жесты не увидел.

Цитата:
Скажем возможность автоматического перевода на указанный язык, если язык выделенного текста совпадает с "целевым", запросто решается назначением жеста или пункта меню, причём таким образом можно назначить несколько необходимых вариантов.
Простота использования при этом пострадает - на каждый нужный вариант перевода нужно будет выбирать свой пункт меню. С расширением я просто жму Shift на выделении, и оно переводится на нужный язык.

Цитата:
Временные проблемы существуют у всех подобных скриптов/расширений, когда сервис перевода или разработчики браузера что-то меняют.
В случае наличия у сервиса API такие временные проблемы исключены. Если что-то ломается, то навсегда - это будет свидетельствовать об обновлении самого API или политики предоставления информации.
Автор: Otto_Romwel
Дата сообщения: 17.04.2015 13:53
Liandri 13:33 17-04-2015
Цитата:
Можно подробнее про процесс настройки таких жестов? В сорце ничего про жесты не увидел.
Для google
Код: Go to page, "javascript:ujs_google_translate('auto|ru')"
Автор: Liandri
Дата сообщения: 17.04.2015 14:31
Otto_Romwel
Цитата:
Go to Page,"javascript:
Понятно, в случае userjs можно запускать вложенные функции через адресную строку, а в расширениях это запрещено.

Цитата:
Это вы жестами не пользуетесь. Да и весь ваш выигрыш сводится на нет, если приходится переводить на несколько языков.

Цитата:
зато на второй язык позволяет переводить не только когда язык исходного текста совпадает с основным.
На 2 языка переводить отдельные фразы на странице (rus/eng и rus<->eng) - это максимум моих потребностей, и расширение с этим справляется. На 3 языка и более - не помню чтобы такая необходимость у меня возникала. Может я недостаточно извращенец
Кстати, сейчас подумал, что иметь несколько жестов для перевода на разные языки - не очень практично. Если бы я использовал жесты, я бы лучше воспользовался остальными вариациями для вызова совсем других функций.

Цитата:
Временные, потому, что автор скрипта/расширения поправляет код (или не автор ). Если же нет, тогда постоянные.
Я говорил про временные проблемы типа "капчи" и "вчера не работало, сегодня работает".
Автор: helbvtynec
Дата сообщения: 17.04.2015 14:55

Цитата:
Понятно, в случае userjs можно запускать вложенные функции через адресную строку, а в расширениях это запрещено

Всё там можно. И управлять извне, и кнопки кастомные создавать. Работает через userjs расширения, который у них естественно тоже есть.
Автор: Otto_Romwel
Дата сообщения: 17.04.2015 14:59
Liandri 14:31 17-04-2015
Цитата:
Я говорил про временные проблемы типа "капчи" и "вчера не работало, сегодня работает".
Понятно, вы процитировали фразу о других проблемах, это меня и сбило.
Цитата:
На 2 языка переводить отдельные фразы на странице (rus/eng и rus<->eng) - это максимум моих потребностей, и расширение с этим справляется.
Вы спросили зачем использовать google-translate.js, если есть более функциональные расширения, я вам на примере расширения, о котором здесь упоминалось, привёл примеры, говорящие о его меньших функциональных возможностях, ещё забыл упомянуть о возможности перевода страницы целиком. То, что вам какой-то функционал не нужен — это уже другой разговор.


Добавлено:
Liandri 14:31 17-04-2015
Цитата:
Кстати, сейчас подумал, что иметь несколько жестов для перевода на разные языки - не очень практично. Если бы я использовал жесты, я бы лучше воспользовался остальными вариациями для вызова совсем других функций.
Это уже выбор пользователя, я лишь привёл пример.
Автор: Liandri
Дата сообщения: 17.04.2015 15:47
helbvtynec
Цитата:
Всё там можно. И управлять извне, и кнопки кастомные создавать. Работает через userjs расширения, который у них естественно тоже есть.
Ничего не понял. Я говорил о том, что для расширений действует защита от вызова вложенных функций - скорее всего это часть стандартных мер безопасности. Это означает, что страница не в состоянии вызвать функцию из расширения - такое может только пользователь. То что и расширения, и userjs, и даже GM работают на 90%-100% через JS - не новость.

Otto_Romwel
Цитата:
привёл примеры, говорящие о его меньших функциональных возможностях, ещё забыл упомянуть о возможности перевода страницы целиком. То, что вам какой-то функционал не нужен — это уже другой разговор.
Всё это, в общем-то, также "другой разговор" - субъективное мнение. Невозможность задействовать 2 сервиса и привязка окон к странице против невозможности открытия более 1 окна и отсутствия авто-выбора второго языка. Также и возможность управления жестами является скорее не функционалом, а побочным явлением принципа работы userjs.
Но соглашусь с отсутствием возможности перевода больших текстов и всей страницы. Если кому-то это всё надо, стоит таки посмотреть в сторону XTranslate.
Автор: Otto_Romwel
Дата сообщения: 17.04.2015 16:11
Liandri 15:47 17-04-2015
Цитата:
Всё это, в общем-то, также "другой разговор" - субъективное мнение.
Как раз нет, я говорил в контексте: что есть в одном, но нет в другом и это объективные вещи. Вот вы упомянули о возможности нескольких окон с переводом, это возможность, которой у скрипта нет, и это вполне объективный плюс расширению. Субъективно пользователь решает, что ему надо, а что нет и не факт, что выбор падёт на продукт с большими возможностями. Поэтому мы и пользуемся разными дополнениями.
Instant-Translate был бы очень хороший вариант простого и удобного мгновенного переводчика, если бы соблюдал перевод строки. Это моё субъективное мнение.

Добавлено:
Liandri 15:47 17-04-2015
Цитата:
стоит таки посмотреть в сторону XTranslate.
Который не работает
Автор: helbvtynec
Дата сообщения: 17.04.2015 17:45
Liandri

Цитата:
Ничего не понял. Я говорил о том, что для расширений действует защита от вызова вложенных функций - скорее всего это часть стандартных мер безопасности. Это означает, что страница не в состоянии вызвать функцию из расширения - такое может только пользователь. То что и расширения, и userjs, и даже GM работают на 90%-100% через JS - не новость.

А я говорю всё возможно . Да, непосредственно основной код (если он вообще есть) который может использовать весь API находится в отдельной области и для любого страничного js не доступен. Для работы с содержимым страниц расширения используют includes, полностью функционально аналогичные обычному userjs. Из них-то и можно посредством сообщений вызывать внутренние функции.
Соответственно хоть кнопки на тулбар, хоть букмарклеты, хоть жесты делай, хоть вообще из кода веб-страницы расширением управляй.
Автор: Capushon
Дата сообщения: 18.04.2015 17:15
omamont: 21:59 16-04-2015
Цитата:
Иди рюши опере рисуй...
Какие рюши я рисую??? Покажи нам всем.
Автор: omamont
Дата сообщения: 18.04.2015 19:50
Capushon 16:15 18-04-2015
Цитата:
Какие рюши я рисую??? Покажи нам всем.

а, сам не мёгош? Держи:



ещё? держи:



Автор: Capushon
Дата сообщения: 18.04.2015 20:24
omamont
Это дополненное меню настроек, где "рюши для школоты" как Ты выразился???
Автор: VSHY
Дата сообщения: 18.04.2015 22:21
Liandri
Цитата:
В случае с API посылается запрос со всей нужной информацией в адресе, на что получается текстовый ответ в форме JSON-массива, который сразу же обрабатывается. 0.1-0.5 сек.

Цитата:
У меня аналогичный вопрос - если есть более надежные и функциональные расширения - зачем google-translate.js? Для меня это вопрос удобства, а для кого-то, похоже - вопрос религии.

Цитата:
В случае наличия у сервиса API такие временные проблемы исключены. Если что-то ломается, то навсегда - это будет свидетельствовать об обновлении самого API или политики предоставления информации.
Скрипт Lex'а не использую из-за его тормознутости. Для меня проще просто открыть страницу перевода в виде диалога.

Вы правы по поводу API. Под AkelPad давно написал простенький скрипт TranslateWithGoogleAPI.js, использующий API, много лет прошло, а всё работает как часы. Есть более сложный скрипт с использованием множества других ресурсов для перевода от KDJ Translator.js (там основная часть скрипта - организация UI для AkelPad'а).
Всё это, при желании, легко можно переточить для использования в Presto. К моему скрипту только диалог прикрутить, который у Lex'а есть в скрипте, и дело сделано. Чем эту жуть использовать, к которой все привыкли, - брр...
Автор: Capushon
Дата сообщения: 18.04.2015 22:23
omamont
?
Автор: billibons
Дата сообщения: 18.04.2015 23:00
VSHY
Цитата:
К моему скрипту только диалог прикрутить
Так "не будет ли любезен многоуважаемый джинн"?
Автор: Otto_Romwel
Дата сообщения: 19.04.2015 01:23
VSHY 22:21 18-04-2015
Цитата:
... его тормознутости ... эту жуть ...
1-1,5 сек. на перевод это жуть? С нетерпением жду сверхзвуковой и надёжный аналог.

Автор: VSHY
Дата сообщения: 19.04.2015 02:50
billibons, Otto_Romwel
Да мне-то оно не особенно надо, - я открытие страницы в новой вкладке использую..
Переточил скрипт под UserJS, но nот же самый скрипт почему-то возвращает статус 0. Уже и маскировку использовал, что только не передумал... Разве что сообщество поможет.
В скрипте поубирал пока код Lex'а, оставил только запуск по Shift+Alt+T для удобства тестирования.
[more=POST-метод]
Код: function ujs_google_translate(dir) {
    var vn_resultObject = "resultObject";
    var resText;        //text or undefined
    var selText = getSel();
    if (!selText) return;
    var req = createRequestObject();
    if (req) {
//        selText = selText.replace(/\n/g, "<n>");
        selText = encodeURIComponent(selText);
    
        var url = "https://translate.google.com/translate_a/t?";
        var params = "client=qlt&langpair=" + dir + "&q=" + selText + "&callback=" + vn_resultObject;
        
//        alert(params);
        
        try {
            req.open("POST", url, false);
//            req.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:37.0) Gecko/20100101 Firefox/37.0");
            req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            req.onreadystatechange = function() {
                if (req.readyState == 4) {
                    //complete
                    
                    alert("req.status = " + req.status);
                    
                    if (req.status == 200) {
                        //Ok
                        var tmpText = (req.responseText.indexOf(vn_resultObject) != -1) ? req.responseText.replace(vn_resultObject, "var " + vn_resultObject + " = ") : "var " + vn_resultObject + " = " + req.responseText;
        //                alert(tmpText);        //test message
                        eval(tmpText);
        
                        if (!resultObject.sentences) {
                            if (resultObject.error)
                                alert(resultObject.error.message + " (" + resultObject.error.code + ")");
                            else
                                alert("There is no error output object, possibly changed API format.");
                            return;
                        }
                        else {
                            resText = resultObject.sentences[0].trans;
                            for (var i = 1; i < resultObject.sentences.length; ++i)
                                resText += resultObject.sentences[i].trans;
                        }
//                        resText = resText.replace(/ {0,1}<n> {0,1}/g, "\n");
                        resText = resText.replace(/&amp;/gm, '&');
                        resText = resText.replace(/&lt;/gm, '<');
                        resText = resText.replace(/&gt;/gm, '>');
                        resText = resText.replace(/&quot;/gm, '"');
                    }
                    else {
                        if (req.statusText)
                            alert("Unable to retrieve data (" + req.statusText + ")!");
                    }
                }
            };
            req.send(params);
        }
        catch( e )
            { alert(e); }
                
        if (resText) {
            if (resText != selText) {
                alert(resText);
            }
            else {
                alert("Translation for '" + selText + "' is missing.");
            }
        }
    }
}

function getSel(w /*window or frame*/) {
    var s = '';
    if (arguments.length < 1)
        w = window;
    var d = w.document;
    if (d.selection) {
        var r = d.selection.createRange();
        s = r ? r.text : '';
    }
    else {
        s = d.getSelection().toString();
        if (!s) {
            var e;
            var t = d.getElementsByTagName('textarea');
            var u = d.getElementsByTagName('input');
            var i = t.length;
            while (e = (i > 0) ? t[--i] : u[-i--]) {
                try {
                    if (e.offsetHeight > 0 && (s = e.value.substring(e.selectionStart, e.selectionEnd)))
                        break;
                }
                catch(x) {}
            }
        }
    }
    return s;
}

function createRequestObject() {
    var xmlhttp;
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
            xmlhttp = false;
        }
    }
    if (!xmlhttp && typeof(XMLHttpRequest) != 'undefined') {
        xmlhttp = new XMLHttpRequest();
    }
    return xmlhttp;
}

// Hotkey Alt+Shift+T. 'en|ru' set by default
document.addEventListener('keydown', function(e){
    if (e.shiftKey && !e.ctrlKey && e.altKey && e.keyCode == 84) ujs_google_translate('en|ru');
}, false);
Автор: Otto_Romwel
Дата сообщения: 19.04.2015 16:18
VSHY
Если перейти по адресу https://translate.google.com/translate_a/t?client=qlt&langpair=auto|ru&q=translate Google требует ввести капчу. А если client=dict-chrome-ex, тогда нет.

Автор: VSHY
Дата сообщения: 20.04.2015 01:19
Otto_Romwel
Спасибо за подсказку! В адресной строке браузера url работает, но скрипты почему-то нет. Постоянно вылетает alert с ошибкой "DOMException: NETWORK_ERR". Мне кажется, что какая-то хитрая опция у меня отключена в настройках Оперы; не подскажете какая?
Переделал скрипт, но по идее он должен работать также, как и предыдущий.
[more=GET-метод]
Код: function getSel(w /*window or frame*/) {
    var s = '';
    if (arguments.length < 1)
        w = window;
    var d = w.document;
    if (d.selection) {
        var r = d.selection.createRange();
        s = r ? r.text : '';
    }
    else {
        s = d.getSelection().toString();
        if (!s) {
            var e;
            var t = d.getElementsByTagName('textarea');
            var u = d.getElementsByTagName('input');
            var i = t.length;
            while (e = (i > 0) ? t[--i] : u[-i--]) {
                try {
                    if (e.offsetHeight > 0 && (s = e.value.substring(e.selectionStart, e.selectionEnd)))
                        break;
                }
                catch(x) {}
            }
        }
    }
    return s;
}

function ujs_google_translate(dir) {
    var vn_resultObject = "resultObject";
    var resText;        //text or undefined
    var selText = getSel();
    if (!selText) return;
    var req = createRequestObject();
    if (req) {
//        selText = selText.replace(/\n/g, "~#~");
        selText = encodeURIComponent(selText);
    
        var url = "http://translate.google.com/translate_a/t?client=dict-chrome-ex&langpair=" + dir + "&q=" + selText;
        
        try {
            req.open("GET", url, false);
            req.send(null);
            if (req.readyState == 4) {
                //complete
                
                alert("req.status = " + req.status);
                
                if (req.status == 200) {
                    //Ok
                    
//                    alert(req.responseText);
                    
                    eval("var " + vn_resultObject + " = " + req.responseText);
    
                    if (!resultObject.sentences) {
                        if (resultObject.error)
                            alert(resultObject.error.message + " (" + resultObject.error.code + ")");
                        else
                            alert("There is no error output object, possibly changed API format.");
                        return;
                    }
                    else {
                        resText = resultObject.sentences[0].trans;
                        for (var i = 1; i < resultObject.sentences.length; ++i)
                            resText += resultObject.sentences[i].trans;
                    }
//                        resText = resText.replace(/ {0,1}~#~ {0,1}/g, "\n");
                    resText = resText.replace(/&amp;/gm, '&');
                    resText = resText.replace(/&lt;/gm, '<');
                    resText = resText.replace(/&gt;/gm, '>');
                    resText = resText.replace(/&quot;/gm, '"');
                }
                else {
                    if (req.statusText)
                        alert("Unable to retrieve data (" + req.statusText + ")!");
                }
            }
        }
        catch( e )
            { alert(e); }
                
        if (resText) {
            if (resText != selText) {
                alert(resText);
            }
            else {
                alert("Translation for '" + selText + "' is missing.");
            }
        }
    }
}

function createRequestObject() {
    var xmlhttp;
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
            xmlhttp = false;
        }
    }
    if (!xmlhttp && typeof(XMLHttpRequest) != 'undefined') {
        xmlhttp = new XMLHttpRequest();
    }
    return xmlhttp;
}

// Hotkey Alt+Shift+T. 'en|ru' set by default
document.addEventListener('keydown', function(e){
    if (e.shiftKey && !e.ctrlKey && e.altKey && e.keyCode == 84) ujs_google_translate('en|ru');
}, false);
Автор: Otto_Romwel
Дата сообщения: 20.04.2015 01:30
VSHY 01:19 20-04-2015
Цитата:
Постоянно вылетает alert с ошибкой "DOMException: NETWORK_ERR".
У меня тоже самое, попробовал через прокси — "req.status = 405", "Unable to retrieve data (Methob Not Allowed)!

Цитата:
Переделал скрипт, но по идее он должен работать также, как и предыдущий.
GET-метод [?]Попробуйте пожалуйста погонять оба.
Сейчас попробую.


Добавлено:
Да, "DOMException: NETWORK_ERR". А в консоли:
Цитата:
JavaScript - https://translate.google.com/translate_a/t?
Cross-origin resource sharing check [response verification]
Access denied, Access-Control-Allow-Origin not included in response.

В предыдущем сначала алерт "req.status = 0" вылетал, сейчас — нет.
Автор: VSHY
Дата сообщения: 20.04.2015 01:52
Otto_Romwel
Поставил перед send такую строку (в доке сказано, что даёт доступ всем):
Код: req.setRequestHeader("Access-Control-Allow-Origin", "*");
Автор: VSHY
Дата сообщения: 21.04.2015 20:38
Все мои попытки, к сожалению, оказались безрезультатными. Похоже гугл блокирует запросы, анализируя заголовки; я их подменял но это не помогает.
Автор: Otto_Romwel
Дата сообщения: 23.04.2015 13:00
VSHY 20:38 21-04-2015
Цитата:
Похоже гугл блокирует запросы, анализируя заголовки; я их подменял но это не помогает.
Но модифицированный Liandri Instant-Dictionary работает же.
Liandri 11:49 16-04-2015
Цитата:
Если кому нужен переводчик выделенного текста - вот результат моих ковыряний в Instant-Dictionary: http://rghost.net/6vPVln4wq (оригинал)
Автор: VSHY
Дата сообщения: 23.04.2015 13:54
Otto_Romwel
Цитата:
Но модифицированный Liandri Instant-Dictionary работает же.
Установил, справа от строки поиска появилась голова. Выделяю текст - ничего не происходит; жму на голову при выделенном тексте - ничего не происходит; захожу в "Управления расширениями", оно включено, пытаюсь зайти в настройки расширения - ничего не происходит.
Автор: ggg33
Дата сообщения: 23.04.2015 15:44
Подскажите как побороть рекламный баннер, на различных сайтах народ.ру в правом верхнем углу. Пример ? Что прописать в правила для NoAds Advanced ?
Автор: Otto_Romwel
Дата сообщения: 23.04.2015 16:06
VSHY 13:54 23-04-2015
Цитата:
Установил, справа от строки поиска появилась голова. Выделяю текст - ничего не происходит; жму на голову при выделенном тексте - ничего не происходит; захожу в "Управления расширениями", оно включено, пытаюсь зайти в настройки расширения - ничего не происходит.
Если не попадёте в настройки, работать и не будет — по умолчанию перевод не активирован. У меня проблем не возникало, может конфликтует с другим расширением?
Из расширений-переводчиков Translator поддерживается для Presto. Тоже работает.
Автор: Unitaz
Дата сообщения: 23.04.2015 16:36
kill
Автор: Otto_Romwel
Дата сообщения: 23.04.2015 16:57
Unitaz
Что-то вы не то установили, расширение называется Instant-Translate и иконка у него такая:

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196

Предыдущая тема: Расширения для Firefox (Mozilla Firefox Extensions)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.