Practice of Programming

プログラム とか Linuxとかの話題

翻訳のバージョン管理ツール作り始めた tran

明けましておめでとうございます。本年もよろしくお願いします m(__)m


昨年末ころから、Perlのドキュメント日本語訳関係で動きがあったので、前から作ろうと思ったものをちょっと、作り始めてみた。


翻訳作業において、オリジナルがバージョンアップすると、オリジナルのバージョン間のdiffをみつつ、翻訳のバージョンアップをするっていう作業が必要なんですが、以外と邪魔くさい。
というのは、自分で、オリジナルのバージョン管理までやんないといけないハメになっちゃうから(もちろん、モジュール作者がリポジトリを持っている場合はあるけど、各モジュールで違うってのはめんどくさいし)。


なので,古いバージョンから新しいバージョンへのアップデートは一から訳すよりは楽なはずなのに、ちょっとめんどくさい。
svk を使った方法は以前試したものの、それでもめんどくさいので、やはりそれように何かほしい。


というわけで、ちょっと作った。tran というコマンド。
http://github.com/ktat/tran/


まだ、途中もいいところなので、コンセプトの紹介。


設定ファイルはこんな感じ

---
# 通知に関する設定
notify:
  perldocjp:
    class: Email
    from: 'from@example.com'
    to: 'to@example.com'
    template_directory: /home/ktat/.tran/template/perldocjp/
    # 上のディレクトリ以下にコマンドの名前と同じファイル(startとか)を作る(以下みたいなの、空行までがヘッダ情報)
    # Subject: [RFC]%n %v 翻訳開始しました
    # charset: jis
    # 
    # 加藤です。
    # 
    # %n %v の翻訳を開始しました。

# 置き場所に関する設定
repository:
  # オリジナルの文書を管理する場所(バージョンごとにディレクトリ掘って突っ込むだけ)
  original:
    directory: /home/ktat/.tran/original/
  
  # 翻訳作業をする場所に関する情報
  translation:
    jprp-modules:
      directory: /home/ktat/cvs/perldocjp/docs/modules/
      # 通知に上で書いた perldocjpの設定を使う
      notify: perldocjp
    jpa:
      directory: /home/ktat/git/github/jpa-translation/

# 翻訳するリソース  
resources:
  CPAN:
    # CPANに対するデフォルトの翻訳場所設定
    translation: jprp-modules
    metafile: /home/ktat/.cpan/Metadata
    target_only:
      - '*.pm'
      - '*.pod'
      - README
      - Changes
    targets:
      # モジュールごとの個別の設定
      Moose:
        # 翻訳リポジトリにjpaを使う
        translation: jpa
      MooseX::Getopt:
        translation: jpa

以下のように,コマンドをたたく。

% tran start CPAN Module::Install

すると、

  1. CPANからModule::Installのtar.gzをとってくる
    • 取得及び展開の実装は、Tran::Resources::CPAN の get メソッド
    • ここで .pm -> .pod に変換している
  2. ~/.tran/original/Module-Install/バージョン/ に展開
  3. original 以下に保存されたファイルを翻訳場所へコピー
    • もし、翻訳場所に以前のバージョンがある場合、はText::Diff3を使って、マージする
    • このへんのバージョン取得等は、Tran::Repository::Translation::* サブクラスで書いてます
    • JPRPならディレクトリから。JPAならMETA.ymlから
  4. 必要ならバージョン情報の更新。JPAなら、META.ymlの更新。
  5. notify の設定がされていれば、コマンドに応じて通知が動く

て、感じで動く(つもり)。


なお、これを使う場合、オリジナルの文書を残していないと、マージがうまくいきません。
ので、JPAの翻訳文書ではおかしなことになると思います(mergeの実装を変えればいいかもしれないけど)。
JPAは別の環境の一例として実装してみただけです。
と、書いてたんですが、mergeの実装を変えたら(というか、直したら)、まともになりました。それなりに使えるかも。




現状、startしかまともなコマンドがありません。finishも作って、翻訳で使われているバージョンコントロールシステムと連動するとかすると良いんだろうけどなぁ、とか思いつつ、やるかは謎です。少なくとも、start 時点で、既存の翻訳リポジトリの update はしたほうが良いよなぁとか、思いますが。
CVSとかGitとかを簡単に扱うモジュールあるのかな?
後は、各翻訳リポジトリに応じてサブクラスを作るので、JPRPのメタXMLを作ったりできるように、フック箇所を作ったりすればいいかな。