Request: плагин - переводчик

Discuss and announce AkelPad plugins

Будет ли для вас такой плагин полезным?

Да!
3
50%
Нет!
3
50%
 
Total votes: 6
  • Author
  • Message
Offline
Posts: 9
Joined: Sat Apr 23, 2011 7:53 am

Request: плагин - переводчик

Post by user-id-4576 »

Было бы круто сделать плагин - переводчик, работающий по принципу HexShell - экран делиться пополам, вверху оригинал, внизу перевод, при выделении переводиться только выделенное, каретка ездит синхронно. В подсказках при задержке указателя вылазят варианты перевода.

Было б круто работать с документацией на англ языке.

Offline
Posts: 9
Joined: Sat Apr 23, 2011 7:53 am

Post by user-id-4576 »

Блин неужели настолько бесполезная идея.

Ведь часто попадаются рид ми на английском и иметь под рукой переводчик былобы очень полезно.

Может стоило сделать опрос по другому.....

Что то типа "Имеет ли право на существование такой плагин?"

Offline
Posts: 139
Joined: Fri Feb 12, 2010 11:33 am

Post by Deim0s »

user-id-4576,
Блин неужели настолько бесполезная идея.
Скорее непонятная. Каков должен быть движок плагина? Из опен-сорсного на ум приходит StarDict, установка которого без словарей, если не изменяет память, занимает более 50 Мб.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

user-id-4576 wrote:Что то типа "Имеет ли право на существование такой плагин?"
Право на существование имеет любой плагин, только кто его писать будет?
user-id-4576 wrote:Блин неужели настолько бесполезная идея.
Идея бесполезная, т.к. тексты в основном переводятся с помощью онлайн-переводчиков.

Для открытия словарных статей в Яндекс.Словарях, Википедии в Punto Switcher'е можно настроить комбинации клавиш, например у меня настроено так:
- Win+Я - поиск в Яндексе;
- Win+C - открытие словарной статьи в Яндекс.Словарях;
- Win+W - открытие словарной статьи в русской Википедии; можно ещё в английской настроить.

Для перевода словосочетаний или коротких предложений есть InternetRequest.js.
Длинный текст просто копирую и вставляю в онлайн-переводчик, что неудобно.
Лучше бы сняли ограничение на количество передаваемых символов или, если это невозможно (вроде бы это ограничение WshShell.Run), лучше бы добавили тег, который не просто берёт выделенный текст (\s), а копирует его в буфер обмена, а потом вставляет при формировании запроса целиком, как это сделано в Opera. Пример пункта меню Opera:

Code: Select all

Item, "En -> Ru (Google)" = Go to Page, "javascript:void(window.open('http://translate.google.com/#en|ru|'+encodeURIComponent(function(){var d=document,s=d.getSelection(),t=d.querySelectorAll('textarea,input[type=\x22text\x22],input[type=\x22search\x22],input:not([type])');if(!s)for(var i=0,e;e=t[i];i++){if(s=e.value.substring(e.selectionStart,e.selectionEnd))break}return s}()),'','width=800,height=576,left=100,top=100,scrollbars=yes,location=no'));",,, "lng_ru"
вернее вот так:

Code: Select all

Item, "Грамота.Ru" = Copy, -2,,, "null" & New Page & Go to page, "http://www.gramota.ru/slovari/dic/?word=%c&all=x&lop=x&efr=x&zar=x&ag=x&ab=x&sin=x&lv=x&az=x&pe=x"
Здесь, правда, используется передача через ini-переменную %c, но не поверю, что кроме как Раном больше не передать необходимую строку...
Вот это было бы толково.
А если бы сделать так, чтобы предыдущее значение в буфере восстанавливалось, то вообще было бы здорово.

Offline
Posts: 9
Joined: Sat Apr 23, 2011 7:53 am

Post by user-id-4576 »

Идея бесполезная, т.к. тексты в основном переводятся с помощью онлайн-переводчиков.
Под рукой может не быть интернета, к тому же текст (допустим) уже открыт и оказался на другом языке (чаще всего англ) - жмем кнопку сразу видим перевод. Помоему весьма удобно.
только кто его писать будет?
Но ведь уже существующие плагины не сами собой появились.)) И за это авторам огромное спасибо, лично я для себя решил что акел это лучший редактор из всего что я видел, очень простой, легко переносимый с компа на комп и очень грамотно сделаный.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

user-id-4576 wrote:Под рукой может не быть интернета
Как уже сказал Deim0s - можно воспользоваться программой переводчиком. Проблема та же - не удастся передать большой кусок текста.
user-id-4576 wrote:Но ведь уже существующие плагины не сами собой появились.))
А этот - нет.
Напишите - появится :)

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

VladSh wrote:Лучше бы сняли ограничение на количество передаваемых символов или, если это невозможно (вроде бы это ограничение WshShell.Run), лучше бы добавили тег, который не просто берёт выделенный текст (\s), а копирует его в буфер обмена, а потом вставляет при формировании запроса целиком, как это сделано в Opera.
Это ограничение на длину URL передаваемую через командную строку как минимум самих браузеров. Лучше напрямую запросить перевод через ActiveX "http://code.google.com/intl/ru/apis/lan ... rview.html", но это к Infocatcher'у - он тут спец :)

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Из ЛС (было вставлено позже):
Infocatcher wrote:
VladSh wrote:Это на комп надо устанавливать какое-то апи и регистрировать его как ActiveX? Может есть какой-нибудь универсальный (уже существующий в Винде) ActiveX, с помощью которого можно было бы передавать запросы в инет и получать результаты?
Нет, ничего дополнительного не требуется.
Фокус в том, что у MS AJAX запросы надо делать через ActiveX. Особенно в WSH – там XMLHttpRequest вообще не реализован, а в IE на него действует ограничение по домену.
Так что в данном случае API – это когда сервер отдает данные в удобном виде.
Instructor wrote:Лучше напрямую запросить перевод через ActiveX "http://code.google.com/intl/ru/apis/lan ... rview.html", но это к Infocatcher'у - он тут спец :)
Infocatcher, помогите! :D
Чё-то badRequest всегда возвращается:

Code: Select all

var req = createRequestObject();
if (req)
{       
	var sURL = "https://www.googleapis.com/language/translate/v2?key=INSERT-YOUR-KEY&source=en&target=ru&callback=resultText&q=" + encodeURIComponent(AkelPad.GetSelText());
	
	req.open("GET", sURL, false);
	req.onreadystatechange = processReqChange;
	req.send();
}


function createRequestObject()
{
	if (typeof(XMLHttpRequest) === 'undefined')
	{
		XMLHttpRequest = function()
		{
			try { return new ActiveXObject("Msxml2.XMLHTTP"); }
			  catch(e) {}
			try { return new ActiveXObject("Microsoft.XMLHTTP"); }
			  catch(e) {}
			throw new Error("Your system does not support XMLHttpRequest.");
		};
	}
	return new XMLHttpRequest();
}


function processReqChange()
{
  try {
    // только при состоянии "complete"
    if (req.readyState == 4)
    {
        // для статуса "OK"
        if (req.status == 200)
        {
            // обработка ответа
            WScript.Echo("|" + req.responseText + "|");
        }
        else {
            WScript.Echo("|" + "Не удалось получить данные:\n" + req.statusText + "|");
        }
    }
  }
  catch( e ) {
      WScript.Echo('Ошибка: ' + e);
  }
}
Last edited by VladSh on Fri Apr 29, 2011 9:42 am, edited 1 time in total.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

?key=INSERT-YOUR-KEY
Ммм?

Где-то на http://forum.wincmd.ru/ был скрипт в виде HTA.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Infocatcher wrote:Где-то на http://forum.wincmd.ru/ был скрипт в виде HTA.
Нашёл здесь, но оно жутко бажит, и никакого кода для формирования запроса я не увидел...
Хотелось бы чисто под Акел замутить скриптец.
Infocatcher wrote:
?key=INSERT-YOUR-KEY
Ммм?
:mrgreen:
на сайте гугла есть такое:
Warning: You need your own API key in order to use the Google Loader. In the example below, replace "INSERT-YOUR-KEY" with your own key. Without your own key, these examples won't work.
...
You must have a Google Account to obtain a Google API key, and your API key is tied directly to your Google Account...
Никто не знает, где можно на шару взять такой ключ?

P.S. Не обязательно в Акел результат возвращать, достаточно было бы просто передать большой текст в открывающуюся страницу браузера.. только вот как это сделать?

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

VladSh
Никто не знает, где можно на шару взять такой ключ?
Если это этот ключ http://code.google.com/intl/uk-UA/apis/ ... ignup.html то, можно сделать за две минуты:
1. Регистрируемся в гугле(gmail-ом и/или прочими сервисами).
2. Заводим себе где-то халявную страничку(даже на том же гугле).
3. Логинимся в гугл.
4. Переходим по выше указанной ссылке.
5. Вбиваем ссылку на страничку. И получаем ключ.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

VladSh
Your script works.

Image

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

FeyFre wrote:Если это этот ключ http://code.google.com/intl/uk-UA/apis/ ... ignup.html то, можно сделать за две минуты...
Да, этот. Только не хочется региться ещё и на гугле, и так уже столько регистраций, что запутаться можно...

KDJ
Thank you for being tested. Now I know that it works :D


EDITED: друг сгенерил APIkey, я его подставил в скрипт, но всё равно получается вот такая фигня:
---------------------------
|resultText({
"error": {
"errors": [
{
"domain": "global",
"reason": "badRequest",
"message": "Bad Request"
}
],
"code": 400,
"message": "Bad Request"
}
}
);|
---------------------------
ОК
---------------------------
:(
Может гугловский браузер должен стоять на компе? Или может быть это всё работает, когда залогинился на Гугле? Уже не знаю что и думать...
Есть какие-нибудь идеи?

Добавлено: текущая отладочная версия скрипта: ... [ выпилено ]


Ещё раз отредактировано :)
Решение простое: доку надо было лучше читать - v.2 - тестовая, в ней требуется API_KEY. Пока надо использовать v.1, в которой API_KEY опционален. Будем надеяться, что в финальной v.2 его опять переведут в статус опциональных..

Рабочая версия скрипта: TranslateWithGoogleAPI.js; поддерживаются v.1 и v.2 API.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

VladSh
Удобно теперь :) Только "AkelPad.Command(4101);" закомментировал. Можно добавить новый второй параметр "2" - менять на месте и в таком случае добавить true в методе ReplaceSel, т.к. наглядно видно какой текст был заменен.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Infocatcher wrote:
VladSh wrote:у меня почему-то не работает мой код
Я так понимаю, заработало?
Если пустить скрипт в сеть, то у меня работает. :)
Не, v.2 так и не работает, и не знаю почему ((
Что значит "пустить скрипт в сеть"?

Instructor
Сделано.

Новую вкладку планировал для "больших строк", да не тут-то было... - ещё один трабл обнаружился досадный.. - русского текста можно перевести только 542 символа, а английский - 1400 (( пишет:
Unable to retrieve data:
Request-URI Too Large
P.S. Человек пробовал вытянуть аякс-запросы при переводе большого текста (200 тысяч отправил и 50 тысяч получил результата) со страницы гугл-транслейта и заюзать из PHP, то у него получилось. Но там легче, т.к. юзается специальный фреймворк - отдельным методом задаётся url, отдельным методом параметры и т.п... на JS такое не получается, т.к. всё в url'е д.б. или я не разобрался.

И ещё неприятно - съедаются переводы строк.. можно ли что-то с этим сделать?

Поделитесь мыслями! :)
Post Reply