7月
20
2009

コトノコのネット辞書に英辞郎 on the WEBを追加する

オレ的Macを使う理由のひとつにあげられるコトノコ

コトノコには2.0 alpha-6から「ネット辞書」というネット上の辞書サービスで検索を行う機能が追加された
「ネット辞書」を使うとローカルの辞書とオンラインの辞書でシームレスに検索することができて超ベンリ!!

なんだが・・・唯一の欠点はALCの英辞郎 on the WEBに対応していないコト
goo辞書などには対応しているので思わず何でやねん!!っとツッコミたくなるが,寛大な作者様はソースファイルを公開しておられる

のでちょちょっと変更して英辞郎 on the WEBに対応させてみる

ちなみに,単にプロファイルを用意するだけではうまくいかない
プロファイル云々よりコトノコの想定しているURLフォーマットに問題がある

多くの検索サイトでは,URLは検索サービスのURL?search=検索ワードなどのようなフォーマットになっていて,「?」が含まれている(いわゆるnon-ROA)

コトノコはこの「?」をプロファイルではなく,アプリ内で追加する仕様なので.英辞郎 on the WEBの「http://eow.alc.co.jp/検索ワード」のようなフォーマットに対応できないわけだ

ということで,コトノコ 2.0 alpha-8をちょちょっと変更してビルドしてみる(ちなみにalpha-7も同じ方法でイケル)

基本的な流れは公式サイトのmake方法の通り

  • コトノコのソースをありがたくダウンロードして展開する
    % tar zxvf kotonoko-src-2_0-alpha-8.tar.gz
    
  • EBライブラリを用意する(2.0 alpha-8なら4.3.3を使う)
    % cd kotonoko-2_0-alpha-8/eblib/
    % tar jxvf eb-4.3.3.tar.bz2
    % cd eb-4.3.3/
    % patch -p1 < ../eb-4.3.3-kotonoko-patch
    % ./configure
    % make
    
  • Xcodeでソースを修正してURLフォーマットを変更
    • ebooks/kotonoko/Dictionary/NetDictionary.mの205行目
      stringWithFormat:@"web://%@/%@?%@"
      ↓
      stringWithFormat:@"web://%@/%@%@"
      
  • コメントによると一部修正ミスがあるとのことなので,ついでに修正
    • ebooks/kotonoko/EBook.mの398行目
      NSISO2022JPStringEncoding
      ↓
      NSASCIIStringEncoding
      
  • とりあえず,ここまででビルドするとエラーが14個

    nibが見つからないやら何やらなので,ごにょごにょしてみる

    わざわざビルドの通らないプロジェクトを公開されているとは思えないので,こっからのオレのやり方はきっとおかしい
    まぁ何の問題もなく動いてるからいいけど・・・

    配布されているバイナリのパッケージを調べてみると,

    • SearchView
    • GaijiPanel
    • MultiSearchView
    • MainMenu
    • Preferences
    • Fontpanel

    の6つのNIBがローカライズされているようだが,ソースパッケージにはJapanese.lprojフォルダが見あたらない

    それぞれのパッケージのNIBを

    % find ./ -type f -name \*.nib -exec md5 {} \;
    MD5 (.//FontPanel.nib/designable.nib) = 6f15e79f860a4f9b10022b5b4b7934bf
    MD5 (.//FontPanel.nib/keyedobjects.nib) = b4153b5ffc40ed9f4490f8639429dbb9
    MD5 (.//GaijiPanel.nib/classes.nib) = 74b480ccc2f1e7ff4561e3ad8b3cf2ae
    MD5 (.//GaijiPanel.nib/info.nib) = 32cd851bc430b64e25fdd3b2304c9d17
    MD5 (.//GaijiPanel.nib/keyedobjects.nib) = 29626cd5cbe9313880a54834e483ea1b
    MD5 (.//GaijiPanel.nib/objects.nib) = b741dcaf98201715123bf0bf89672613
    ・・・
    

    みたいな感じでリストアップしてハッシュを取って比較してみる

    結果としては,

    • ローカライズされていない5つのNIBは,MainWindow.nib/objects.nib がバイナリ版には存在しない点を除いて一致
    • ローカライズされている6つのNIBは,一部が一致してたり,完全に不一致だったり,そもそもファイル構成が異なったりとよく分からない

    きっとローカライズに関する設定か何かをやるんだろうなぁ・・・と思いつつ,よくわからんので,バイナリ版からNIBを拝借してソース版にあったローカライズされている(?)NIBを英語リソースに,パッケージ版から持ってきたNIBを日本語リソースにすることに(ちなみに,ソース版のNIBも開いてみたら日本語だった)

    • 展開したソースのnibフォルダの中にローカライズ用のフォルダを作る
      % mkdir English.lproj Japanese.lproj
      
    • ソース版のローカライズされている(?)NIBを英語リソースに移動
      % mv FontPanel.nib GaijiPanel.nib MainMenu.nib MultiSearchView.nib Preferences.nib SearchView.nib English.lproj/
      
    • バイナリ版からローカライズされたNIBを拝借
      % cp -R /Volumes/kotonoko\ 2.0a8/kotonoko.app/Contents/Resources/Japanese.lproj/*.nib Japanese.lproj
      
    • NetDictフォルダとtemplateフォルダもソース版には含まれていないようなので,バイナリパッケージから拝借
      % cp -R /Volumes/kotonoko\ 2.0a8/kotonoko.app/Contents/Resources/NetDict ~/Downloads/kotonoko-2_0-alpha-8/
      % cp -R /Volumes/kotonoko\ 2.0a8/kotonoko.app/Contents/Resources/template ~/Downloads/kotonoko-2_0-alpha-8/
      
    • 変更したURLのフォーマットに合わせてNetDict内のプロファイルを修正
      • 「Root – SearchMethods – 全アイテム」の Template の先頭もしくは SearchURLの末尾に ? を追加
    • 英辞郎 on the WEB用のプロファイルalc.plistをNetDictフォルダに追加
    • アクティブな構成をDevelopment からDeploymentに切り替えてビルド

    変数の初期化関連などの警告が出るけど,全く問題ナシ

    以上,多少強引な方法だがコトノコで英辞郎 on the WEBが使えるようになる

    kotonoko1 kotonoko2 kotonoko3

    前述のように,ビルドしたアプリは英語と日本語対応ということになっている

    kotonoko4

    英語,つまりソース版のNIBを指定しても普通に動くので別にわざわざ拝借する必要はないのかもしれない

    あとコトノコの公式サイトには「ALCがメタ検索を禁止している」と書かれているので意図的にこういう仕様になっているのかもしれない
    自己責任でヨロシク

    英辞郎 on the WEBの利用規約 第4章 禁止事項等の第9条 12項では「アルクグループが指定した方法以外の方法によって、スペースアルクを利用する行為。」が禁止されているが.指定した方法が何かは具体的に示されていない
    検索結果を整形するなどして,ALCの指定したユーザインタフェースを利用しないことを言うのだと思うが,コトノコのネット辞書機能はブラウザそのものなので,SafariやFirefoxでアクセスするのと全く同じだと思う
    あえて問題というならTOPページを表示していないことくらいか?
    でもTOPページから必ずアクセスしなければならないという記述はないし,検索結果のページにも,TOPページに戻らずに新しく検索を行うためのボックスがある
    なので,どーしてもというなら最初に1回だけ検索文字列を空にして検索をかけてTOPページを表示させてやれば問題ないのでは?

Written by h2 in: PC | タグ:

コメントはまだありません »

RSS feed for comments on this post. TrackBack URL

コメントをどうぞ

TheBuckmaker WordPress Themes Webhosting, MP3, AAC & Co