google翻訳apiで、#TEXTを翻訳する。
google翻訳apiで、#TEXTを翻訳する。
http://okwave.jp/qa/q6283012.html の#1を参考にして
#TEXTノードを全て翻訳しようとしてみました。
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
google.load("language", "1"); // 翻訳ライブラリ ver 1を読み込む
function NodeTextScan2(){
var tags=document.getElementsByTagName("body")[0].getElementsByTagName("*");
for(var i=0;i<tags.length;i++){
var n=tags[i].firstChild;
while(n){
if(n.nodeName=="#text" && n.nodeValue.length>3){
var CrntNodeTEXT=n;
var text=n.nodeValue;
google.setOnLoadCallback(function(){
// 日本語(ja)から英語(en)に翻訳
google.language.translate(text, "ja", "en", function(result){
var Kekka=result.translation;
alert('結果='+Kekka); //(3)
// 翻訳結果と入れ替える
CrntNodeTEXT.nodeValue=Kekka; //(1)
});
});
// CrntNodeTEXT.nodeValue="aaa"; //(2)
}
n=n.nextSibling;
}
}
}
http://journal.mycom.co.jp/articles/2008/04/16/googlehonyaku/002.html
より、
「完全にライブラリファイルが読み込まれたら実行するようにしなければなりません。ライブラリが完全に読み込まれたら処理を行うにはgoogle.setOnLoadCallback()を使います。」
と、いうことで、
setOnLoadCallback
を使用しました。
CrntNodeTEXT,text,Kekkaという変数を新たに定義したのは、ただ、nだけでは、同一名変数がどこかでバッティングしていないかと思ってのことです。
var宣言しているのでその心配もないとは思うのですが、念のため。
(1)をレムにして、(2)を実行すると、全ての#TEXTが"aaa"に変換されます。
しかし、(2)をレムにして(1)を実行しても何も変化ありません。
(3)は、変換結果を調べようと思い挿入してみましたが、Kekkaは表示されません。
いろいろとこのほかも試してみましたが、一つの<div>を翻訳することはできるのですが、body内の#TEXTを一括して翻訳することができません。
どうぞよろしくお願いいたします。
お礼
ありがとうございました。確かにペーストでできました。長文は難しいようです。