血統の森+はてな

旧はてなダイアリーの自動インポートによるアーカイブです。

OmegaT補助ツールとしてのOkapi Rainbow

OmegaTのHTMLパーサーってかなりアレだよね、っていつもの如くぼやいていたら@amadlonkayさまから

と、Okapi Rainbowを紹介されたので(そしてあまりにも日本語情報が少ないので)、ここに少し詳しい目に自分の頭の整理もかねてメモをしてみるテスト。この記事に誤りがある場合はコメントしてもらえれば幸い。

Okapi FrameworkとOkapi Rainbow

Okapi Frameworkが何なのかというと、Wikipediaの説明を借りてくれば、

Okapi Framework とは、ソフトウェアの国際化や文書の翻訳に関する各種の作業を統合的に支援するためのフレームワークであり、データ交換のための規格、ファイル形式の定義、アプリケーション・ソフトウェア実装などからなる。Windows プラットフォームをサポートしている。

Okapi Framework - Wikipedia

というもので、Okapi Frameworkが備えている様々な機能をGUIから使用できるアプリケーションの1つがOkapi Rainbow(以下、単にRainbowとも)という位置づけらしい。

OmegaTのHTMLフィルタとOkapi Rainbowについて

OmegaTに一度でも複雑なHTMLを食わせれば、OmegaTのHTMLフィルタがそこかしこでBuggyな挙動を示すことは、OmegaTでHTMLを扱う際に悩まされる数々のバグ - 血統の森+はてなにも過去に書いたとおり、事前にHTMLに細工すればどうにかなるものから、翻訳済みHTMLファイルを手で書き換えないとどうしようもないものまで多岐にわたる。@yu_tang_さまもいうように、

OmegaTのHTMLパースはアレと。しかし、Okapi RainbowにOmegaTのプロジェクトを作成させることで、OmegaTに直接HTMLを喰わせるのではなく、RainbowにHTMLをパースさせてXLIFFを吐き出させ、そのXLIFFをOmegaT上でいつものように翻訳作業を行う、というワークフローとなる。図にするならこういう感じだろうか

OmegaTのみ
[翻訳元HTML]->[OmegaTのHTMLフィルタ]->[OmegaTで翻訳]->[翻訳済HTML]

OmegaT+Okapi Rainbow
[翻訳元HTML]->[Rainbow上でOmegaT用プロジェクトを生成]->[XLIFFがソースファイルとなる]->[OmegaTのXLIFFフィルタ]→(下に続く)
(下からの続き)→[OmegaTで翻訳]->[RainbowでXLIFFを元に翻訳済HTMLを生成]->[翻訳済HTML]

と、イメージとしては敢えて中間ファイルフォーマットを1段咬ませていく感じ。XLIFFというのはOASIS規格のXMLベースの国際化のため(つまり翻訳のため)のものであるから、HTMLよりかは遙かにパースするのは簡単(そしてさすがにOmegaTはきちんとXLIFFをパースできてるっぽい)のと、別にOmegaTに咬ますためだけにRainbowを使わなくてもいい(言い換えるなら、Rainbowが連携できるソフトは他にもある)と言うことがわかるかな、と。

ただ、記事タイトルにもあるとおり、OmegaT補助ツールとしてのRainbowをここでは扱うので、ここではそのことしか書かない(し書けない)。

Okapi Rainbowのごく簡単なチュートリアル

ごく簡単に。ところどころハマったので一応。ここでは、Rainbow Version6.0.25 SNAPSHOTをもとに記述している。

0. ダウンロード

普段は当サイトでこんなこと書かないんですが、私の場合Win8.1だとなぜかx86-64だとなぜか動かなかったので、x86バイナリをダウンロードした方が無難かと思われる。

stableは https://bintray.com/okapi/Distribution/Okapi_Applications から、snapshotは http://okapi.opentag.com/snapshots/ から入手可能。

適当なディレクトリに展開して、rainbow.exeを起動させる。

1.RainbowでOmegaTのプロジェクトを作成する

ここから下はTutorial - Using Translation Packagesを注意深く読めばわかる話なので、要所だけおさえる感じで。

rainbow.exeを起動すると、

みたいな感じの画面になる。まずタブ[Input List1]で右クリックしてコンテキストメニューから[Add Documents...]を選んでファイルを選択するなり、ドラッグアンドドロップをするなりして、翻訳したいファイを追加する。

次にタブ[Language and Encodings]を選択して、エンコーディングを選択する。Rainbowが自動でエンコーディングの検出に失敗するのか、RainbowのHTMLフィルタの設定が悪いのかは定かでないけど、<meta charset="utf-8">という記述が翻訳元ファイルにあったとしても無視されるみたいなので、エンコーディングは入出力とも所望のエンコーディングをここで仕込んでおく。

で前準備が終わったらメニューの[Utilities]→[Translation Kit Creation...]を選択する(下図参照)。

基本操作としては、上図の赤で囲った部分([Translation Kit Creation...]と[Translation Kit Post-processing...])のみを使うことになる。(それ以上はこの記事の範囲外)
さて、[Translation Kit Creation...]を選択すると次のようになる。

基本的には、この画面で「OmegaT Project」を選択して[Execute]を押せば、OmegaTのプロジェクトが出来上がる。もろもろのオプションについては、Rainbow TKit - OmegaT Project - OkapiWikiを参照のこと。また、ディレクトリ構成についてもこのページの「Package Layout」に書かれているので参考になるかと。

2. OmegaTでいつものように翻訳する

Rainbowで作ったOmegaTプロジェクトのあるディレクトリを開いて、普段と同じように翻訳を行って、翻訳済みXLIFFファイルを生成する。分節にタグ情報を含んでる場合、HTMLを直接OmegaTに喰わせたときのtmxがそのまま使えないのが難点かなと。でもあれか、tmxを機械的に置換すれば使えるかもしれない(要検証)。もしかしたら、Okapiにそういった機能があるのかもしれないけど、よくわかっていない。

3. RainbowでHTMLを吐き出させる

OmegaT上で翻訳作業を行ったファイルはXLIFFなので、HTMLに戻す作業が必要となるわけだが、実はここで少しハマった。具体的には、最初にHTMLを[Input1]に放り込んだままだと実はダメで、Rainbowを起動しなおして(新規の状態にして)、OmegaTのプロジェクトに作ったディレクトリにあるmanifest.rkmをRainbowに読ませたうえで、[Translation Kit Post-processing...]をしないといけない、というのがハマりどころ。うまくいけばdoneディレクトリにHTMLファイルが出力される。



とまあ、ものすごくざっくりとだけどOmegaT補助ツールとしてのRainbowをごく簡単な使い方を書いてみた。あとは自動でタグを付与(日本語用にline-heightを仕込んだり、スクリプトファイルをscript要素を食わせたり…)できれば言うことないんだけど、これはさすがに別にpowershellスクリプトなりのお仕事になるんですかね。

最後に、このエントリーを書くのに第8回 翻訳ユーティリティの定番「Okapi Rainbow」 | The Professional Translator (ザ・プロフェッショナル・トランスレーター) − バベル・プレスをちょっとだけ参考にした。そして、公式WikiであるMain Page - OkapiWikiが一番参考になると思う。当然のごとく英語だけど。