Перевести выбранный пользователем текст с помощью Google Translate API (и jQuery) - PullRequest
0 голосов
/ 12 ноября 2009

Я работаю над JavaScript для веб-сайта с контентом на нескольких языках. Я хотел бы использовать Google Translate API, чтобы позволить пользователю выбрать слово (или фразу) и автоматически предоставить перевод. В настоящее время я просто сообщаю о результатах тестирования.

Это то, что я имею до сих пор: google.load ("language", "1");

function getSelection() {
    var selection = (!!document.getSelection) ? document.getSelection() :
           (!!window.getSelection)   ? window.getSelection() :
           document.selection.createRange().text;
    if (selection.text)
        selection = selection.text
    console.log(selection);
    return selection
}

$(document).ready(function() {    
    $(window).mouseup(function() {
        var selection = getSelection();
        if (selection != "") {
            google.language.translate(selection, "", "en", function(result) {
                if (!result.error) {
                    alert(result.translation);
                } else {
                    alert(result.error);
                }
            });
        }
    });
});

Проблема, с которой я сталкиваюсь, заключается в том, что моя функция getSelection () возвращает объекты Range, которые, по-видимому, несовместимы с функцией google language.translate (). Все, что мне действительно нужно, это способ получить фактический текст из диапазона в виде строки, чтобы я мог передать это. Насколько я знаю, есть действительно простой и очевидный способ сделать это, которого мне просто не хватает (да, я пробовал использовать selection.text), но мой опыт работы с JavaScript ограничен, и поиск в Google не выявил ничего полезного.

Может кто-нибудь помочь?

Ответы [ 3 ]

1 голос
/ 12 ноября 2009

Неудивительно, что был действительно очевидный ответ, который я просто полностью пропустил. selection.toString () ...

1 голос
/ 12 ноября 2009

Вы можете сделать что-то вроде этого:

function getSelection() {
    var selection = window.getSelection ? window.getSelection() + ''
                                        : document.selection.createRange().text;
    return selection
}

Путем конкатенации пустой строки с результатом метода getSelection() его значение преобразуется в строку, что является общим сокращением, эквивалентным вызову метода toString, поскольку:

var test = {
  toString: function () { 
    return 'foo';
  }
};

test+'' == 'foo'; // true

Вам также не нужно использовать двойное логическое отрицание (!!) в троичной форме, поскольку первый операнд, условие, автоматически преобразуется в логическое значение.

1 голос
/ 12 ноября 2009

Попробуйте jQuery google translate - http://code.google.com/p/jquery-translate/.

...