Hatena::ブログ(Diary)

へたれエンジニア日記 ver.2 このページをアンテナに追加 RSSフィード

Perl用ブログも始めましたPerl勉強メモ

2009-12-23

[][]vimgoogle翻訳perl編) 00:38 vimでgoogle翻訳(perl編)を含むブックマーク vimでgoogle翻訳(perl編)のブックマークコメント

※2009/12/29追記

「'」「"」のエスケープ処理を追記しました。


※2009/12/27追記

setlocal modifiable

を追記しました。




探してみた

vimで翻訳できないかと探してみたら、以下のページがヒットしました。

VimGoogle翻訳ナレッジエース

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に入れといて、ビジュアルモードでテキストを選択して

英語→日本語翻訳は「<Leader>te」

日本語→英語翻訳は「<Leader>tj」

で翻訳できます。*1

せっかくなので相互変換できるようにしてみました。

文字コードによっては化けそうな気もしますが。

まあ自分の環境では問題なく変換できてるので良しとします!

*1google翻訳自体が微妙なのはナイショだよ!

トラックバック - http://d.hatena.ne.jp/toritori0318/20091223/1261582734