Google検索結果の日本語と英語を切り換えるブックマークレットを作った

Google検索には「ウェブ全体から検索」と「日本語のページを検索」というオプションがある。とりあえず日本語のページを見たい時は日本語検索、本家本元のオフィシャルなページを見たいときはウェブ全体から検索と使い分けることが出来る。

でも、これはあんまり役に立たない。例えば"Firefox"でウェブ全体から検索日本語のページを検索を試してみると、どっちも検索トップはhttp://mozilla.jp/firefox/と日本語ページになる。そうじゃなくて、ウェブ全体の時はhttp://www.mozilla.com/en-US/firefox/とか英語のページになってほしい。

確かに日本語のみの場合よりウェブ全体の方がヒットする件数が増えるけど、肝心の検索トップが日本語のままだったらウェブ全体で検索した意味がない。

これをなんとかするには、URLの"hl=ja"を"hl=en"に置き換えれば良い。これは本来Googleのインターフェイス言語を切り換えるパラメータなんだけど、それにつられて検索結果も英語に変わってくれる。でも、これを手でやっていたら面倒くさいので、ブックマークレットにした。

本当はドラッグ&ドロップですぐ使える形で書きたいんだけど、はてなでは利用できるタグの関係でそれができない。なので直接コードを書くことにする。

javascript:(function(){if(location.hostname.match(/^[a-zA-Z]+\.google\.(com|co\.jp)$/)){var newUri=location.href.replace(/\bhl=(en|ja)\b/,function(x0,x1){return x1=="en"?"hl=ja":"hl=en";});if(newUri!=location.href){location.href=newUri;}}})();

スペース、改行を入れると以下のようになる。

javascript:(
    function(){
        if (location.hostname.match(/^[a-zA-Z]+\.google\.(com|co\.jp)$/)) {
            var newUri = location.href.replace(/\bhl=(en|ja)\b/,
                function(x0, x1) {return x1 == "en" ? "hl=ja" : "hl=en";}
            );  
            if (newUri != location.href) {
                location.href = newUri;
            }   
        }   
    }   
)();

使い方は簡単で、Google検索結果のページでこのブックマークレットをクリックするだけだ。Web検索(www.google)以外にも対応しているので、Googleニュースとかでも使える。

これで安心して検索できるようになった。

2008/11/04 追記

なんでも、varをつけても変数がグローバルになってしまうらしい。なので無名関数を呼び出すように変更した。

参考: Bookmarklet - ブックマークレットを作成する際のポイント

2008/11/9 追記

しげふみメモGoogle検索の日本語版と英語版の切り替えにコメントとしてこれを紹介した。そしたら「"hl=ja"とかがない場合は切り替わらないよ」と指摘を受けた。なので、直す。

javascript:(function(){var result=location.hostname.match(/^[a-zA-Z]+\.google\.(com|co\.jp)$/);if(result!==null&&location.search.match(/^\?[a-zA-Z]/)){var defaultLang=result[1]=="com"?"ja":"en";var newUri=location.href.replace(/\bhl=(en|ja)\b/,function(x0,x1){return x1=="en"?"hl=ja":"hl=en";});if(newUri==location.href){newUri=location.href.replace(/\?/,"?hl="+defaultLang+"&");}location.href=newUri;}})();

スペース、改行を入れると以下のようになる。

javascript:
(
    function(){
        var result = location.hostname.match(/^[a-zA-Z]+\.google\.(com|co\.jp)$/);

        if (result !== null &&
            location.search.match(/^\?[a-zA-Z]/)) {

            var defaultLang = result[1] == "com" ? "ja" : "en";
            var newUri = location.href.replace(/\bhl=(en|ja)\b/,
                function(x0, x1) {return x1 == "en" ? "hl=ja" : "hl=en";}
            );
            if (newUri == location.href) {
                newUri = location.href.replace(/\?/, "?hl=" + defaultLang + "&");
            }
            location.href = newUri;
        }
    }
)();

要するに、"hl=ja"とかが無い場合、google.comの時は"hl=ja"、google.co.jpのときは"hl=en"を足すようにした。