C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

DartRefJP ドキュメントのローカライズに際し po4a を使ってみる?それとも… (part 1)

dartrefjp はまだまだ少ない日本語のDart言語関連情報、特に言語仕様やAPIリファレンスを中心としたDart本家の情報のローカライズに取り組んでいます。

さて、先週末に取り組もうかと思いながらもまだ日本語版の記事を公開できていない「Dartぱずらーず」について、また今後取り組む予定の仕様書周りの日本ローカライズなどに辺り、作業を支援するツールは恐らく必須。要求は以下の通り。

  • ある程度の大きさのブロック毎に原文を分割し作業しやすくできる。
  • 文書が更新された際にブロック毎、原文に変化があった場合に既存のローカライズパッチを当てずに、WarningなりNoteなりを示す。
  • Gitによるリポジトリ管理を効率的に利用できる。

想定したいワークフローは以下の通り。

ローカライズ初版の生成)

  1. 原文を取得
  2. ブロックに分割
  3. ブロック毎にローカライズする
  4. 必要な全てのブロックについてローカライズを完了したら結合してローカライズされた文書を生成する

ローカライズ更新版の生成)

  1. 原文を再取得
  2. ブロックに分割
  3. 以前の原文から生成済みのブロック群と更新された原文からのブロック群の差分を生成する
  4. 差分についてローカライズする
  5. 以前のローカライズされたブロック群に更新のあった差分をマージする
  6. 必要な全てのブロックについてローカライズを完了したら結合してローカライズされた文書を生成する

この記事を書くまでに、そんな様な事を検討したり調べたりしていた。それで有力な候補として残ったローカライズアシストツールがpo4aというgettextをドキュメント向けにしたらしいもの。

実はほかには htmlcxxコマンドラインツールまたはいっそライブラリを使ったアプリを書いてしまおうか、haxmlで書こうか、KDE4のlokalizationを使ってみてはどうだろうか、diff/patchなどのよく枯れたツール群とちょっとしたシェルスクリプトでなんとかならないだろうか・・・などなど考えた。

さて、それはそうとこの po4a 、 gettext 互換との事で、例えば私が昨年にharuulalaさんらと共に取り組んだ
Orchard Localization JP
などでも、Orchard CMSgettext互換のpoを用いたローカライズシステムを採用しており、とても分割して徐々に作業を進めるのに適している事は承知している・w・b

とは言え、さすがにドキュメント、特にHTMLでメッセージではなく文章として書かれ、さらにソースコードブロックも混ざったものに適用するのはやはり無理があるのではなかろうか…などなど考えつつも、とりあえず Arch Linux に用意されたパッケージを入れてみるなどした。

# pacman -S po4a

特にトラブルも無くパッケージは導入されたはずなのだけど、どうもパスの通ったところに居ないらしい…。findってみると以前にもそういえばこのパターンになるパッケージがあった事を思い出した。

% find /usr -name po4a
/usr/bin/vendor_perl/po4a

と、言う訳で、パスをvendor_perlにも通すか、必要なコマンドを/binにln -sするか、毎度フルパスを使うかすれば良い。せっかくパッケージ管理されているところにリンクを手作業で生成するのも微妙な気持ちになるので素直にパスを通す事にする。

% export PATH=/usr/bin/vendor_perl:$PATH

よく使う様で在れば .zshrc などに追記してあげよう。

% po4a --version
po4a version 0.41.
written by Martin Quinson and Denis Barbier.

Copyright (C) 2002, 2003, 2004 Software in the Public Interest, Inc.
This is free software; see source code for copying
conditions. There is NO warranty; not even for
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

さて、そんなわけで po4a を使う準備は整いました。
ちなみに私はpo4aを脳内では「ぽよんえー」と読んでいます・x・

早速ぽよんえーしてみましょう。manによると、とりあえず、

しましょうとの事。してみましょう…と、その前に対応可能な文書形式の一覧を確認してみます。

% po4a-gettextize --help-format
List of valid formats:
  - dia: uncompressed Dia diagrams.
  - docbook: DocBook XML.
  - guide: Gentoo Linux's XML documentation format.
  - ini: INI format.
  - kernelhelp: Help messages of each kernel compilation option.
  - latex: LaTeX format.
  - man: Good old manual page format.
  - pod: Perl Online Documentation format.
  - sgml: either DebianDoc or DocBook DTD.
  - texinfo: The info page format.
  - tex: generic TeX documents (see also latex).
  - text: simple text document.
  - wml: WML documents.
  - xhtml: XHTML documents.
  - xml: generic XML documents (see also docbook).

HTMLがありませんねー…。ソースがXHTMLならぴったりなパーサーが用意されていた様ですが、HTML5のソースでは閉じタグの厳格さなどありませんし、ここは仕方がありません、HTMLの派生元であるSGMLで試して見るとしましょう。


… -f sgml だと "Unknown format type: sgml." とか言われますね…。
… -f text にしても非ASCIIを含んでいてダメポとか言われる…。

さてさて、今日はもう眠いのでこの辺で、続きはまた明日にでも☆ミ

ちなみに、これ書いてて思ったのだけれど、複数ファイルに跨る語録とか今回考えている様なドキュメントのローカライズではあまり出番は無いと思うので、いっその事Gitだけで管理してしまってもシンプルだし差分も見れるし、元に更新があればブランチ生やして作業できるし・・・十分なんじゃ・・・とか思ったりもしつつ。。

ともかく、続きはまた明日!