garbagetown

個人の日記です

ドキュメント翻訳の裏側

この記事は Play framework Advent Calendar 2014 - Adventar の四日目です。空いているようなので埋めます。

五日目の立候補者がいないので誰か書いてください。

新規翻訳と差分翻訳

Play Framework のドキュメントは日々更新され続けています。いずれは原文の更新を検知して、すぐさま翻訳する仕組みを作れたらと思いますが、今のところ翻訳プロジェクトでは Play Framework の新しいバージョンがリリースされるたびに、手作業で地道に更新内容を確認しています。

更新内容には大きく分けて、ドキュメントの追加、更新、削除の三種類があり、削除されたドキュメントはもちろん翻訳対象外ですし、追加されたドキュメントは何も考えずに翻訳すればいいのですが、難しいのが更新されたドキュメントです。

原文に変更がない箇所まで再度翻訳するのは無駄なので、翻訳プロジェクトでは以下のように対策しています。

issues のラベルと diff 表示

前回の記事 で、しれっと「ファイル名などで issues を検索します」と書いたとおり、翻訳プロジェクトでは翻訳対象のドキュメントを issues に登録しています。

このとき、更新されたドキュメントの場合は、以下のように update ラベルを付けて、issues の本文に diff の結果を貼り付けています。

f:id:garbagetown:20141205005026p:plain

リリースごとに大体 120 個くらいの issues を登録するので、さすがに手作業では厳しく、issues を登録するツール を作って対応しています。

翻訳対象のドキュメントを issues 化するというアイディアは @masahito さんのもので、当時は Pyhton で書かれていたようです。diff を含める機能を追加したかったのですが、ぼくが Python を書けないので Java で作り直しました。

これにより、このドキュメントが更新されたものであることと、更新された内容がひと目で分かるようになりましたが、差分が多くて面倒くさそうな issues がいつまで経っても翻訳されないという副作用も産み出しています。

なお、GitHub API クライアントには Jenkins 作者でもある @kohsukekawa さんの kohsuke/github-api を使わせて頂きました。

翻訳文のコピー

続いて、変更がなかった箇所の対策です。

上記した通り、再度翻訳するのは無駄なので、以前は手作業でコピーしていたのですが、@seratch_ja さんに「これ苦行ですね」と言われたので、翻訳文をコピーするツール を作りました。

@seratch_ja さんには Scala で書くと言ったのですが、ぼくが Scalaツールを書けるようになるまでの間に Play Framework 5 くらいになってしまいそうだったので、Java で書いています。

それから、少しくらい間違っていてもすぐに直せばいいじゃない、という間違ったアジャイル開発信者のような大らかな気持ちで作ったので、ひとつのドキュメント内に同じ文章が複数回登場するとコメントアウトが壊れたりと、微笑ましい動作をします。直します。

まとめ

本家サイトで公開されている翻訳プロジェクトなどと聞くと敷居が高く感じられるかもしれませんが、実際は手作業による温もり感溢れるプロジェクトであることがお分かり頂けたのではないでしょうか。

本来は Google Translation Toolkit などを使うべきだったのですが、過去の経緯 (主に無知) などにより、上記した方法で何とか運用しています。

運用改善にご協力頂いた @masahito さん、@seratch_ja さん、それから紹介が遅れましたが 翻訳ガイドライン を書くように薦めてくださった @kawachi さん、そして GitHub API クライアントを OSS で公開してくださっている @kohsukekawa さんに、この場を借りて改めてお礼を申し上げます。

本当にありがとうございます。今後ともよろしくお願いいたします。以上です。