名前
- Provided by: po4a (Version: 0.52-1)
- Report a bug
po4a [options] config_file
po4a (PO for anything) プロジェクトは、gettext ツールが想定していないドキュメントのような領域で翻訳をしやすくすること (またより興味深いのは、翻訳文の保守がしやすくなること) を目標にしています。
po4a プログラムは、翻訳対象が複数だったり、フォーマットが異なったり、ドキュメントごとに異なるオプションを指定する必要がある場合に、po4a-gettextize(1), po4a-updatepo(1), po4a-translate(1) を複雑な Makefile で呼ばなくてすむようになります。
このドキュメントは以下のような構成となっています:
テンプレート言語の指定
翻訳者入力ファイルのパス指定
パスや言語の自動検出
翻訳するドキュメントの指定
モジュールオプションの指定
エイリアスの指定
分割モード
po4a プログラムは、(オリジナルドキュメントと同期を取る) PO ファイルと (PO ファイルと同期を取る) 翻訳済みドキュメントの双方の更新を担当しています。主な目的は、コマンドラインオプションを覚えておかなくても簡単に po4a を使用できるようにすることです。
また、異なるフォーマットが混在したドキュメントを同じ POT ファイルにでき、プロジェクトごとに一つのファイルで管理できます。
こういったことは、po4a スイートのほかのツールを (例えば Makefile とともに) 用いても同様にできますが、少々難しくなります。po4a を使用しているプロジェクトごとに、そのような複雑な Makefile を何度も作成するのは大変です。
以下にデータフローをまとめました。マスタードキュメントの変更を PO ファイルに反映し、PO ファイルの変更を (手での修正でも前述のステップでも) 翻訳済みドキュメントに反映します。
マスタードキュメント --> PO ファイル --> 翻訳
このツールでは、データフローを逆にはできません。また、翻訳ファイルに対して変更しても、PO ファイルの内容で上書きされます。つまり、実のところ、このツールでは既存の翻訳を po4a システムに変換できないのです。このような用途には、po4a-gettextize(1) を参照してください。
(必須の) 引数は、使用する設定ファイルのパスです。この文法は単純であることを目指しており、intl-tools プロジェクトで使う設定ファイルに似ています。
このファイルでは、'#' に続けてコメントを記述でき、行末までをすべてコメントにします。行末をエスケープして、行をつなげることもできます。空行でない行は [] コマンドで始め、引数が続かなければなりません (こういうと難しく聞こえますが、思ったより簡単だと思います ;) )。
注意: [po4a_langs] と [po4a_paths] よりも [po_directory] の使用をお勧めします。後述する パスや言語の自動検出 を参照してください。
これは設定ファイル全体を単純にし、より柔軟にするオプションコマンドです。ドキュメントを翻訳したい言語のリストを指定しなければなりません。これは、以下のように単純です:
[po4a_langs] fr de
設定ファイルの残りの部分で $lang を指定した言語に展開するようになります。
注意: [po4a_langs] と [po4a_paths] よりも [po_directory] の使用をお勧めします。後述する パスや言語の自動検出 を参照してください。
まず、翻訳者入力ファイル (翻訳者が自分の作業に使用するファイル) の位置を指定する必要があります。以下のような行で行います:
[po4a_paths] doc/l10n/project.doc.pot \
fr:doc/l10n/fr.po de:doc/l10n/de.po
コマンドは、したがって [po4a_paths] です。第一引数は、使用する POT ファイルのパスです。以降の引数はすべて自明の形式です:
<言語>:<この言語の PO ファイルへのパス>
テンプレート言語を定義していれば、前述の行は以下のようにも書き直せます:
[po4a_paths] doc/l10n/project.doc.pot $lang:doc/l10n/$lang.po
ドキュメントのファイル名を参照するのに $master も使用できます。この場合、po4a は分割モードとなり、po4a の設定ファイルで指定した各ドキュメントについて、POT ファイルと (言語ごとの) PO ファイルを一つずつ作成します。分割モード 節を参照してください。
[po4a_paths] doc/$master/$master.pot $lang:doc/$master/$lang.po
PO ファイルや POT ファイルの位置をディレクトリの名前で指定するために使用する別のコマンドがあります。これを使用すると、po4a は、指定したディレクトリにある *.pot ファイルのみを POT ファイルとして検出します。また po4a は、*.po ファイルのリストを言語のリストとして (拡張子を除いて) 定義します。この言語は、設定ファイルの残りの部分で $lang 変数を置換するのに使用されます。
このコマンドは、[po4a_langs] コマンドや [po4a_paths] コマンドと同時に使用するべきではありません。
このコマンドを使用する際、POT ファイルの名前を知らせるため、po4a の初回起動時に空の POT ファイルを作る必要があります。
[po_directory] po4a/po/
さて、当たり前ですが、翻訳対象のドキュメントやそのフォーマット、翻訳の置き場所を指定しなければなりません。以下の行のように指定できます:
[type: sgml] doc/my_stuff.sgml fr:doc/fr/mon_truc.sgml \
de:doc/de/mein_kram.sgml
[type: pod] script fr:doc/fr/script.1 de:doc/de/script.1 \
add_fr:doc/l10n/script.fr.add
これもまたかなり自己説明的だと思います。二番目のケースでは、doc/l10n/script.fr.add は、このドキュメントのフランス語版に追加する追加内容です。追加内容についての詳細情報は po4a(7) を参照してください。
もっと形式張って言うと、フォーマットは以下のようになります:
[type: <format>] <master_doc> (<lang>:<localized_doc>)* \
(add_<lang>:<modifier>*<addendum_path>)*
修飾子がない場合、addendum_path は追加内容へのパスになります。修飾子は以下になります。
テンプレート言語を定義していれば、前述の行は以下のようにも書き直せます:
[type: pod] script $lang:doc/$lang/script.1 \
add_fr:doc/l10n/script.fr.add
すべての言語が同様のパスで追加内容を持っていた場合、以下のようにも書くことができます:
[type: pod] script $lang:doc/$lang/script.1 \
add_$lang:doc/l10n/script.$lang.add
po4a はモジュールに渡すオプションを受け付けます。渡すオプションはモジュール固有で、-o スイッチにより指定されます。
翻訳したいドキュメントの一つに特定のオプションが必要な場合、設定ファイルで指定することもできます。オプションは opt キーワードで表します。opt キーワードの引数は、空白を含む場合 (複数のオプションを指定する場合や、引数を取るオプションの場合など)、ダブルクォートで囲まなければなりません。opt_lang キーワードを使用して、特定の言語だけにオプションを指定することもできます。
例を示します:
[type:man] data-05/test2_man.1
$lang:tmp/test2_man.$lang.1 \
opt:"-k 75" opt_it:"-L UTF-8" opt_fr:-v
シングルクォートまたはエスケープしたダブルクォートを使うと、引数に
空白を含めることができます:
[po4a_alias:man] man opt:"-o \"mdoc=NAME,SEE ALSO\" -k
20"
たくさんのドキュメントで同じオプションを指定したい場合は、エイリアスを利用できます (以下の エイリアスの指定 節を参照してください)。
設定ファイルの中で、すべてのドキュメントに対するオプションの指定も
できます:
[options] opt:"..." opt_fr:"..."
複数のファイルに同じオプションを指定しなければならない場合は、モジュールエイリアスを定義すると便利です。以下のようにしてください:
[po4a_alias:test] man opt:"-k 21" opt_es:"-o debug=splitargs"
この例では man モジュールを元にした test というモジュールエイリアスを定義し、全言語に -k 21 を適用し、スペイン語の翻訳には -o debug=splitargs を適用します。
定義したモジュールエイリアスは、通常のモジュールと同様に使用できます:
[type:test] data-05/test2_man.1 $lang:tmp/test2_man.$lang.1 \
opt_it:"-L UTF-8" opt_fr:-v
ファイルごとの追加オプションも指定できることに注意してください。
[po4a_paths] 行に $master を使うと分割モードになります。
分割モードを使用する際、一時的に大きな POT ファイルと大きな PO ファイルを使用します。これにより、すべての PO 間で翻訳を共有できます。
二つの PO で同じ文字列に対して異なる翻訳がされている場合、po4a はその文字列を fuzzy としてマークし、その文字列を持つすべての PO に両方の訳を出力します。その場合、翻訳者は訳を更新し、一つの PO から fuzzy タグを取り除くと、この文字列の訳はすべての PO で自動的に更新されます。
同一のファイル名が存在するため競合を起こす場合、次のように "master:file="name オプションを追加してマスターファイル名を指定できます:
[po4a_langs] de fr ja [po4a_paths] l10n/po/$master.pot $lang:l10n/po/$master.$lang.po [type: xml] foo/gui.xml $lang:foo/gui.$lang.xml master:file=foo-gui [type: xml] bar/gui.xml $lang:bar/gui.$lang.xml master:file=bar-gui
デフォルトの動作 (--force を指定しない場合) は以下のようになります:
また、マスタードキュメント、PO ファイル、追加内容のどれか、設定ファイルのいずれかが翻訳より新しい場合にのみ、翻訳を再生成します。しきい値に達しない翻訳を再生成しないように (--keep を参照)、.po4a-stamp 拡張子を持つファイルを作成します (--stamp を参照)。
マスタードキュメントがファイルをインクルードする場合、インクルードするファイルの更新時刻は考慮されないため、--force フラグを使用するべきです。
PO ファイルは、常に POT を元に msgmerge -U で再生成されます。
注意: これは .po4a-stamp ファイルの作成を行うだけです。スタンプファイルは存在すれば使用され、--rm-translations を指定した場合や、最終的にファイルの翻訳が完了した場合に削除されます。
引数にはコンマを続けた後に wrap または nowrap キーワードのどちらかを付けられます。デフォルトでは、リファレンスは 1 行で書き出されます。wrap オプションは、gettext ツール (xgettext や msgmerge) のようにリファレンスを複数行に折り返します。こちらのオプションの方がより気が利いているため、将来のリリースでデフォルトとなります。元の挙動のままにしておきたいユーザは、nowrap オプションを使用できます。
注意: $lang は現在の言語へ展開されます。
あなたは foo というプログラムを保守しており、そのプログラムには当然のように英語のみで書かれている man/foo.1 という man ページがあると仮定しましょう。今、上流ないし下流のメンテナとしてのあなたは、翻訳を作成し、保守したいと考えています。まず、po4a-gettextize(1) を使用して、翻訳者に送るために必要な POT ファイルを作成する必要があります。
この場合、以下のように実行します
cd man && po4a-gettextize -f man -m foo.1 -p foo.pot
次にこのファイルを、適切な言語のメーリングリストに送るか、ダウンロードできるようウェブサイトのどこかに用意することになります。
ここで、次のリリースまでの間に、de.po (追加内容 de.add を含む)、sv.po、pt.po の三つの翻訳を受け取ったとしましょう。新しい翻訳が届くたびに、Makefile を変更したくはありません。この場合、適切な設定ファイルを用意した po4a を Makefile 内で使用できます。これを po4a.cfg と呼びましょう。先ほどの例は、以下のようになります:
[po_directory] man/po4a/po/
[type: man] man/foo.1 $lang:man/translated/$lang/foo.1 \
add_$lang:?man/po4a/add_$lang/$lang.add opt:"-k 80"
この例では、生成した man ページ (とすべての PO ファイルと追加内容ファイル) は、カレントディレクトリ以下の man/translated/$lang/ (それぞれ man/po4a/po/ と man/po4a/add_$lang/) に格納するとします。この例では、man/po4a/po/ に de.po, pt.po, sv.po があり、man/po4a/add_de/ ディレクトリに de.add があります。
追加内容があるのはドイツ語翻訳 (de.po) だけであるために修飾子 ? を使っていることに注意してください。
実際に翻訳済み man ページをビルドするには、適切な Makefile のビルド ターゲットに次の行を (一度だけ!) 追加します:
po4a po4a.cfg
一度この設定をしておけば、新しい翻訳が届いても Makefile に触れる必要はありません。言い換えると、フランス語チームが fr.po と fr.add を送って来た時に、それぞれ man/po4a/po/ と man/po4a/add_fr/ へ単に置くだけだということです。次回のプログラムビルド時に、フランス語の翻訳が man/translated/fr/ に自動的にビルドされます。
英語のマニュアルページと翻訳されたマニュアルページを同時にインストールするために、適切なターゲットが必要なことに注意してください。
最後に、生成したファイルをバージョン管理システムに格納したくなければ、
clean
ターゲットに以下のような行が必要になるでしょう:
-rm -rf man/translated
パッチを歓迎します ;)
po4a-build(1), po4a-gettextize(1), po4a-normalize(1), po4a-translate(1), po4a-updatepo(1), po4a-build.conf(5), po4a(7)
Denis Barbier <barbier@linuxfr.org> Nicolas François <nicolas.francois@centraliens.net> Martin Quinson (mquinson#debian.org)
倉澤 望 <nabetaro@debian.or.jp> Debian JP Documentation ML <debian-doc@debian.or.jp>
Copyright 2002-2012 by SPI, inc.
本プログラムはフリーソフトウェアです。GPL の条項に基づき再頒布と変更を行うことができます (COPYING ファイルを参照してください)。