vimでgoogle翻訳(perl編)
※2009/12/29追記
「'」「"」のエスケープ処理を追記しました。
※2009/12/27追記
setlocal modifiable
を追記しました。
探してみた
vimで翻訳できないかと探してみたら、以下のページがヒットしました。
VimでGoogle翻訳:ナレッジエース
http://blog.blueblack.net/item_410
でもこれ別ファイルにrubyのスクリプト用意しないといけないんですよねー。ちょっと面倒。
で、たまたま以下のページを見つけて「ワンライナーで出来るのでは?」と。
Google AJAX Language API で翻訳する:楽:勝手Perlリファレンス
http://perl.bayashi.jp/archives/entry/subroutine/get-something/2008/002309.html
初vimscript
上記urlを参考にvimscirptを作ってみました。
vimscriptくせがあって書きずらい…
あとWebService::Simpleが必要なので
cpan WebService::Simple
しておきましょう。
"Google翻訳 function! Google_translate(trn) range setlocal previewheight=6 let tmp = @@ silent normal gvy let tx = @@ let tx = substitute(tx, "\n", ' ', 'g') let tx = substitute(tx, '"', '""', 'g') let tx = substitute(tx, "'", "''", 'g') let dst = "GoogleTranslateOutput" " preview silent execute ":pedit! " . dst wincmd P setlocal buftype=nofile setlocal noswapfile setlocal syntax=none setlocal bufhidden=delete setlocal wrap setlocal modifiable " perl one liner silent execute ':%! perl -MWebService::Simple -e ''exit if @ARGV==0;my $t = WebService::Simple->new(base_url => "http://ajax.googleapis.com/ajax/services/language/translate",response_parser=>"JSON",params=>{v=>"1.0",langpair=>"'.a:trn.'",});my $r=$t->get({q=>$ARGV[0],}); print $r->parse_response->{responseData}->{translatedText};'' ''' . tx . ''' 2>&1 ' wincmd P endfunction "<Leader>teで英語→日本語翻訳 vnoremap <silent> <Leader>te :call Google_translate("en\|ja")<CR> "<Leader>tjで日本語→英語翻訳 vnoremap <silent> <Leader>tj :call Google_translate("ja\|en")<CR>
こいつを.vimrcに入れといて、ビジュアルモードでテキストを選択して
英語→日本語翻訳は「
日本語→英語翻訳は「
で翻訳できます。*1
せっかくなので相互変換できるようにしてみました。
文字コードによっては化けそうな気もしますが。
まあ自分の環境では問題なく変換できてるので良しとします!