付録F スクリプト プラグイン

1. はじめに
2. インストールと使い方

1. はじめに

スクリプト プラグインを使うと、さまざまなスクリプト言語で書かれたスクリプトを OmegaT で実行することができます。

2. インストールと使い方

OmegaT 用のスクリプト プラグインは、OmegaT プラグインのダウンロードサイトから入手できます。Zip 圧縮ファイルを解凍して、展開されたすべてのファイルを「plugins」フォルダーに移動してください。「plugins」フォルダーは通常、OmegaT のインストール先フォルダー(OmegaT.jar ファイルを含む)の配下にあります。もし「plugins」フォルダーが見当たらなければ、先にフォルダーを作成してください。

インストールが完了すると、[ツール]メニューに新たに[スクリプト...]サブメニューが追加されます。また[スクリプト...]サブメニューの下には、スクリプト用の五つのプレースホルダーも追加されます。[スクリプト...] をクリックすると、スクリプト ダイアログが開きます:

スクリプト ダイアログ上では、既存のスクリプトをテキスト欄に読み込んだり、それをいま開いているプロジェクトに対して実行したりできます。スクリプトをカスタマイズする手順は、次の通りです:

  • 左側のスクリプト一覧から目的のスクリプト名をクリックして、編集ウィンドウに読み込みます。

  • 下部にある「1」から「5」のどれかのボタンの上で右クリックし、[スクリプトを設定]を選びます。上の画像では、2つのスクリプトがすでに(ボタン「<1>」と「<2>」に)設定済みです。

  • 数値ボタンを左クリックすると、そこに設定されているスクリプトを実行できます。また[ツール]メニューからスクリプトを選んだり、割り当てられたショートカットキー Ctrl+Alt+F#(# は 1 から 5)を使うことでも、同じようにスクリプトを実行できます。

以下のスクリプト言語は、最初から使える状態になっています:

  • NetRexx(http://www.netrexx.org/): 旧来の REXX 構文を利用できます。予約キーワードはありません。Java のオブジェクト モデルと互換性のある形でオブジェクト指向プログラミングをサポートするため、多くの拡張が施されています。環境に存在するすべての Java クラスライブラリを、特別な設定をすることなくそのまま利用できます。あるいは Java プログラマーであれば、Java のソースプログラムからランタイム パッケージ経由で単純に Rexx クラスを呼び出し、強力な文字列処理を行うこともできます。

  • XSLT(Extensible Stylesheet Language Transformations):XML 文書を変換するために用いられる、宣言的な XML ベースの言語です。原文書には一切変更を加えません。既存の文書を元に、新しい文書を作成します。プロセッサーは、文書を標準的な XML 形式や、HTML、プレーンテキストなどの形式に変換(出力)できます。XSLT は、異なる XML スキーマ間での変換や、XML データをウェブページや PDF 文書などに変換する用途で、最もよく使われています。

  • Groovy(http://groovy.codehaus.org):Java 仮想マシン向けの動的言語です。構文的に Java との互換性を最大限に保った上で、さらに Python や Ruby、Smalltalk に触発された強力な拡張機能を持ちます。

  • JavaScript(JS と略すこともあり、Java とは無関係):プロトタイプ ベースのスクリプト言語です。動的で、弱い型付け、ファーストクラス関数などの特徴を持ちます。オブジェクト指向、命令型、および関数型プログラミングのスタイルをサポートする、マルチパラダイム言語です。Firefox のような人気のあるプログラムで利用されていることから、とりわけオープンソースの分野で普及し好まれています。

すべての言語から、プロジェクトを先頭のオブジェクトとする OmegaT のオブジェクトモデルにアクセスできます。次に示すコードスニペットは、現在のプロジェクトから全ファイルの全分節を走査する groovy スクリプトの例です。このスクリプトは、もし訳文が存在していれば、その分節の原文と訳文を出力します:

    files = project.projectFiles;
    for (i in 0 ..< files.size())
    {
        for (j in 0 ..< files[i].entries.size())
        {
            currsegment = files[i].entries[j];
            if (project.getTranslationInfo(currSegment))
            {
                source = currsegment.getSrcText();
                target = project.getTranslationInfo(currsegment).translation;
                console.println(source + " >>>> " + target);
            }     
        }
    }