Jaws CMSのメッセージカタログの差分を出す
翻訳対象の英語メッセージがどう更新されたのか,リポジトリーを元に管理をします.
時々やってるんですが,基本的にリポジトリーベースで管理をしないと差分追跡ができなくて.
Serendipity Weblogの場合はこういうのを用意して作業しています.
http://elf.no-ip.org/php/dev/s9y/trans-info/s9y-trunk/ja/status/
大体こういうのはEN-Revisionというキーワードを日本語訳のファイルに付与して英語ファイルとの差分管理をします.
PHPでは古のアプローチでドキュメント化されたものとしてはこの辺.
- http://doc.php.net/php/ar/dochowto/translation-revtrack.php
- http://wiki.php.net/doc/translations サンプルコードは高木さんだし(苦笑
今回題材にしたJaws CMSの場合はこんな感じの手順で作業をしていました.
- 元ファイルのリビジョン番号やチェンジセットを入手する (ex: svn info en.php)
- その情報を翻訳ファイルに記録する (ex: // EN-Revision: foo)
- 公式サイトに渡すなり自分でコミットするなりする
っで,公式開発チームがどうしてもEN-Revisionを消すので近いうちにちゃんと説明しようかなと.
とりあえずワンライナーで差分ファイルを作成するものを作ってみた.
$ for CATEGORY in gadgets plugins; do pushd ${CATEGORY} > /dev/null; for COMPONENT in `find . -maxdepth 1 -mindepth 1 -type d ! -name .svn | sed 's@^\./@@g'`; do pushd ${COMPONENT}/languages > /dev/null; for CHECK_LANG in ja; do EN_REVISION=`grep EN-Revision ${CHECK_LANG}.php | sed 's@^.*EN-Revision: \([0-9]*\)@\1@g'`; echo -n "Check ${CATEGORY}/${COMPONENT}'s en.php between r${EN_REVISION} and HEAD, for ${CHECK_LANG}.php ... "; svn diff -r ${EN_REVISION} en.php > ${CHECK_LANG}.diff; echo "done."; done; popd > /dev/null; done; popd > /dev/null; done
解いてみた.今回は少し長い.
$ for CATEGORY in gadgets plugins do pushd ${CATEGORY} > /dev/null for COMPONENT in `find . -maxdepth 1 -mindepth 1 -type d ! -name .svn | sed 's@^\./@@g'` do pushd ${COMPONENT}/languages > /dev/null for CHECK_LANG in ja do EN_REVISION=`grep EN-Revision ${CHECK_LANG}.php | sed 's@^.*EN-Revision: \([0-9]*\)@\1@g'` echo -n "Check ${CATEGORY}/${COMPONENT}'s en.php between r${EN_REVISION} and HEAD, for ${CHECK_LANG}.php ... " svn diff -r ${EN_REVISION} en.php > ${CHECK_LANG}.diff echo "done." done popd > /dev/null done popd > /dev/null done
解いてみると手抜きでjaしか対象にしていなかった(苦笑
とりあえず下記は実行結果.
Check gadgets/LinkDump's en.php between r9525 and HEAD, for ja.php ... done. Check gadgets/Skeleton's en.php between r8688 and HEAD, for ja.php ... done. Check gadgets/Emblems's en.php between r8411 and HEAD, for ja.php ... done. Check gadgets/Jms's en.php between r8687 and HEAD, for ja.php ... done. Check gadgets/SysInfo's en.php between r8542 and HEAD, for ja.php ... done. Check gadgets/Contact's en.php between r10545 and HEAD, for ja.php ... done. Check gadgets/VisitCounter's en.php between r8017 and HEAD, for ja.php ... done. Check gadgets/Webcam's en.php between r8688 and HEAD, for ja.php ... done. Check gadgets/Policy's en.php between r7879 and HEAD, for ja.php ... done. Check gadgets/Weather's en.php between r8688 and HEAD, for ja.php ... done. Check gadgets/Preferences's en.php between r8717 and HEAD, for ja.php ... done. Check gadgets/Launcher's en.php between r8687 and HEAD, for ja.php ... done. Check gadgets/Tms's en.php between r7687 and HEAD, for ja.php ... done. Check gadgets/Poll's en.php between r4942 and HEAD, for ja.php ... done. Check gadgets/Languages's en.php between r9028 and HEAD, for ja.php ... done. Check gadgets/UrlMapper's en.php between r8688 and HEAD, for ja.php ... done. Check gadgets/Registry's en.php between r8688 and HEAD, for ja.php ... done. Check gadgets/Blocks's en.php between r8687 and HEAD, for ja.php ... done. Check gadgets/SimpleSite's en.php between r4942 and HEAD, for ja.php ... done. Check gadgets/Quotes's en.php between r8917 and HEAD, for ja.php ... done. Check gadgets/FileBrowser's en.php between r8687 and HEAD, for ja.php ... done. Check gadgets/Blog's en.php between r10251 and HEAD, for ja.php ... done. Check gadgets/StaticPage's en.php between r9068 and HEAD, for ja.php ... done. Check gadgets/ServerTime's en.php between r4942 and HEAD, for ja.php ... done. Check gadgets/Chatbox's en.php between r9845 and HEAD, for ja.php ... done. Check gadgets/Friends's en.php between r8687 and HEAD, for ja.php ... done. Check gadgets/RssReader's en.php between r8036 and HEAD, for ja.php ... done. Check gadgets/ControlPanel's en.php between r10535 and HEAD, for ja.php ... done. Check gadgets/Settings's en.php between r10204 and HEAD, for ja.php ... done. Check gadgets/Users's en.php between r10953 and HEAD, for ja.php ... done. Check gadgets/Glossary's en.php between r8687 and HEAD, for ja.php ... done. Check gadgets/Menu's en.php between r10530 and HEAD, for ja.php ... done. Check gadgets/Search's en.php between r4942 and HEAD, for ja.php ... done. Check gadgets/Phoo's en.php between r10681 and HEAD, for ja.php ... done. Check gadgets/Banner's en.php between r8409 and HEAD, for ja.php ... done. Check gadgets/Faq's en.php between r9417 and HEAD, for ja.php ... done. Check gadgets/Layout's en.php between r10535 and HEAD, for ja.php ... done. Check plugins/Exchange's en.php between r11001 and HEAD, for ja.php ... done. Check plugins/BlockImport's en.php between r11001 and HEAD, for ja.php ... done. Check plugins/AccessLimiter's en.php between r11001 and HEAD, for ja.php ... done. Check plugins/NiceFormat's en.php between r8685 and HEAD, for ja.php ... done. Check plugins/SpellNumber's en.php between r8685 and HEAD, for ja.php ... done. Check plugins/GlossaGlossy's en.php between r8685 and HEAD, for ja.php ... done. Check plugins/PhooInsert's en.php between r11001 and HEAD, for ja.php ... done. Check plugins/FastLinks's en.php between r8685 and HEAD, for ja.php ... done. Check plugins/AlbumCover's en.php between r4942 and HEAD, for ja.php ... done. Check plugins/Emoticons's en.php between r4942 and HEAD, for ja.php ... done. Check plugins/AntiSpammers's en.php between r4942 and HEAD, for ja.php ... done. Check plugins/SmartBridge's en.php between r8685 and HEAD, for ja.php ... done. Check plugins/GoogleHighlight's en.php between r8685 and HEAD, for ja.php ... done. Check plugins/ActionImport's en.php between r11001 and HEAD, for ja.php ... done. Check plugins/FindFriend's en.php between r8685 and HEAD, for ja.php ... done. Check plugins/SyntaxHighlight's en.php between r8685 and HEAD, for ja.php ... done.
しかしワンライナー楽しいのう.
Serendipity Weblogも当時(数年前)がんばって説得したんだけど今も活用してくれているのかなぁ〜