Chromeの翻訳バーっぽいのをSleipnirで使えるようにするスクリプト

概要

Chrome Frame使えば本物の翻訳バー使えますけどねw
まさか全ページをChrome Frameで見るわけにも行かず、そんなの非効率ですからw


ちなみに、id:Kei_9さんが以前に同様のコンセプトでエクステンション作っておられます。
ページ翻訳:Google Chrome風のアレを作ってみた - Kei_9 なげやりにっき
Google Chrome風のアレを作ってみた『その2』 - Kei_9 なげやりにっき


私の場合はGoogleウェブサイト翻訳ツールスクリプトで挿入する方式にしてみました。
なお、FirefoxアドオンのgTranslatorを参考にしました。

  • SeaHorseスクリプト
    • HTMLタグのlang属性が指定されていて且つ日本語("ja")以外を指定している場合に発動するはずです。
    • 多重に発動してメモリ食い続けてSleipnirが落とされたり、ツールバーを閉じれなかったりしたので分岐判定入れてます。
    • Chromeの翻訳バーと違い発動を除外させる手段を作ってないので、現時点では"@exclude"を追記していくしか無いかなと。*1
  • UAスクリプト
    • 特に判定は入れておらず、言語も自動検出するようにしてあります。
    • SeaHorseスクリプトの方が発動しないけど、使いたい場合などにどうぞ。

※どちらもあまりテストしてないので、Sleipnirがフリーズしたり、落ちたりする場合がある鴨。

  • GoogleWebsiteTranslationToolbar.user.js
// ==UserScript==
// @name         Google Website Translation Toolbar
// @namespace    http://d.hatena.ne.jp/barrackdo/
// @author       破楽戸.*
// @include      http://*
// @include      https://*
// ==/UserScript==

(function() {

var flag = false;

var sk = document.getElementsByTagName("div");
for(var i = 0; i < sk.length; i++) {
	if(sk[i].className == "skiptranslate") {
		flag = true;
	}
}

var lang = document.getElementsByTagName("html")[0].lang;
if(lang == "ja" || lang.length == 0) {
	flag = true;
}

if(!flag) {
	var d=document;
	var b=d.body;
	var o=d.createElement('script');
	o.setAttribute('src','//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit');
	o.setAttribute('type','text/javascript');
	b.appendChild(o);
	var v=b.insertBefore(d.createElement('div'),b.firstChild);
	v.id='google_translate_element';
	v.style.display='none';
	var p=d.createElement('script');
	p.text='function googleTranslateElementInit(){new google.translate.TranslateElement({pageLanguage:\"'+lang+'\",multilanguagePage:true},\"google_translate_element\");}';
	p.setAttribute('type','text/javascript');
	b.appendChild(p);
}

}());
  • GoogleTranslationToolbar.js
(function() {

var d=document;
var b=d.body;
var o=d.createElement('script');
o.setAttribute('src','//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit');
o.setAttribute('type','text/javascript');
b.appendChild(o);
var v=b.insertBefore(d.createElement('div'),b.firstChild);
v.id='google_translate_element';
v.style.display='none';
var p=d.createElement('script');
p.text='function googleTranslateElementInit(){new google.translate.TranslateElement({pageLanguage:\"auto\",multilanguagePage:true},\"google_translate_element\");}';
p.setAttribute('type','text/javascript');
b.appendChild(p);

}());

*1:除外したいページをDBに蓄積させて、正規表現で評価する分岐入れれば良いかもね。やる気無いから作らないけどw