table of contents
Locale::Po4a::Sgml(3pm) | Po4a Tools | Locale::Po4a::Sgml(3pm) |
名前¶
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 <dmeggins@aix1.uottawa.ca>
po4a への適合は以下のメンバーが行いました:
Denis Barbier <barbier@linuxfr.org> Martin Quinson (mquinson#debian.org)
訳者¶
倉澤 望 <nabetaro@debian.or.jp> Debian JP Documentation ML <debian-doc@debian.or.jp>
著作権とライセンス¶
Copyright © 1995 David Megginson <dmeggins@aix1.uottawa.ca>. Copyright © 2002-2005 SPI, Inc.
本プログラムはフリーソフトウェアです。GPL の条項に基づき再頒布と変更を行うことができます (COPYING ファイルを参照してください)。
2023-01-03 | Po4a Tools |