publican というのは、Redhat 社他で使われている、製版プログラムです。
Fedora project で、ユーザガイドなどの文書の翻訳者が、自分で翻訳した PO ファイルを、ローカルに製版して、HTML にする手順と、知っておくとよいことを以下に示します。私自身のための覚え書きでもあります。
以下の操作例の URL やファイル名は、私がミュージシャンのガイドを製版するときに使ったものです。オプショナル、と書いてある手順は、必須ではないものです。
1 プログラムをインストールする。
私が使ったのは、publican-2.5-2.fc15.noarch, publican-fedora-2.0-3.fc15.noarch, transifex-client-0.5.2-1.fc15.noarch, git-1.7.6-1.fc15.i686 fop-0.95-5.fc14.noarch でした。Fedora 15 で作業しました。
2 ブックを Fedora のリポジトリからもってくる。
$ git clone git://git.fedorahosted.org/docs/musicians-guide.git
しばらくかかります。
こういうファイルができます。
$ cd musicians-guide
$ ls en-US/
Ardour.xml Preface.xml
Audacity.xml Qtractor.xml
Audio_Vocabulary.xml Real_Time_and_Low_Latency.xml
Author_Group.xml Revision_History.xml
Book_Info.xml Revision_History.xml^f15
Chapter.xml Rosegarden.xml
Digital_Audio_Workstations.xml Solfege.xml
FluidSynth.xml Sound_Cards.xml
Frescobaldi.xml Sound_Servers.xml
LilyPond SuperCollider
Musicians_Guide.ent files
Musicians_Guide.xml images
Planet_CCRMA_at_Home.xml
git は、バージョン管理システムです。例えば、http://www8.atwiki.jp/git_jp/ を参照。
3 オプショナル。XML を見る。
Musicians_Guide.xml というのが、一番、ルートになる文書で、
xi:include href="Sound_Cards.xml"
などどして、他の XML 文書を引っ張ってきます。
それぞれのファイルは、こんな内容です。
$ more Ardour.xml
<?xml version='1.0' encoding='utf-8' ?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-
open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % BOOK_ENTITIES SYSTEM "Musicians_Guide.ent">
%BOOK_ENTITIES;
]>
<chapter id="chap-Musicians_Guide-Ardour">
<title>Ardour</title>
<para>
<application>Ardour</application> is a feature-rich application designed for multi-track recording situations.
</para>
。。
Book_Info.xml, Author_Group.xml, Revision_History.xml
などの名前のファイルは、決まった用途があります。
http://docs.fedoraproject.org/en-US/Fedora_Contributor_Documentation/1/html/Users_Guide/index.html
を参照。
4 オプショナル。ブックのバージョンを戻す。
git.fedorahosted.org のファイルは、常に更新されているので、PO ファイルに対応してないことがあります。 git の機能で、PO ファイルが作成された時点のブックに戻します。
PO ファイルの Revision_History と、git log の結果を比べます。
$ git log en-US/Revision_History.xml
。。
私は、この日付に戻すことにしました。
commit 4bb8ff0b541c3cdfb081d09c5f84772385e2e4b3
Date: Sun Feb 27 23:24:32 2011 -0500
$ git checkout 4bb8ff0b541c3cdfb081d09c5f84772385e2e4b3
Checking out files: 100% (682/682), done.
Note: checking out '4bb8ff0b541c3cdfb081d09c5f84772385e2e4b3'.
You are in 'detached HEAD' state.
$ git branch -a
* (no branch)
master
remotes/origin/HEAD -> origin/master
remotes/origin/f14
remotes/origin/f15
remotes/origin/master
5 POT, PO ファイルを作る
publican ユーザガイド Preparing a document for translation に従います。
$ pwd
~/musicians-guide
$ publican update_pot
Processing file en-US/Ardour.xml
..
$ ls pot
Ardour.pot Planet_CCRMA_at_Home.pot
。。
$ publican update_po --lang=ja-JP
Processing file pot/Ardour.pot -> ja-JP/Ardour.po
。。
$ ls ja-JP
Ardour.po Planet_CCRMA_at_Home.po
。。
ここでできた PO ファイルは、 msgstr に何も入ってないので、これを入れるのが、翻訳者の作業です。
例
msgid "Ardour"
msgstr ""
6 transifex, poedit の説明
現在、 Fedora project の翻訳は、transifex というところでホストされています。しばらく、publican を離れて、作業の説明をします。
ミュージシャンのガイドは、
https://www.transifex.net/projects/p/fedora-musicians-guide/
にあります。
transifex のアカウントを得ると、ブラウザで直接 PO ファイルを編集して訳を入れたり、ダウンロード、アップロードできます。
私は、大きな修正は、ダウンロードして、poedit で訳を入れています。
gnome translate, kde lokalize も試しましたが、動作が不安定で、やめました。
訳が完成したとします。次にやることは、transifex から、最新の PO ファイルを持ってきて、publican の期待する場所に置くことです。
7 transifex の環境初期化と、リポジトリの指定
ブラウザで1つづつ、持ってくるならば、以下の手順は不要です。
参照:http://help.transifex.net/user-guide/client/index.html
$ mkdir transifex
$ cd transifex
$ tx init
接続先やユーザ名を聞かれる。
$ tx set --auto-remote https://www.transifex.net/projects/p/fedora-musicians-guide/
Auto configuring local project from remote URL...
の結果、
.tx/config ファイルができて、
[fedora-musicians-guide.Ardour]
file_filter = translations/fedora-musicians-guide.Ardour/<lang>.po
source_lang = en_US
などと書いてある。
8 transifex から PO ファイルをもってくる
$ tx pull -l ja_JP
Pulling new translations for resource fedora-musicians-guide.Ardour (source: None)
。。
$ more translations/fedora-musicians-guide.Ardour/ja_JP.po
。。
msgid ""
"<application>Ardour</application> is a feature-rich application designed for"
" multi-track recording situations."
msgstr ""
"<application>Ardour</application> はマルチトラック録音のために設計された豊富な
機能を持つアプリケーションです。"
9 publican のディレクトリにコピーする
publican と transifex の世界をつなぐ必要があります。
tx set --auto-local とか、.tx/config で、できるのかもしれないが、まあ、1つづつ手でリンクしましょう。
$ ln -sf ~/transifex/translations/fedora-musicians-guide.Ardour/ja_JP.po ~/musicians-guide/ja-JP/Ardour.po
。。
10 ついに、製版!
$ publican build --format html --lang ja-JP
Setting up ja-JP
Merging ja-JP/Ardour.po >> en-US/Ardour.xml -> tmp/ja-JP/xml_tmp//Ardour.xml
WARNING: Message missing from PO file, consider updating your POT and PO files."<firstterm> エディタミキサー </firstterm>"
警告が山のように出たが、製版はできました。バグとのこと。https://bugzilla.redhat.com/show_bug.cgi?id=737426
11 オプショナル。エラーが出て止まってしまった
not well-formed (invalid token) at line 4, column 130, byte 375:
<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
]>
<para>マトリックスエディタウインドウで、あなたは音符の "ベロシティ "(ラウドネス
)を、"Resize"MIDI ツール( <xref linkend="sect-Musicians_Guide-Qtractor-Using-MIDI_Tools" / を参照)を使って調整できます。</para>
=================================================================================================================================
at /usr/lib/perl5/vendor_perl/XML/Parser.pm line 187
なんのこっちゃあ。と思ったけど、閉じかっこ > を忘れていただけでした。XML だからね。
12 できました
$ ls tmp/ja-JP/html
appe-Musicians_Guide-Revision_History.html
index.html
。。
13 PDF もつくろう
$ publican build --format pdf --lang=ja-JP
。。
Beginning work on ja-JP
Starting pdf
Using XML::LibXSLT on /usr/share/publican/Common_Content/fedora/xsl/pdf.xsl
Making portrait pages on A4 paper (210mmx297mm)
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/avalon/framework/configuration/ConfigurationException
at org.apache.fop.apps.FopFactory.<init>(FopFactory.java:150)
at org.apache.fop.apps.FopFactory.newInstance(FopFactory.java:166)
at org.apache.fop.cli.CommandLineOptions.<init>(CommandLineOptions.java:102)
at org.apache.fop.cli.Main.startFOP(Main.java:153)
at org.apache.fop.cli.Main.main(Main.java:196)
Caused by: java.lang.ClassNotFoundException: org.apache.avalon.framework.configuration.ConfigurationException
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
... 5 more
Finished pdf
あら。
小さめの、リリースノートのXMLで調べましょう。
pdf を作るのは、fop コマンドでやっています。
http://xmlgraphics.apache.org/fop/faq.html#NoClassDefFound
Builder.pm を見ると、これを実行しています。
CLASSPATH="/usr/share/java/ant/ant-trax-1.7.0.jar:/usr/share/java/xmlgraphics-commons.jar:/usr/share/java/batik-all.jar:/usr/share/java/xml-commons-apis.jar:/usr/share/java/xml-commons-apis-ext.jar" fop -q -c /usr/share/publican/fop/fop.xconf -fo Release_Notes.fo -pdf ../pdf/Fedora-15-Release_Notes-ja-JP.pdf
ないと言われているクラスは、/usr/share/java/avalon-framework-api.jar にあるらしいので、それをクラスパスに入れたら、できました。
私の環境が悪い? ま、いいや。
publican.cfg の classpath に書くのが正しいらしい。
すごくエラーメッセージが出たけど、 pdf ファイルができました。一部、文字のかわりに白い四角が表示されるところがあります。これも、ま、いいや。
2011/09/07 12:20:38 org.apache.fop.apps.FopFactoryConfigurator configure
情報: Default page-height set to: 240mm
2011/09/07 12:20:39 org.apache.fop.apps.FopFactoryConfigurator configure
警告: capHeight value could not be determined. The font may not work as expected.
2011/09/07 12:20:40 org.apache.fop.fonts.autodetect.FontInfoFinder find
致命的: Unable to load font file: file:/usr/share/fonts/lilypond/emmentaler-14.otf. Reason: OpenType fonts with CFF data are not supported, yet
2011/09/07 12:20:40 org.apache.fop.fonts.truetype.TTFFile guessVerticalMetricsFromGlyphBBox
ミュージシャンのガイドでやってみましょう。
2011/09/07 12:51:02 org.apache.fop.cli.Main startFOP
致命的: Exception
org.apache.fop.apps.FOPException: org.xml.sax.SAXException: Value must not be empty
java.lang.IllegalArgumentException: Value must not be empty
javax.xml.transform.TransformerException: org.xml.sax.SAXException: Value must not be empty
java.lang.IllegalArgumentException: Value must not be empty
at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:217)
at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:125)
at org.apache.fop.cli.Main.startFOP(Main.java:166)
at org.apache.fop.cli.Main.main(Main.java:196)
Caused by: javax.xml.transform.TransformerException: org.xml.sax.SAXException: Value must not be empty
java.lang.IllegalArgumentException: Value must not be empty
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:723)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:317)
at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:214)
... 3 more
うーん。
https://bugzilla.redhat.com/show_bug.cgi?id=681337 に従って、Book_Info.xml をなおしたら、
お、動いたみたい。
情報: table-layout="fixed" and width="auto", but auto-layout not supported => assuming width="100%"
2011/09/10 4:43:45 org.apache.fop.fo.properties.PropertyMaker make
警告: span="inherit" on fo:block, but no explicit value found on the parent FO.
$ ls -l ../pdf/
-rw-rw-r--. 1 kanda kanda 3895906 9月 10 04:43 Fedora_Draft_Documentation-0.1-Musicians_Guide-ja-JP.pdf
14 いろいろ
前書き、Preface の PO ファイルが見当たりませんが、どこにありますか?
$ rpm -ql publican-fedora
/usr/share/publican/Common_Content/fedora/ja-JP/Legal_Notice.xml
このパッケージにあるようです。
15 publican をデバッグする
publican.cfg に、こう書く。
debug: 1
/usr/share/perl5/vendor_perl/Publican 以下の perl スクリプトなので、読んで、コメントにしてある debug_msg を有効にする。
こういうのが、出る。
DEBUG: Publican::Translate: msgid 3: |"<firstterm> エディタミキサー </firstterm>"| |para|
あるいは、 perl -d /usr/bin/publican
-CA とか、あって、エラーになるのは、適当にコメントアウトする。
16 lang = ja-JP
でないと、PDFを作るときに、fop が正しい日本語フォントを選択できません。
https://fedorahosted.org/publican/wiki/FontMatrix
2011年の夏休み kanda.motohiro@gmail.com