iPod touch でシャーロック・ホームズを読みたいなー、と思って、 Project Gutenberg からダウンロードして、iBooks や Stanza で読んでみた…が、しかし。100年前の英語は非常に読みにくい。iBooks には英英辞典が入っているが、古風すぎる単語を引くと、解説文の英語さえよくわからない…悲しい、NOAD って制限語彙じゃないっけ…。
で、引く辞書を英和に変えられないのかと思って検索してみたら、なんと iBooks ではそれができる可能性があるらしい。後輩の(でも明らかに自分より偉大な) 登さんのブログ記事 によると、epub ファイルをバラして dc:language 要素を ja に変えると、小学館プログレッシブ英和辞典が呼び出されるようになるらしい。
というわけで、それを全自動でやるスクリプトを書いてみた。このスクリプトを実行すると、カレントディレクトリ以下に存在する全ての epub ファイルの中身をバラして、dc:language 要素の値を en から ja に変換できる。大変申し訳ないですがわたくし sed しか使えないので、このスクリプトは Linux のシェルか Cygwin でしか実行できません。ライセンスは…じゃあ Apache で。
#! /bin/sh
# a script which converts the content of a "dc:language" element
# in the OPF file in epub files from "en" to "ja". This affects
# the choise of the inline dictionary of iBooks.
#
# Written by Takuya Mishina on 2010-11-06
#
# [prerequisite]
# zip, unzip
# for cygwin users: note that zip and unzip are provided as a
# separate package!
#
find . -name \*.epub | while read file ; do
basename=$( basename "${file}" .epub )
dirname=$( dirname "${file}" )
mv "${dirname}/${basename}".epub "${dirname}/${basename}".zip
mkdir "${dirname}/${basename}"
mv "${dirname}/${basename}".zip "${dirname}/${basename}"
base=`pwd`
cd "${dirname}/${basename}"
unzip "${basename}".zip
rm "${basename}".zip
find . -name \*.opf | while read opffile ; do
mv "${opffile}" "${opffile}".bak
cat "${opffile}".bak | sed -r -e 's/(]+>)en(.+)$/\1ja\2/g' > "${opffile}"
rm "${opffile}".bak
done
zip -r "../${basename}".zip *
mv "../${basename}".zip "../${basename}".epub
cd "${base}"
rm -rf "${dirname}/${basename}"
done