🐯

機械翻訳Vimプラグインを作った

2024/02/16に公開

この記事はVim駅伝の2024-02-16の記事です。
前回の記事はkyoh86さんのVimによるToDo管理を支える技術です。


https://github.com/kawarimidoll/textra.vim

「みんなの自動翻訳@TexTra」を使用した翻訳プラグインを作りました。

https://mt-auto-minhon-mlt.ucri.jgn-x.jp/

内部的にcurlを使ってhttpリクエストし、翻訳を行います。

つかいかた

TexTraのユーザー登録が必要です。
登録後、ユーザーIDとAPI keyとAPI secretをtextra#setup()に渡して初期化します。

call textra#setup({
    \ 'name': 'your_name',
    \ 'key': 'your_key',
    \ 'secret': 'your_secret'
    \ })

その後、textra#translate()で翻訳を実行できるようになります。

echo textra#translate('Hello world!', 'en', 'ja')

このプラグインでは特にコマンドを用意していませんが、ユースケースに応じて、適切なコマンドを定義すると便利です。
以下は冒頭に添付したGIFで使用しているものです。
翻訳したい文字列を一度yankし、その内容をもとに翻訳を行います。:Textra ja enのように使います。
popup_atcursorを使っているのでVim専用です。ここの表示部分を変えればNeovimでも動きます。

function s:display_result(result) abort
  call popup_atcursor(a:result, {})
endfunction

function s:cmd_translate(from_lang, to_lang, reg = '') abort
  echo '[textra] translate ...'
  let src = getreg(a:reg)->substitute('[[:space:]]\+', ' ', 'g')
  let dst = textra#translate(src, a:from_lang, a:to_lang)
  redraw!
  call s:display_result(dst)
endfunction

command! -nargs=+ Textra call s:cmd_translate(<f-args>)

このへんはいくつかヘルプにサンプルを載せたので見ていただけると嬉しいです。

謝辞

このプラグインは2024/01/17に参加した目黒.vimで作成しました。

https://megurovim.connpass.com/event/305015/

Discussion