Kaoriya版Vimには標準で英和辞書検索機能が付いていますが、これはあくまで単語の翻訳しかできません。今回はGoogle翻訳APIで文字列の翻訳と言語の判定を行うモジュールを使って文章を丸ごと翻訳できるようにしてみました。
Google翻訳モジュールの用意
モジュールのソースに少しだけ書き足して保存します。
@@ -2,6 +2,7 @@
require 'json/lexer'
require 'httpclient'
require 'uri'
+require 'nkf'
#Google 翻訳APIで翻訳するモジュール
module Translate
@@ -83,7 +84,19 @@
def detect
@language = Translate.detect( self )
end
+ #UTF-8に変換
+ def utf8; NKF.nkf("-w -xm0", self); end
#言語
attr :language, true
end
+
+#Translate.set_proxy( "http://x.x.x.x:xx" )
+File.open($ARGV[0], "r") { |file|
+ str = file.read.utf8
+ unless (str.detect == :ja) then
+ puts str.to_ja
+ else
+ puts str.to_en
+ end
+}
requireしているモジュールは予めインストールしておく必要があります。
gem install ruby-json
gem install httpclient
vimrcの設定
vimrc側には以下のように書きました。範囲選択して\tで翻訳します。翻訳結果のプレビューウィンドウは:pcで閉じられます。
"Google翻訳
function! Google_translate() range
let src = tempname()
let dst = "Google Translate Output"
" put current buffer's content in a temp file
silent execute ": " . a:firstline . "," . a:lastline . "w " . src
" open the preview window
silent execute ":pedit! " . dst
" change to preview window
wincmd P
" set options
setlocal buftype=nofile
setlocal noswapfile
setlocal syntax=none
setlocal bufhidden=delete
" replace current buffer with ruby's output
silent execute ':%! ruby ' . $HOME . '\path\to\google_translate.rb ' . src . ' 2>&1 '
" change back to the source buffer
wincmd p
endfunction
"<Leader>tでバッファのテキストをGoogle翻訳し、結果をプレビュー表示
vnoremap <silent> <Leader>t :call Google_translate()<CR>
見ての通りRubyスクリプトの実行と結果のプレビュー表示の応用です。
追記@2009-12-26
vimでgoogle翻訳(perl編) - へたれエンジニア日記 ver.2
Perlワンライナー版
Comments»
no comments yet