| LOCALE::PO4A::XML.3PM(1) | User Contributed Perl Documentation | LOCALE::PO4A::XML.3PM(1) |
Locale::Po4a::Xml - XML文書及びその派生をPOファイルと相互変換する
po4a (PO for anything) プロジェクトは、gettext ツールが想定していないドキュメントのような領域で翻訳をしやすくすること (またより興味深いのは、翻訳文の保守がしやすくなること) を目標にしています。
Locale::Po4a::Xml は、XML 文書をほかの [自然] 言語へ翻訳するのを助けるモジュールです。XML を元にした文書用モジュールを作成する土台としても使うことができます。
このモジュールは、一般的な XML 文書を直接扱うのに使用できます。ほとんどの XML を元にした文書では、タグの内容にテキストが書かれているため、タグの内容を抽出し属性は抽出しません。
振る舞いをカスタマイズできるような、(次節で説明する)オプションがあります。手元の文書形式と合わない場合は、形式を詳細に記述できるよう、迷わずこれから派生した独自のモジュールを書いてください。その方法は以下にある「派生モジュールの書き方」節を参照してください。
グローバルデバッグオプションにより、このモジュールが何か重要なものを読み飛ばしていないか確認するように、除外した文字列を表示するようになります。
以下は、このモジュール固有のオプションです:
https://developer.android.com/guide/topics/resources/string-resource.html も参照してください
このオプションを使用する場合は注意してください。通常、入力ファイルを修正するのをお勧めします。
tags オプションで指定したタグしか抽出しません。もしくは、指定したタグを除くすべてのタグを抽出します。
翻訳したり読み飛ばしたりするタグの空白区切りリストです。既定では、指定したタグは除外されますが、"tagsonly" オプションを使用すると、指定したタグのみを含めるようになります。タグは <aaa> の形でなければなりませんが、<bbb> タグの中に入っているときのみ <aaa> タグの内容を翻訳したい場合、つなげて書く (<bbb><aaa>) ことができます。
タグ階層の前に文字を付けてタグのオプションを指定できます。例えば、l<w>(改行)や l<W> (改行なし)を付けて、グローバル wrap オプションで指定した既定の振る舞いを上書きできます。
例:W<chapter><title>
これは、属性を翻訳してはならない場合に有効で、翻訳者のために文字列を単純化し、誤植を避けることができます。
タグは <aaa> の形でなければなりませんが、別のタグ (<bbb>) の中に入っているときにのみタグ (<aaa>) の内容を翻訳したい場合、つなげて書く (<bbb><aaa>) ことができます。
タグは、break、inline、placeholder、 customtag 設定文字列のうち1つだけのリスト中に含まれている必要があります。
タグは <aaa> の形でなければなりませんが、別のタグ (<bbb>) の中に入っているときにのみタグ (<aaa>) の内容を翻訳したい場合、つなげて書く (<bbb><aaa>) ことができます。
そのブロック内のプレースホルダの場所は、以下のような文字列の印が付きます:
<placeholder type=\"footnote\" id=\"0\"/>
タグは <aaa> の形でなければなりませんが、別のタグ (<bbb>) の中に入っているときにのみタグ (<aaa>) の内容を翻訳したい場合、つなげて書く (<bbb><aaa>) ことができます。
このモジュールの副クラス由来の既定の設定があるタグがあるけれども、これに別の設定をしたいようなときは、nodefault設定文字列の一部としてそのタグをリストにする必要があります。
タグは <aaa> の形でなければなりませんが、別のタグ (<bbb>) の中に入っているときにのみタグ (<aaa>) の内容を翻訳したい場合、つなげて書く (<bbb><aaa>) ことができます。
タグ階層の前に文字を付けてタグのオプションを指定できます。こうすると大域的なwrapやdefaulttranslateoptionオプションによって指定された既定の挙動を上書きできます。
内部的にはXML解析器はw、W、i、pの4オプションのみを考慮します。
* breakに挙げられたタグはwrapオプションによってwないしWに設定されます。
* inlineに挙げられたタグはiに設定されます。
* placeholderに挙げられたタグはpに設定されます。
* untranslatedに挙げられたタグはこれらのオプションが設定されません。
po4aを実行することによる実際の内部的な変数の挙動は--debugオプションで確かめられます。
例:W<chapter><title>
タグはtranslated オプションや untranslated オプションの設定文字列で書き並べるべきだということに注意してください。
タグは <aaa> の形でなければなりませんが、別のタグ (<bbb>) の中に入っているときにのみタグ (<aaa>) の内容を翻訳したい場合、つなげて書く (<bbb><aaa>) ことができます。
翻訳されていないタグにある翻訳できる文中のタグは、翻訳できる行折り返しタグとして扱われ、iの設定が除かれてwないしWがwrapオプションによって設定される点に注意してください。
これはtranslatedに定義されているような文字の集合でこの設定は翻訳できるタグについてのみ妥当です。
最も簡単なカスタマイズとして、パーサに変換させたいタグや属性を定義できます。これを初期化関数で行うべきです。まず、main 関数を呼び出し、コマンドラインオプションを取得し、カスタム定義をオプションハッシュに追加します。コマンドラインから新しいオプションを扱いたい場合は、main の初期化を呼び出す前に、以下のように定義してください:
$self->{options}{'new_option'}='';
$self->SUPER::initialize(%options);
$self->{options}{'_default_translated'}.=' <p> <head><title>';
$self->{options}{'attributes'}.=' <p>lang id';
$self->{options}{'_default_inline'}.=' <br>';
$self->treat_options;
派生モジュール内では、_default_inline, _default_break, _default_placeholder, _default_translated, _default_untranslated, _default_attributes の各オプションを使用するべきです。このオプションがあると、コマンドラインオプションを使って利用者がそのモジュールの既定の挙動を上書きすることができます。
このxmlモジュールや派生モジュールの既定の挙動が好みでなければ、コマンドラインオプションを与えて挙動を変更することができます。
その他の簡単なステップとしては、パーサから抽出した文字列を翻訳するために受け取る "found_string" 関数の上書きがあります。そこでは、翻訳する文字列を制御し、翻訳自体の前後での変換を行えます。
抽出したテキスト、それがどこにあったかの参照位置、そして、どの文字列を翻訳するか、どのように翻訳するか、どのようにコメントを生成するか、といったことを制御する追加情報を含むハッシュを受け取ります。
このオプションの内容は、(このハッシュのエントリで指定する) 文字列の種類に依存します:
これは、翻訳済みドキュメントでオリジナルを置き換えるテキストを、返さなければなりません。以下に、この関数の基本的な例を示します:
sub found_string {
my ($self,$text,$ref,$options)=@_;
$text = $self->translate($text,$ref,"type ".$options->{'type'},
'wrap'=>$self->{options}{'wrap'});
return $text;
}
別のシンプルな例は、(いくつかの文字列のフィルタでしかない) 新しい Dia モジュールにあります。
これはかなり複雑な部分ですが、全体のカスタマイズを行うことができます。それぞれタグタイプの振る舞いを定義したハッシュのリストを基にしています。このリストはソートされるべきであり、もっとも具体的なもの (beginning キーで始まり end キーの順) の後に一般的なタグが来るようにします。タグタイプを定義するには、以下のキーを持つハッシュを作成する必要があります:
タグ (括弧なし) の追加配列を引数に渡せます。要素パスは現在のパスの最後に追加されます。
ここではタグは<から始まり>で終わる構造を持ち複数行を含められます。
これは入力の文書データと参照を持つ配列"@{$self->{TT}{doc_in}}"に対して、"$self->shiftline()"及び"$self->unshiftline($$)"を介して動作します。
これは入力の文書データと参照を持つ配列"@{$self->{TT}{doc_in}}"に対して、"$self->shiftline()"及び"$self->unshiftline($$)"を介して動作します。
これは入力の文書データと参照を持つ配列"@{$self->{TT}{doc_in}}"に対して、"$self->shiftline()"及び"$self->unshiftline($$)"を介して動作します。
これは入力の文書データと参照を持つ配列"@{$self->{TT}{doc_in}}"に対して、"$self->shiftline()"及び"$self->unshiftline($$)"を介して動作します。
以下のオプションが有効です:
このモジュールはタグや属性を翻訳できます。
DOCTYPE (エンティティ)
エンティティの翻訳は最小限しかサポートしていません。翻訳は全体が対象となり、タグは考慮しません。複数行のエンティティはサポートしておらず、翻訳中ではエンティティは常に再度折り返されます。
継承モジュールでのタグタイプ変更 (tag_types 構造体を $self ハッシュ内に移動?)
Jordi Vilalta <jvprat@gmail.com> Nicolas François <nicolas.francois@centraliens.net>
倉澤 望 <nabetaro@debian.or.jp> Debian JP Documentation ML <debian-doc@debian.or.jp>
Copyright © 2004 Jordi Vilalta <jvprat@gmail.com> Copyright © 2008-2009 Nicolas François <nicolas.francois@centraliens.net>
本プログラムは自由ソフトウェアです。GPL v2.0以降の条項に基づき再頒布と変更を行えます(COPYINGファイルを参照)。
| 2024-08-06 | perl v5.38.2 |