Smarty の delimiter を変更して使っていると i18n コマンドで正常にテンプレートの解析ができない
この問題を根本的に解決するには、デリミタを設定する流儀を固定する必要があると考えます。 その理由の詳細は以下の2点です。
1. デリミタを変更した状態でi18nコマンドを実行し、Smartyがコンパイルエラーを出さないためには、$smarty 変数にデリミタの設定を教えてあげる必要があります。 2. 御存知の通り、現行のEthnaではこれを実行時に設定するのが一般的で、それを理論上はどこで呼び出してもよいために、i18nコマンドのGeneratorから、デリミタの変更している関数としてどこを呼び出したらよいのか判別できません。このことから、デリミタを設定する箇所が固定化されていれば i18n のGeneratorはそれを読み取って設定することができます。これについては議論が必要と思いますが、とりあえず以下のような考え方はできると思います。
1. View Class の _setDefault 関数を呼び出させて設定させる 2. config で設定させる 3. その他の場所で設定させるこれらのうちの1点にSmartyの設定の流儀がまとまるのであれば、本件を修正することができると思います。
これらのうちの1点にSmartyの設定の流儀がまとまるのであれば、本件を修正することができると思います。
これは厳密にいうと正しくありません。複数の流儀があっても構わないと思いますが、それを明確にする必要がある、ということです。明確であれば、Generator側でその複数のデリミタ設定方法をトライさせることができます。
その通りです. で,Smarty の設定って何処に書く?というのは以前からわりと課題で,現状 _setDefault で書くのが主流になってますが,「ここに設定書いておけばフレームワークが設定します」というものは確かに用意するべきかもしれないなあ,とは思っていました.
現状の枠組みで行くなら,個人的には 2 だと思います('renderer' という項目をつくる,かな?)が,いかがでしょう?
sotarok への返信
で,Smarty の設定って何処に書く?というのは以前からわりと課題で,現状 _setDefault で書くのが主流になってますが,「ここに設定書いておけばフレームワークが設定します」というものは確かに用意するべきかもしれないなあ,とは思っていました. 現状の枠組みで行くなら,個人的には 2 だと思います('renderer' という項目をつくる,かな?)が,いかがでしょう?
様々な設定を appid-ini.php に集めるのが今の開発の方向になっているので、問題ないと思います。 上記については、以下のチケットも関連していると思います。 http://sourceforge.jp/ticket/browse.php?group_id=1343&tid=15792
本件については以下のやり方で修正しようと思います。ツッコミがあれば宜しくお願いします。
1. Smarty の設定を appid-ini.php に書くように修正し、Ethna_Renderer_Smarty.php のコンストラクタでそれを読み込むようにする 2. I18n の Generator は 1. のレンダラから $smarty 変数を取得しているので、1. を修正すれば本件は自ずと修正されるはずです
本件を修正しました。diffは以下の通りです。宜しくお願いします。
ethna i18n を実行時です
Ethna で Smarty の delimiter などを変更する場合,APPID_ViewClass::_setDefault などで
などとするのが一般的な方法だが,ここでの変更を Plugin/Genterator/I18N.php が見ていないため(_analyzeTemplate),JavaScript などで { } が直接含まれるテンプレートを読み込むと Smarty のコンパイルに失敗する.