Ticket #18668

Smarty の delimiter を変更して使っていると i18n コマンドで正常にテンプレートの解析ができない

Open Date: 2009-09-13 02:39 Last Update: 2009-10-17 02:27

Reporter:
Owner:
Type:
Status:
Closed
Component:
MileStone:
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
None

Details

ethna i18n を実行時です

Ethna で Smarty の delimiter などを変更する場合,APPID_ViewClass::_setDefault などで

    function _setDefault(&$renderer)
    {
        $smarty = $renderer->engine;
        $smarty->left_delimiter = '{{';
        $smarty->right_delimiter = '}}';
    }  
などとするのが一般的な方法だが,ここでの変更を Plugin/Genterator/I18N.php が見ていないため(_analyzeTemplate),JavaScript などで { } が直接含まれるテンプレートを読み込むと Smarty のコンパイルに失敗する.

Ticket History (3/9 Histories)

2009-09-13 02:39 Updated by: sotarok
  • New Ticket "Smarty の delimiter を変更して使っていると i18n コマンドで正常にテンプレートの解析ができない" created
2009-09-13 02:40 Updated by: sotarok
  • Details Updated
2009-09-13 06:24 Updated by: mumumu-org
  • Owner Update from (None) to mumumu-org
Comment

この問題を根本的に解決するには、デリミタを設定する流儀を固定する必要があると考えます。 その理由の詳細は以下の2点です。

1. デリミタを変更した状態でi18nコマンドを実行し、Smartyがコンパイルエラーを出さないためには、$smarty 変数にデリミタの設定を教えてあげる必要があります。
2. 御存知の通り、現行のEthnaではこれを実行時に設定するのが一般的で、それを理論上はどこで呼び出してもよいために、i18nコマンドのGeneratorから、デリミタの変更している関数としてどこを呼び出したらよいのか判別できません。
このことから、デリミタを設定する箇所が固定化されていれば i18n のGeneratorはそれを読み取って設定することができます。これについては議論が必要と思いますが、とりあえず以下のような考え方はできると思います。
1. View Class の _setDefault 関数を呼び出させて設定させる
2. config で設定させる
3. その他の場所で設定させる
これらのうちの1点にSmartyの設定の流儀がまとまるのであれば、本件を修正することができると思います。

2009-09-13 06:37 Updated by: mumumu-org
Comment
これらのうちの1点にSmartyの設定の流儀がまとまるのであれば、本件を修正することができると思います。

これは厳密にいうと正しくありません。複数の流儀があっても構わないと思いますが、それを明確にする必要がある、ということです。明確であれば、Generator側でその複数のデリミタ設定方法をトライさせることができます。

2009-09-13 12:56 Updated by: sotarok
Comment

その通りです. で,Smarty の設定って何処に書く?というのは以前からわりと課題で,現状 _setDefault で書くのが主流になってますが,「ここに設定書いておけばフレームワークが設定します」というものは確かに用意するべきかもしれないなあ,とは思っていました.

現状の枠組みで行くなら,個人的には 2 だと思います('renderer' という項目をつくる,かな?)が,いかがでしょう?

2009-09-14 12:26 Updated by: mumumu-org
Comment

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. を修正すれば本件は自ずと修正されるはずです

2009-09-15 13:52 Updated by: mumumu-org
  • Resolution Update from None to Fixed
Comment

本件を修正しました。diffは以下の通りです。宜しくお願いします。

http://git.sourceforge.jp/view?p=ethna/ethna.git;a=commitdiff;h=76d83255057b2ff753e083b3dd1ee1109d34c41b

2009-10-10 14:32 Updated by: sotarok
  • Milestone Update from 2.5.0p6 (deleted) to 2.6.0
2009-10-17 02:27 Updated by: mumumu-org
  • Ticket Close date is changed to 2009-10-17 02:27
  • Status Update from Open to Closed

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login