jump to navigation

VimでGoogle翻訳

2009-11-01 12:18 Posted by
nase
in : プログラミング
ny_buildings.jpg

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


*Comments and trackbacks will appear after it is approved by the administrator.