翻訳の王様を Meadow から使う(Ver. 4)

バージョンが上がりましたので、対応策を探しました。これも思ったより楽…。

前バージョンのスクリプトを以下のものに置き換えてください。

set Translator = CreateObject("KingTranslatorEjExe.Translator")
Translator.InitEngine()
WScript.Echo Translator.TranslateText(WScript.StdIn.ReadAll)
set Transrator = nothing

king.el の書き換えは前バージョンとまったく同じ。翻訳用のコマンドを CScript に変更して、実行時の引数としてオプションとスクリプトファイル名を指定します。

翻訳よりも辞書引きの方が実は役に立つという話もありますが(^^;) 王様の翻訳をクリップボード翻訳にして辞書引きが表示されるようにしておけば、Meadow で単語をリージョンを指定したときに自動的に(頼みもしないのにとも言う)辞書引きしてくれます。

これでウインドウの操作を行わなくとも(マウスに触らなくとも)翻訳と辞書引きの両方が見えて幸せに(?)

翻訳の王様を Meadow から使う

IBM翻訳の王様には、Linux版が付いてきます。mule から使うためのマクロも付いてます。なんか悔しいので Meadow から使う方法を考えてみました。といってもそんな大変なことでは…。

ちなみに Windows2000 でしか試してません。


スクリプトを用意

reg = "HKEY_CURRENT_USER\Software\IBM\King of Translation\KingServer\View\DispMode"

set WshShell = WScript.CreateObject("WScript.Shell")

mode = WshShell.RegRead(reg)
WshShell.RegWrite reg, 1, "REG_DWORD"

set King = CreateObject("KingServer.Application")
WScript.Echo King.Translate(WScript.StdIn.ReadAll)

WshShell.RegWrite reg, mode, "REG_DWORD"

とまぁ、こんなスクリプトを King.vbs とでもして作ってください。

CScript //nologo king.vbs

とコマンドラインから打てば、標準入力から英文を読んで、日本語訳を標準出力に出してくれます。あっさり解決してしまいました(笑)

ただし、一度ブラウザ翻訳の設定を保存していないとレジストリの操作のところでエラーが出ます。めんどくさいので特に何もしません。WshShell の行でやってるのは、英文と訳文の出力形式を変更しているだけです。気にならない人は消してもいいです。


king.el を書き換える

CD-ROMの中に Linux用として RPM ファイルが入ってますが、同時に tgz 形式でも収録されているので、これを適当なツールで展開。なかから king.el というファイルを取り出し、2箇所だけ書き換えてみます。

〜〜〜
(defvar king-version "1.00"
  "Version number of KingTranslation client.")
;(defvar *translate-command* "kingtr" nil)
(defvar *translate-command* "CScript" nil)
〜〜〜
〜〜〜
    (message "translation in progress...")
    (save-excursion
      (set-buffer "*TEMP*")
      (unwind-protect
          (if (not king-dictionary)
              (call-process-region (point-min) (point-max)
                                   *translate-command* nil buffer nil "//nologo" "c:/meadow/site-lisp/king.vbs")
            (call-process-region (point-min) (point-max)
                                 *translate-command* nil buffer nil "-d" king-dictionary))
        (kill-buffer "*TEMP*")))
    (message "translation in progress...done")

elisp はよく知らないので、動けばいい程度にしか書き換えられません(^_^;)

あとは適当に配置して適当に読み込んでやれば、king-translate-region くらいは動くと思います。

はーさっぱりさっぱり。


king.el については、複製、変更、配布が自由のようなので、だれかまともな感じにしていただけるとありがたい…。