<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "../../../docbook-xml-4.5/docbookx.dtd">
<chapter id="chapter.file.filters">
  <title>ファイルフィルター</title>

  <para>OmegaT には高度にカスタマイズ可能なフィルター機能があり、さらにその多くの挙動設定を変更できます。ファイルフィルターは以下のような機能を持ったコードの集まりです：</para>

  <itemizedlist>
    <listitem>
      <para>ある特定のファイル形式の文書を読み込みます。たとえばプレーンテキストファイルです。</para>
    </listitem>
  </itemizedlist>

  <itemizedlist>
    <listitem>
      <para>そのファイルから翻訳可能な部分を抽出します。</para>
    </listitem>
  </itemizedlist>

  <itemizedlist>
    <listitem>
      <para>訳文ファイルの生成時に、原文分節を訳文に置き換えたり、規則に基づきファイル名を修正するなどの自動処理を行います。</para>
    </listitem>
  </itemizedlist>

  <para>OmegaT が対応しているファイル形式は、メニューの<guimenuitem>［設定］→［ファイルフィルター］</guimenuitem>から一覧できます。</para>

  <para>ほとんどの場合は、デフォルトのファイルフィルター設定のままで問題ないでしょう。もしそうでなければ、メインメニューから<emphasis role="bold">［設定］→［ファイルフィルター］</emphasis>を選択してダイアログを開いてください。プロジェクト設定から<emphasis role="bold">［ファイルフィルター...］</emphasis>を選ぶことで、現在のプロジェクト専用のファイルフィルターを設定することもできます。この設定は、他のプロジェクトに影響を与えません。</para>

  <para>プロジェクト専用ファイルフィルターを設定するには、まずメニューから<emphasis role="bold">［プロジェクト］→［プロジェクト設定...］を選びます。</emphasis>次に<guibutton>［ファイルフィルター...］</guibutton>ボタンをクリックして、<guimenuitem>［ファイルフィルター設定をプロジェクト専用にする］</guimenuitem>チェックボックスにチェックを入れます<indexterm class="singular">
      <primary>ファイルフィルター</primary> <secondary>プロジェクト専用ファイルフィルター</secondary>
    </indexterm>。こうすると、フィルター設定のコピーがプロジェクト自体とセットで保持されるようになります。この状態でフィルターの設定を変更すると、プロジェクト専用フィルターだけが更新されます。ユーザーレベルのフィルターには影響しません。</para>

  <para><emphasis role="bold">警告：</emphasis>プロジェクトを開いているときにフィルター設定を変更すると、変更を適用するためにプロジェクトの再読み込みが必要になります。</para>

  <section id="file.filters.dialog">
    <title>ファイルフィルター ダイアログ<indexterm class="singular">
        <primary>ファイルフィルター</primary> <secondary>ダイアログ</secondary>
      </indexterm></title>

    <para>使用可能なファイルフィルターを一覧表示します。OmegaT の中で翻訳したくないファイル形式がある場合は、ファイル形式名の横にあるチェックボックスのチェックを外すと、その形式に対してフィルター機能を使わないようにすることができます。フィルターを無効にしているファイル形式のファイルは、プロジェクトの読み込み時に無視され、訳文生成時には未変更の状態で訳文フォルダーにコピーされます。再びフィルターを使用したくなったら、対象のチェックボックスにチェックを入れてください。<emphasis role="bold">［初期値を復元］</emphasis> をクリックすると、それまでのフィルター設定をリセットし初期設定に戻します。フィルター対象とするファイルやエンコーディングを変更する場合は<emphasis role="bold">［編集...］</emphasis>をクリックします。</para>

    <para>ダイアログ上で、次の設定の有効/無効を切り替えることができます：</para>

    <itemizedlist>
      <listitem>
        <para>先頭と末尾のタグを削除：先頭と末尾のタグを含むすべてのタグを表示したい場合は、この設定のチェックを外してください。警告：Microsoft Open XML 形式のファイル（docx や xlsx など）について、すべてのタグを表示した場合は、決して先頭のタグの前にテキストを入力しないでください（そのタグは技術的な理由で、常に分節の先頭に置かなければなりません）。</para>
      </listitem>

      <listitem>
        <para>分節化しないプロジェクトから、先頭と末尾の空白文字を削除：OmegaT は既定で、先頭と末尾の空白文字を削除します。分節化しないプロジェクトの場合、このオプションのチェックを外すことによって、それらの空白文字を保持することができます。</para>
      </listitem>

      <listitem>
        <para>すべてのタグの空白を維持：原文ファイルにとって空白文字が（レイアウトの都合上）重要な意味を持ち、それを無視すべきでない場合は、このオプションのチェックを入れてください。</para>
      </listitem>

      <listitem>
        <para>複数訳文の識別時にファイルのフルパス情報を無視する：OmegaT は既定で、原文ファイル名を複数訳文の識別基準のひとつに利用します。このオプションにチェックを入れると、ファイル名は識別に利用されません。複数訳文の識別には、ファイル名以外の文脈情報（前後の分節や、ファイル形式によってはある種の ID）だけが使用されます。</para>
      </listitem>
    </itemizedlist>
  </section>

  <section id="filters.options">
    <title>フィルター設定<indexterm class="singular">
        <primary>ファイルフィルター</primary> <secondary>設定</secondary>
      </indexterm></title>

    <para>以下のフィルター（テキストファイル、PO ファイル、XHTML ファイル、HTML ファイル・XHTML ファイル、OpenDocument ファイル、Microsoft Open XML ファイル）では、いくつかの専用オプションを設定できます。設定を変更する場合は、フィルターを選択して<emphasis role="bold">［設定...］</emphasis> を押してください。可能な設定は以下の通りです：</para>

    <para><emphasis role="bold">テキストファイル</emphasis></para>

    <itemizedlist>
      <listitem>
        <para><emphasis>原文を改行で分節化するか、空行で分節化するか、分節化しないか：</emphasis></para>

        <para>文単位の分節化が有効になっている場合は、ここで選択した設定によってさらに分節化されます。</para>
      </listitem>
    </itemizedlist>

    <para><emphasis role="bold">PO ファイル</emphasis></para>

    <itemizedlist>
      <listitem>
        <para><emphasis>訳文ファイルの空分節を許可</emphasis>：</para>

        <para>この設定を有効にすると、未翻訳の PO 分節（たいていは段落全体）を空のままにして訳文ファイルを生成します。もう少し技術的に立ち入った話をすると、PO 訳文ファイルの <code>msgstr</code> 分節が空のままになる、ということです。PO ファイルの場合はこれが一般的な状態ですので、この設定はデフォルトで有効になっています。この設定を無効にすると、原文が訳文分節にコピーされます。</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <listitem>
        <para><emphasis>PO ヘッダーを無視</emphasis></para>

        <para>この設定にチェックを入れると、PO ヘッダーを翻訳対象外とみなして、原文のままにします。</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <listitem>
        <para><emphasis>ヘッダーの「nplurals=整数; plural=式;」を自動で置換</emphasis></para>

        <para><emphasis>この設定にチェックを入れると、PO ファイルのヘッダーにある複数形指定を、訳文言語に合わせて自動変更します。</emphasis></para>
      </listitem>
    </itemizedlist>

    <para><emphasis role="bold">XHTML ファイル</emphasis></para>

    <itemizedlist>
      <listitem>
        <para><emphasis>以下の属性を翻訳：</emphasis>選択した属性を編集ウィンドウで分節として表示できます。</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <listitem>
        <para><emphasis>以下のタグで分節化：</emphasis> HTML の &lt;br&gt; タグがある場所を段落とみなして分節化することができます。</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <listitem>
        <para><emphasis>以下の正規表現に一致する文字列を翻訳しない：</emphasis>指定した正規表現に一致するテキストは、翻訳対象とせずスキップすることができます。スキップした箇所は、タグ検証では赤く表示されます。参考訳文ウィンドウでは、スキップした箇所が原文分節にあると、そのテキストは斜体で表示されます。</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <listitem>
        <para><emphasis>&lt;meta&gt; タグ内の以下の属性と値は翻訳しない（カンマ区切りで複数指定）：</emphasis>ここで指定した &lt;meta&gt; タグは、翻訳されません。</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <listitem>
        <para><emphasis>以下の属性と値を持つタグの内容は翻訳しない（カンマ区切りで複数指定）</emphasis>：ここでキー＝値の形式で指定したタグは、翻訳されません。</para>

        <para>この設定は、ある属性の値に応じてタグを翻訳しないようにするのに、役に立つことがあります。たとえば、<literal>&lt;div class=&quot;hide&quot;&gt; &lt;span translate=&quot;no&quot;&gt;</literal> のようなタグは、キー＝値の形式で指定して翻訳対象外に設定できます。この例の場合、設定欄は次のようになります：<literal>class=hide, translate=no</literal></para>
      </listitem>
    </itemizedlist>

    <para><emphasis role="bold">Microsoft Office Open XML ファイル</emphasis></para>

    <para>どの要素を翻訳するか、選ぶことができます。選んだ要素は、翻訳時に個別の分節として表示されます。</para>

    <itemizedlist>
      <listitem>
        <para><emphasis role="bold">Word：</emphasis>非表示の命令とテキスト、コメント、脚注、文末脚注、ヘッダー、フッター</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <listitem>
        <para><emphasis role="bold">Excel：</emphasis>コメント、シート名</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <listitem>
        <para><emphasis role="bold">Power Point：</emphasis>スライドのコメント、スライド マスター、スライド レイアウト</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <listitem>
        <para><emphasis role="bold">共通：</emphasis>表、ダイアグラム、図、ワードアート</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <listitem>
        <para><emphasis role="bold">その他の設定：</emphasis></para>

        <itemizedlist>
          <listitem>
            <para><emphasis>タグを結合</emphasis>：チェックが入っていれば、翻訳対象テキストを含まない連続するタグを１つのタグに結合します。</para>
          </listitem>

          <listitem>
            <para><emphasis>すべてのタグの空白を維持</emphasis>：チェックが入っていれば、空白文字（半角スペースや改行など）を保持します。たとえそれが技術的には意味が無い場合でも、残します。</para>
          </listitem>
        </itemizedlist>
      </listitem>
    </itemizedlist>

    <para><emphasis role="bold">HTML ファイル・XHTML ファイル</emphasis></para>

    <itemizedlist>
      <listitem>
        <para><emphasis>以下の場合に HTML・XHTML ファイルにエンコーディング宣言を追加または変更</emphasis>：訳文ファイルのエンコーディング文字セットを、原文ファイルのそれ（明示的に指定されたものであれ、暗黙に適用されたものであれ）とは違うものにしたいということは、よくあります。この設定を使うと、訳文ファイルにエンコーディング宣言を含めるかどうかを指定できます。たとえば、ファイルフィルターで訳文ファイルのエンコーディングが UTF-8 に指定されている場合、この設定によって、訳文ファイルに必ずその情報を含めるようにすることができます。</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <listitem>
        <para><emphasis>以下の属性を翻訳：</emphasis>選択した属性を編集ウィンドウで分節として表示できます。</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <listitem>
        <para><emphasis>以下のタグで分節化：</emphasis> HTML の &lt;br&gt; タグがある場所を段落とみなして分節化することができます。</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <listitem>
        <para><emphasis>以下の正規表現に一致する文字列を翻訳しない：</emphasis>指定した正規表現に一致するテキストは、翻訳対象とせずスキップすることができます。スキップした箇所は、タグ検証では赤く表示されます。参考訳文ウィンドウでは、スキップした箇所が原文分節にあると、そのテキストは斜体で表示されます。</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <listitem>
        <para><emphasis>&lt;meta&gt; タグ内の以下の属性と値は翻訳しない（カンマ区切りで複数指定）：</emphasis>ここで指定した &lt;meta&gt; タグは、翻訳されません。</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <listitem>
        <para><emphasis>以下の属性と値を持つタグの内容は翻訳しない（カンマ区切りで複数指定）</emphasis>：ここでキー＝値の形式で指定したタグは、翻訳されません。</para>

        <para>この設定は、ある属性の値に応じてタグを翻訳しないようにするのに、役に立つことがあります。たとえば、<literal>&lt;div class=&quot;hide&quot;&gt; &lt;span translate=&quot;no&quot;&gt;</literal> のようなタグは、キー＝値の形式で指定して翻訳対象外に設定できます。この例の場合、設定欄は次のようになります：<literal>class=hide, translate=no</literal></para>
      </listitem>

      <listitem>
        <para><emphasis>訳文ファイルの空白圧縮</emphasis>：連続する空白文字がある場合、訳文ファイル生成時に空白文字一つだけに変換します。</para>
      </listitem>

      <listitem>
        <para><emphasis>訳文ファイルの HTML コメントを削除</emphasis>：すべてのコメント部（&lt;!-- から --&gt; までのあいだ）を訳文ファイルに出力しません。</para>
      </listitem>
    </itemizedlist>

    <para><emphasis role="bold">OpenDocument Format (ODF) ファイル</emphasis></para>

    <itemizedlist>
      <listitem>
        <para>どの要素を翻訳するか、選ぶことができます：</para>

        <para>Index 項目、ブックマーク、ブックマーク参照、脚注、コメント、プレゼンテーションのノート、リンク（URL）、シート名</para>
      </listitem>
    </itemizedlist>
  </section>

  <section id="edit.filter.dialog">
    <title>フィルターの編集ダイアログ<indexterm class="singular">
        <primary>ファイルフィルター</primary> <secondary>編集</secondary>
      </indexterm></title>

    <para>このダイアログでは、フィルターで処理する原文ファイル名の構成例の指定、訳文ファイル名のカスタマイズ、読み込む原文ファイルと生成する訳文ファイルのエンコーディングを設定できます。ファイルフィルター構成例を編集するには、それぞれの欄をダブルクリックして直接修正するか、<emphasis role="bold">編集</emphasis>ボタンをクリックします。新しいファイルフィルター構成例を追加するには<emphasis role="bold">追加</emphasis>ボタンをクリックします。構成例の追加と編集には、同じダイアログを使用します。このダイアログは、訳文ファイル名の構成例編集に特化したエディターを持っているため、出力するファイル名のカスタマイズに便利です。</para>

    <section id="source.filetype.and.filename.pattern">
      <title><indexterm class="singular">
          <primary>原文ファイル</primary> <secondary>ファイル形式とファイル名構成例</secondary>
        </indexterm>原文ファイル形式、ファイル名構成例<indexterm class="singular">
          <primary>ファイルフィルター</primary> <secondary>ファイル形式とファイル名構成例</secondary>
        </indexterm></title>

      <para>OmegaT は原文フォルダーにファイルを見つけると、まず拡張子から判別してファイルフィルターを選択しようとします。もっと具体的に言うと、各フィルターの原文ファイル名構成例から、ファイル名と一致するものを探索します。たとえば、構成例 <literal>*.xhtml</literal> は、拡張子が <literal>.xhtml</literal> のあらゆるファイルに一致します。適切なフィルターが見つかった時点で探索は終了し、そのフィルターが該当するファイルの処理に割り当てられます。たとえばデフォルトでは、XHTML フィルターは拡張子 .xhtml のファイルを処理するのに使用されます。そのフィルターに扱わせたいファイルに応じて、ファイル名構成例を変更したり追加したりできます。原文ファイル名構成例には、<emphasis role="bold">検索</emphasis>機能と同様にワイルドカード文字を使用できます。ワイルドカード「*」は０個以上の任意の文字と一致します。ワイルドカード「?」は任意の１文字と一致します。他のすべての文字は、それらの文字自身をあらわします。たとえばテキストフィルターを readme ファイル（<literal>readme</literal>、<literal>read.me</literal> や <literal>readme.txt</literal>）にも対応させたい場合は、ファイル名構成例に <literal>read*</literal> を指定してください。（日本語訳注：実際にはワイルドカード文字と衝突しない範囲で、正規表現も使用できます。たとえばファイル名の末尾に数字のついた、拡張子 .foo のファイルを扱いたい場合は、<literal>*\d.foo</literal> のような指定が可能です。正規表現の詳細は、http://docs.oracle.com/javase/jp/6/api/java/util/regex/Pattern.html を参照してください）</para>
    </section>

    <section id="source.and.target.files.encoding">
      <title>原文ファイルと訳文ファイルのエンコーディング</title>

      <indexterm class="singular">
        <primary>原文ファイル</primary> <secondary>エンコーディング</secondary>
      </indexterm>

      <indexterm class="singular">
        <primary>訳文ファイル</primary> <secondary>エンコーディング</secondary>
      </indexterm>

      <indexterm class="singular">
        <primary>ファイルフィルター</primary> <secondary>原文ファイル、訳文ファイル - エンコーディング</secondary>
      </indexterm>

      <para>エンコーディングの指定が必須のファイル形式は限られています。エンコーディングを特に指定しなかった場合（&lt;自動&gt; の場合）は、拡張子に応じたエンコーディングが使用されます。たとえばデフォルトでは、<literal>.txt</literal> ファイルには OS のデフォルト エンコーディングが使用されます。原文ファイルのエンコーディングを、ファイル名構成例ごとに変更することもできます。まったく同様に、訳文ファイルを出力する際のエンコーディングも、任意に変更できます。デフォルトでは、訳文ファイルのエンコーディングは、原文ファイルと同じになります。原文ファイルと訳文ファイルのエンコーディングを指定する項目では、対応したすべてのエンコーディングをコンボボックスから選択できます。&lt;自動&gt; は、<application>OmegaT</application> に自動的に判断させます。自動の場合のエンコーディングは、次の仕組みで判定します：</para>

      <itemizedlist>
        <listitem>
          <para>原文ファイルにエンコーディング宣言があれば、それに従います（HTML ファイル、XML ベースのファイルの場合）</para>
        </listitem>
      </itemizedlist>

      <itemizedlist>
        <listitem>
          <para>いくつかのファイル形式（Java properties など）に対しては、その形式に必須のエンコーディングを設定します</para>
        </listitem>
      </itemizedlist>

      <itemizedlist>
        <listitem>
          <para>テキストファイルには、OS デフォルトのエンコーディング（たとえば日本語版の Windows OS では、シフト JIS 固定）を使用します</para>
        </listitem>
      </itemizedlist>
    </section>

    <section id="target.name">
      <title>訳文ファイル名<indexterm class="singular">
          <primary>訳文ファイル</primary> <secondary>ファイル名</secondary>
        </indexterm></title>

      <para>翻訳するファイル名を自動的に変更したい時があると思います。たとえば、ファイル名のあとに言語コードを追加したい場合などです。訳文ファイル名構成例は特別な文法で記述されています。これを編集したい場合は、［<emphasis role="bold">編集...</emphasis>］をクリックして<indexterm class="singular">
          <primary>ファイルフィルター</primary> <secondary>ダイアログ</secondary>
        </indexterm>構成例編集ダイアログを使用してください。編集内容をそのフィルターの初期値に戻したい時は、［<emphasis role="bold">初期値を復元</emphasis>］をクリックしてください。またファイルフィルターダイアログの中で、訳文ファイル名構成例を直接編集することもできます。構成例編集ダイアログでは、以下のような変数を使用できます：</para>

      <itemizedlist>
        <listitem>
          <para>デフォルトは <literal>${filename}</literal> です。-- 拡張子を伴った完全な原文ファイル名で、これを指定すると、訳文ファイル名は原文ファイル名と同じになります。</para>
        </listitem>
      </itemizedlist>

      <itemizedlist>
        <listitem>
          <para><literal>${nameOnly}</literal> -- 拡張子なしの原文ファイル名です。</para>
        </listitem>

        <listitem>
          <para><literal>${extension}</literal> -- 原文ファイルの拡張子のみです。</para>
        </listitem>
      </itemizedlist>

      <itemizedlist>
        <listitem>
          <para><literal>${targetLocale}</literal> -- 訳文のロケールコード（「xx_YY」形式）です。</para>
        </listitem>
      </itemizedlist>

      <itemizedlist>
        <listitem>
          <para><literal>${targetLanguage}</literal> -- 訳文の言語コードと国コードを合わせたもの（「XX-YY」形式）です。</para>
        </listitem>
      </itemizedlist>

      <itemizedlist>
        <listitem>
          <para><literal>${targetLanguageCode}</literal> -- 訳文の言語コードのみ（「XX」）です。</para>
        </listitem>
      </itemizedlist>

      <itemizedlist>
        <listitem>
          <para><literal>${targetCountryCode}</literal> -- 訳文の国コードのみ（「YY」）です。</para>
        </listitem>

        <listitem>
          <para><literal>${timestamp-????}</literal> -- 各種の書式による訳文ファイル生成時のシステム日時です。</para>

          <para>『SimpleDateFormat』の書式については、<ulink url="http://docs.oracle.com/javase/jp/6/api/java/text/SimpleDateFormat.html">Oracle 技術文書</ulink>を参照してください。</para>
        </listitem>

        <listitem>
          <para><literal>${system-os-name}</literal> -- コンピューターの OS 名です。</para>
        </listitem>

        <listitem>
          <para><literal>${system-user-name}</literal> -- システムのユーザー名です。</para>
        </listitem>

        <listitem>
          <para><literal>${system-host-name}</literal> -- システムのホスト名です。</para>
        </listitem>

        <listitem>
          <para><literal>${file-source-encoding}</literal> -- 原文ファイルのエンコーディング名です。</para>
        </listitem>

        <listitem>
          <para><literal>${file-target-encoding}</literal> -- 訳文ファイルのエンコーディング名です。</para>
        </listitem>

        <listitem>
          <para><literal>${targetLocaleLCID}</literal> -- 訳文ファイルの Microsoft ロケール（「xx-yy」形式）です。</para>
        </listitem>
      </itemizedlist>

      <para>${nameOnly} と ${extension} に関しては、追加の変数を使用できます。ファイル名があいまいな場合、使用する構成要素を <literal>${nameOnly</literal><emphasis>-拡張子の個数</emphasis>} と <literal>${extension</literal>-<emphasis>名前の個数}</emphasis> の形式で指定することができます。たとえば原文ファイル名が「Document.xx.docx」だったとしましょう。その場合、各種の変数とその結果は次のようになります：</para>

      <itemizedlist>
        <listitem>
          <para><literal>${nameOnly-0}</literal> Document</para>
        </listitem>

        <listitem>
          <para><literal>${nameOnly-1}</literal> Document.xx</para>
        </listitem>

        <listitem>
          <para><literal>${nameOnly-2}</literal> Document.xx.docx</para>
        </listitem>

        <listitem>
          <para><literal>${extension-0}</literal> docx</para>
        </listitem>

        <listitem>
          <para><literal>${extension-1}</literal> xx.docx</para>
        </listitem>

        <listitem>
          <para><literal>${extension-2}</literal> Document.xx.docx</para>
        </listitem>
      </itemizedlist>
    </section>
  </section>
</chapter>