2009-11-12 5 views
0

여러 언어의 콘텐츠가있는 웹 사이트의 일부 JavaScript 작업을하고 있습니다. Google 번역 API를 사용하여 사용자가 단어 (또는 문구)를 선택하고 번역이 자동으로 제공되도록하고 싶습니다. 당분간 테스트 용으로 결과를 알려주고 있습니다.Google 번역 API (및 jQuery)로 사용자가 선택한 텍스트 번역

이것은 내가 지금까지 가지고있는 것입니다 : 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() 함수는 구글의 language.translate() 함수를 분명히 호환되지 않는 범위 개체를 반환하는 것입니다. 정말 필요한 것은 Range에서 실제 텍스트를 문자열로 검색하여 전달할 수있는 방법입니다. 내가 아는 한 정말 쉽고 분명한 방법이 있는데, 실종 (예, selection.text 사용)했지만 자바 스크립트 사용 경험이 제한되어 있고 Google 검색으로 유용성이 전혀 밝혀지지 않았습니다.

아무도 도와 줄 수 있습니까?

답변

1

놀랍게도 내가 방금 완전히 놓친 정말 분명한 대답이있었습니다.

+1

그것은 경계선이지만, 여전히 당신은 악명 높은 Questioner-Who-Had-Answer-But-Alas-Brain-Is-Tricky-Stuff를 권할 가치가있다. –

1

당신은 같은 것을 할 수있는() selection.toString 다음 getSelection() 방법의 결과에 빈 문자열을 연결하여

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

을, 그 값은 문자열로 변환됩니다, 그것은 일반적인 짧다 - 손, 해당 호출 할 toString 메소드, 이유는 첫 번째 피연산자, 조건, 그 자동으로 변환하기 때문에

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

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

당신은 또한 원계에서 이중 논리 부정 (!!)를 사용할 필요가 없습니다 Boolean.

+0

아, 잘 알고 있습니다. 감사! –