新しいRamazeでのLocalize
新しいRamazeのLocalizeを,毎回l('foo')とかやるの面倒なので,何とか昔のように使いたい,ということでその方法.
Innateの説明に,昔のDispatcherはCurrentとかで何とかできるから必要ない,という説明があるのでその代替を探す.最初はself.action_foundとか置き換えてたんだけど特異メソッドの関係とかで上手く行かなかった.結局の所,actionの呼び出しに処理を挟めればいいので組み込みhelperになっているaspectを使う.
class MainController < Controller ... alias :raw_wrap_action_call :wrap_action_call def wrap_action_call(action, &block) response = raw_wrap_action_call(action, &block) localize(response) end ... end
デフォルトのwrap_action_callはAction#renderで使われていて,返り値としてビューを処理した結果(文字列)が返ってくるので,後はこれをlocalizeしてやればいい.Ramazeのspecを見ると,Localizeはlocalizeで一対一のマッピングをやってるように見えるけど,ソースを読めば{foo}と書かれてるやつを一括で置換してくれる機能もあるので,これで昔のように行える.
正直これでいいのかは分かってない.Ramaze bookのほかにInnateの詳しい説明も欲しい所なんだけども…
そういえば,Manveruが使っているドキュメントのフォーマットってあれなんなんだろう?RDocってあんな書き方できたっけ?
追記
ドキュメントのフォーマットについてyharaさんに教えてもらいました.俺としてはRDocよりもYARDの方が好きだったり.しかし,開発が2008年で止まってるけど,それだけ安定しているということか?
追追記
とりあえずこの方法で昔のままだったlocalizeのサンプル書き直してpullお願いしたらマージしてもらえた.ということはこの方法でいいっぽい?