名前

po4a-gettextize - オリジナルファイル (とその翻訳) を PO ファイルに変換

書式

po4a-gettextize -f fmt -m master.doc -l XX.doc -p XX.po
( XX.po は出力ファイル。その他すべては入力ファイル)

説明

po4a (PO for anything) は従来のgettextツールを使った文書翻訳の保守作業を容易にします。po4aの主な特徴は内容の翻訳を文書構造から切り離すところにあります。このプロジェクトのやさしい導入についてはページ po4a(7)を参照してください。
po4a-gettextizeスクリプトは、既存の翻訳をpo4aベースの作業工程で使えるものに変換するのに役立ちます。この作業はプロジェクトでの変換作業後に定期的に行うものではなく、po4aへの変換中に既存の翻訳を拾い上げる際に一度だけ行う必要があります。この手間の掛かる作業については、以下の節「手動翻訳をpo4aに変換する」で詳しく説明します。
マスターファイル(例:英語のソース)と既存の翻訳ファイル(例:po4a を使わずに以前に翻訳を試みたもの)の両方を与える必要があります。複数のマスターファイルや翻訳ファイルを与えた場合、それらは順番に使用されます。しかし各ページや章を別々に gettextize したのち、 msgmerge を使用して生成されたすべての PO ファイルを統一する方が簡単かもしれません。お好きなように。
マスター文書に非 ASCII 文字が含まれる場合、生成した PO ファイルは UTF-8 となります。もしマスター文書が完全に ASCII の場合、生成した PO ファイルは入力された翻訳文書のエンコーディングを使います。

オプション

-f, --format
扱うドキュメントのフォーマットです。有効なフォーマットの一覧を見るには、--help-format オプションを使用してください。
-m, --master
翻訳するマスタードキュメントのファイルです。複数のドキュメントを gettext 化する場合は、このオプションを複数回使用してください。
-M, --master-charset
翻訳するドキュメントファイルの文字セットです。
-l, --localized
地域化 (翻訳済み) ドキュメントのファイル。マスターに複数のファイルを指定する場合、このオプションを複数回使って、複数の地域化ファイルを指定してください。
-L, --localized-charset
地域化ドキュメントファイルの文字セットです。
-p, --po
メッセージカタログが書き出されるファイルです。与えられない場合、メッセージカタログを標準出力に書き出します。
-o, --option
書式プラグインに渡す追加オプションです。有効なオプションやその意味の詳細は、各プラグインの説明書を参照してください。例えば、AsciiDocパーサーには '-o tablecells' を、テキストパーサーには '-o tabs=split' を渡すことができます。
-h, --help
短いヘルプメッセージを表示します。
--help-format
po4a が理解できるドキュメントフォーマットの一覧を表示します。
-k --keep-temps
統合する前にビルドした一時的なマスターファイルとローカライズされた POT ファイルは控えておいてください。なぜこれらのファイルが同期されず、gettextizationの問題につながったのかを理解するのに役立つためです
-V, --version
スクリプトのバージョンを表示して終了します。
-v, --verbose
プログラムの冗長度を上げます。
-d, --debug
デバッグ情報を出力します。
--msgid-bugs-address email@address
msgid のバグレポートを送るアドレスをセットします。デフォルトでは、生成した POT ファイルに Report-Msgid-Bugs-To フィールドはありません。
--copyright-holder string
POT ヘッダの著作権者 (copyright holder) を設定します。既定値は "Free Software Foundation, Inc." です。
--package-name string
POT ヘッダのパッケージ名をセットします。デフォルト値は "PACKAGE" です。
--package-version string
POT ヘッダのパッケージバージョンをセットします。デフォルト値は "VERSION" です。

手動の翻訳をpo4aに変換する

po4a-gettextizeはマスターファイルとローカライズファイルを同期させ、その内容をPOファイルに抽出します。マスターファイルの内容が msgid となり、ローカライズされたファイルの内容が msgstr となります。この工程はどこかしら頼りないところがあります。翻訳されたファイルの N 番目の文字列は、元の N 番目の文字列の翻訳であることが前提となっているのです。
gettextization は、翻訳に使用された元文書の正確なバージョンをなんとかして取得することができれば、一番うまくいきます。それでも、元の翻訳者によって構造が変更された場合、マスターファイルとローカライズされたファイルの両方をいじって構造を揃える必要がある場合があります。そのためファイルの複製を取って作業することをお勧めします。
内部的には、それぞれのpo4aの構文解析器は抽出された文字列の構文種別を報告します。これは、gettextizationの際に非同期が検出される方法です。下の例では、翻訳中の4番目の文字列(種別 'chapter')が、原文の4番目の文字列(種別'paragraph')の翻訳である可能性は非常に低いでしょう。原文に新しい段落が追加されたか、原文の2つの段落が翻訳時に統合された可能性が高いです。
    オリジナル       翻訳
  章                 章
    段落               段落
    段落               段落
    段落             章
  章                   段落
    段落               段落
po4a-gettextizeは構造の非同期箇所を冗長に診断します。この場合、両方のファイルの構造が実際に一致するまで、手動でファイルを編集し、張りぼての段落を追加したり、あちこちの内容を削除したりする必要があります。その際、既存の翻訳を最大限活用するためのいくつかのコツを以下に示します。
もし幸運にもファイル構造が完全に一致するのであれば、正しいPOファイルを作るのには数秒しか掛かりません。そうでない場合は、このプロセスがなぜこのような醜い名前を付けられているのか、すぐに理解できるでしょう :) それでも、すべてを翻訳し直すより、gettextization の方が速いことがしばしばです。私は、 多くの 同期の問題があったにもかかわらず、1 日で Perl の文書全体のフランス語翻訳を gettextize しました。テキストの量(原文 2Mb )を考えると、まず古い翻訳から拾い上げることなく翻訳を再開すると、数ヶ月の作業が必要だったでしょう。さらに、この手間のかかる作業は、po4aの快適さを手に入れるための代償でもあるのです。一度変換してしまえば、マスター文書と翻訳の同期はいつも完全に自動で行われます。
gettextizationに成功したら、以下に説明するように、生成された文書に未検出の不一致や表面化していない誤りがないか手作業で検査する必要があります。
gettextization の工程のヒントとコツ
非同期箇所が検出されると同時に、gettextizationは停止します。このような場合、ファイルの構造を再調整するために必要なだけのファイルを編集する必要があります。 po4a-gettextize は、うまくいかないときにはかなり口数が多くなります。一致しない文字列とその位置、そしてそれぞれの型が報告されます。さらに、これまでに生成された PO ファイルは gettextization.failed.po として吐き出され、さらに詳しく調べられるようになっています。
ここでは、この面倒な作業をお手伝いするために、前回の翻訳を最大限に生かすためのコツをご紹介します。
翻訳者のクレジットを示す節など、翻訳の余分な内容をすべて削除してください。これらはpo4aにaddendasとして別途追加してください(po4a(7)を参照)。
ファイルを編集して構造を揃える場合、可能であれば翻訳を編集するのが望ましいです。実際、元文書への変更があまりにも割り込んでくる場合、gettextization後の最初のpo4a実行時に新旧バージョンが噛み合いません(下記参照)。噛み合わない翻訳はいずれにせよ切り落とされます。とはいえ、gettextizationを進めるのが難しい場合は、翻訳の1段落が切り落とされることになっても、元の文書を編集したいものです。重要なのは、まず最初のPOファイルを手に入れることです。
翻訳版には存在しない元の内容は遠慮なく削除してください。この内容はその後、POファイルと文書を同期させる際に自動的に再導入されます。
翻訳の構造的な変更が正当化されると思われる場合は、おそらく原著者に報告すべきです。原文にある問題は、原作者に報告すべきです。翻訳側で修正しても、コミュニティの一部で修正されるだけです。さらに、po4aを使用している場合は、そうすることは不可能です ;)しかし、 po4aへの変換が終わるまで待ってから、元のファイルが変更されてほしいかもしれません。
時には、段落の内容は一致するけれども、型があわない場合があります。その修正法はフォーマットに依存します。POD や man では、片方の行は空白で始まっているのに、もう片方はそうではない、ということが実際にあります。こういったフォーマットでは、そのような段落は改行できず、別の型となります。そのようなときは空白を削除してください。XMLの場合ではおそらくタグ名のタイプミスでしょう。 同様に、POD では、分割行に空白が入っていたり、 =item 行と item の内容の間に空行がない場合、二つの段落を一つにまとめてしまいます。
翻訳が間違った元の段落に添付されているため、非同期箇所の文言が奇妙に見えることがあります。これは、工程の早い段階で検出されていない問題があったことを示すものです。生成されたファイル gettextization.failed.po を検査することによって実際の非同期的な箇所を探し、本当にあるべきところにあるように直します。
その他の問題としては、原文または訳文のいずれかに重複する文字列があることが考えられます。重複した文字列は PO ファイルに統合され、2 つの参照先を持ちます。これは、マスターとローカライズの両ファイルの msgids を1対1で対応させるという単純な gettextization アルゴリズムにとって難題となります。しかし、最近のバージョンの po4a は重複した文字列を適切に処理していると思われますので、問題が残っている場合は報告するべきです。

po4a-gettextizeが生成したファイルを確認する

po4a-gettextizeによって生成されたファイルは、スクリプトが正常に終了した場合であったとしても、手作業で確認するべきです。msgidmsgstr が実際に一致しているかどうか、PO ファイルにざっと目を通すべきです。ひとまず全項目が曖昧な翻訳としてマークされるので、翻訳が完璧に正しいことを確認する必要はありません。対応が取れていない翻訳を吸い上げたいと思っても、その後の工程で捨てられてしまうことになるので、明らかに一致に問題がないかだけを確認する必要があります。
幸いなことに、この工程では各 msgid とそれに対応する msgstr の類似した要素を認識したいだけなので、対象の言語を修得する必要はありません。私自身、フランス語、英語、ドイツ語の一部を話すので、これらの言語のほとんどを一単語も話せないとしても、少なくともすべてのヨーロッパ言語についてはこの工程ができます。時々、文字列の長さやフレーズの構造(疑問符の量は一致しているか)、その他の手がかりを見ることによって、非ラテン語の言語の一致の問題を検出することができますが、他の誰かがそれらの言語を確認することが望ましいと思っています。
不一致を検出したら、 po4a-gettextizeがエラーを報告したかのように元のファイルと翻訳ファイルを編集し、再試行してください。以前の翻訳を元にして一定水準以上のPOファイルができたら、po4aが正しく動作するようになるまでそれをバックアップしてください。

初めてのpo4aの実行

po4aを立ち上げる最も簡単な方法は、 po4a.conf設定ファイルを書き、統合されたpo4aプログラムを使うことです(po4a-updatepopo4a-translateは非推奨です)。詳しくは、po4a(1)のドキュメントの「設定ファイル」の節を参照してください。
po4a が初めて実行されるとき、gettextization によって吸い上げられた古い翻訳を含む PO ファイルを更新するために、現在のバージョンのマスター文書が使用されます。gettextization から得られた msgids の多くは、最近のマスターファイルから構築された POT ファイルの要素と正確に一致しないため、これにはかなり長い時間がかかることがあります。このため、gettext はコストのかかる文字列近接アルゴリズムを使って最も近いものを探さざるを得ません。例えば、Perl ドキュメントのフランス語翻訳(5.5 MB の PO ファイル)に対する最初の実行は約 48 時間(そう、2 日間です)かかりましたが、その後の実行は数秒しかかかりません。

翻訳を本番環境に移行する

この最初の実行の後、POファイルは翻訳者によるレビューの準備ができています。全項目は、 po4a-gettextizationによってPOファイル内でfuzzyとして印が付けられており、使用前に慎重にレビューするようにさせています。翻訳者は、各項目を取り上げて、吸い上げられた翻訳が実際に現在の原文と一致しているかどうかを確認し、必要に応じて翻訳を更新し、fuzzyの印を削除する必要があります。
fuzzyの印が充分に取り除かれると、 po4aは翻訳ファイルをディスク上に生成し始め、翻訳の作業工程を本番に移行する準備が整います。プロジェクトによっては、翻訳者と保守者の間の調整にWeblateを利用するのが便利な場合もありますが、それはpo4aの範囲外です。

関連項目

po4a(1)po4a-normalize(1)po4a-translate(1)po4a-updatepo(1)po4a(7)

著者

 Denis Barbier <[email protected]>
 Nicolas François <[email protected]>
 Martin Quinson (mquinson#debian.org)

訳者

 倉澤 望 <[email protected]>
 Debian JP Documentation ML <[email protected]>

著作権とライセンス

Copyright 2002-2022 by SPI, inc.
本プログラムはフリーソフトウェアです。GPL の条項に基づき再頒布と変更を行うことができます (COPYING ファイルを参照してください)。

Recommended readings

Pages related to po4a-gettextize you should read also:

Questions & Answers

Helpful answers and articles about po4a-gettextize you may found on these sites:
Stack Overflow Server Fault Super User Unix & Linux Ask Ubuntu Network Engineering DevOps Raspberry Pi Webmasters Google Search