Locale::Po4a::Sgml - PO ファイルと SGML
ドキュメントの変換
po4a (PO for anything)
プロジェクトは、gettext
ツールが想定していないドキュメントのような領域で翻訳をしやすくすること
(またより興味深いのは、翻訳文の保守がしやすくなること)
を目標にしています。
Locale::Po4a::Sgml は、SGML
フォーマットのドキュメントをほかの
[自然]
言語へ翻訳するのを助けるモジュールです。
このモジュールは SGML
ファイルのパースに
onsgmls(1)
を利用します。必ずインストールしてください。また、SGML
ファイルの DTD
を、システムに必ずインストールしてください。
- debug
- デバッグしたい場所を示す空白区切りのキーワードリストを表示します。取り得る値は、tag,
generic, entities, refs です。
- verbose
- どのように実行しているかのより詳細な情報を出力します。
- translate
- 内容が追加 msgid
の形になる追加タグ
(DTD
で規定されているもの以外)
の空白区切りリストです。
- section
-
translate
カテゴリ内のほかのタグを中に含む追加タグ
(DTD の範囲外)
の空白区切りリストです。
- indent
- インデントレベルを増やすタグの空白区切りリストです。
- verbatim
- そのタグのレイアウトは変更されません。段落は折り返されず、インデントのための空白は追加されず、見栄えのための空行追加もされません。
- empty
- 閉じる必要のないタグです。
- ignore
- 無視され、po4a
がただの文字列として扱うタグです。つまり、msgid
の一部として扱えます。例えば、<b>
はこのカテゴリの良い例です。<b>
が翻訳セクションに入ってしまうと、文全体が入った
msgid
が作られなくなってしまいます。これはまずいです。
- attributes
- 翻訳する必要のある属性の空白区切りリストです。属性を名前
(例: "lang")
で指定できますが、特定のタグの中にあるときだけこの属性を翻訳するように、タグ階層を前につけることもできます。例えば、<bbb><aaa>lang
は、<bbb>
タグの中にある <aaa>
タグの中にある場合に、lang
属性を翻訳するということを示しています。タグ名は、実際には正規表現ですから、<aaa|bbbb>lang
のように書いた場合は、<aaa>
タグか <bbb>
タグの中にある lang
属性のみを翻訳できます。
- qualify
- 翻訳が属性名で修飾しなければならない属性の空白区切りのリストです。この設定に与えた属性は、自動的に
'attributes'
リストにも追加されることに注意してください。
- force
- DTD
が分からない場合や
onsgmls
が入力ファイルでエラーを検出する場合のいずれでも処理します。
- include-all
- デフォルトでは、('&version;'
のような)
エンティティを一つだけ含む
msgid
は、翻訳者の便宜のためスキップします。このオプションを有効にすると、この最適化を行わなくなります。これは、"<title>Á</title>"
のような構造を含むドキュメントには便利です。とはいえ、そのようなことがそんなにあるかは疑わしいです……
- ignore-inclusion
- インラインにしたくないエンティティの空白区切りリストです。このオプションは注意して使用してください。onsgmls
(内部で使用)
がタグを追加し、無効な出力ドキュメントを表示する原因になる可能性があります。
結果は完璧です。言い換えると生成したドキュメントは完全に一致しています。しかし、まだ以下のような問題があります:
- •
- 既定ではonsgmls
のエラー出力を /dev/null
にリダイレクトしています。明らかにまずいのですが、どのように回避したらよいのかがわかりません。
問題は、onsgmls
から条件付き取り込み
(つまり "<! [ %foo [" and
"]]>" のようなもの)
を "保護"
しなければならないということです。そうしないと、onsgmls
が展開してしまい、最終ドキュメントで復元する方法がわかりません。これを防ぐために、私は
"{PO4A-beg-foo}" と "{PO4A-end}"
に書き直しました。
これの問題は、"{PO4A-end}"
などと私が追加するものが、(<p>
タグ内などと違って)
ドキュメント内で無効であることです。
もしonsgmlsの出力を見たかったら、以下をコマンドライン(ないしpo4aの設定行)に加えるだけです。
-o debug=onsgmls
- •
- DebianDoc DTD と DocBook DTD
でのみ動作します。新しい
DTD
のサポートを追加するのは非常に簡単でしょう。仕組みはすべての
DTD
で同じで、既存のタグのリストとその特徴を与えるだけです。
確かに、もっとドキュメントの記述が必要です。しかし、これはまだベータ版ですし、変わることが予想されるものの記述を行うのがイヤなのです。
- •
- 警告: DTD
のサポートは非常に実験的です。すべてのタグの定義を見つけるのに、リファレンスマニュアルを読んだわけではありません。ネットで見つかるドキュメントで動作するように、このモジュールにタグの定義を追加しました。あなたのドキュメントが私のよりも多くの種類のタグを使用している場合、動作しないでしょう。しかし前述の通り、修正は非常に簡単です。
DocBook のテストは SAG (System Administrator
Guide)
でのみ行いましたが、このドキュメントは非常に大きく、DocBook
の仕様のほとんどを使用していると考えています。
DebianDoc に対しては、DDP
にあるマニュアルでテストをしています。しかしまだ、すべてではありません。
- •
- ファイルの取り込みを行う場合、PO
ファイルにあるメッセージの参照文字列
(例: "#: en/titletoc.sgml:9460"
のような行)
は誤りが発生するでしょう。
これにより、生成したドキュメントでは、条件付き取り込み
(例; the "<! [ %foo [" and "]]>"
など)
やいくつかのエンティティ
(&version; のような)
がそのまま扱われてほしいので、onsgmls
から保護するため前処理を行うことになります。そこで、入力ファイルの一時コピーを作成し、onsgmls
に渡してパースする前に、それらすべてを変更します。
こうするためには、与えられたファイルの内容により、ファイルの取り込みを確認しながらエンティティを置換します
(サブファイルでも必要とあらば保護できるように)。ですが今のところ、後で参照
(例えばファイル名や行番号)
を修正するということは行いません。どのようにするのが正しいのか、私にはよくわかりません。
このモジュールは、以下の方による
sgmlspl (SGMLS パーサや ONSGMLS
パーサの SGML
ポストプロセッサ)
の適合版です:
Copyright © 1995 David Megginson <[email protected]>
po4a
への適合は以下のメンバーが行いました:
Denis Barbier <[email protected]>
Martin Quinson (mquinson#debian.org)
倉澤 望 <[email protected]>
Debian JP Documentation ML <[email protected]>
Copyright © 1995 David Megginson <[email protected]>.
Copyright © 2002-2005 SPI, Inc.
本プログラムはフリーソフトウェアです。GPL
の条項に基づき再頒布と変更を行うことができます
(COPYING
ファイルを参照してください)。