2009-05-27 18 views
0

私はcakePHPに関するいくつかの質問をしています。私は解決のためにGoogle検索を長時間過ごしましたが、私は正しいアプローチをとっているかどうかわかりません。CakePHPヘルパーとi18n

だから、私は一部の静的(xmlファイル - i10n)でメニュー/サイトマップがあり、一部のダイナミック(データベースI18N)

を私がするようにメニューをキャッシュするように求めてきた:

    それは

  1. 存在しないヘルパーはコンポーネントから作成されたXMLファイルからフォーマットされたキャッシュのhtmlを作成した場合

  2. コンポーネントは、各言語のメニュー全体のキャッシュxmlファイルを作成します

  3. レイアウトは、ページ内に

質問メニューを追加するためのヘルパーを使用しています。

  • 私はヘルパーからとコンポーネントから利用可能な言語のリストを取得するにはどうすればよいですか?

  • は、実際の言語を取得するための正しい方法この

    $this->L10n = new L10n(); $this->L10n->lang 
    

    ですか?

  • 私が代わりに各コントローラ

    class AppController extends Controller { 
        var $components = array('menu', 'otherComponent'); 
        var $helpers = array('menuCache'); 
    
        function beforeFilter(){ 
         $this->menu->doSomething(); 
        } 
    } 
    

でそれらを入力するのapp_controllerでヘルパー/コンポーネントをインポートする場合、私は

が理解できないレイアウトでecho $html->charset();ためcall to undefined object $htmlを取得理由...

+0

L10nの問題についてはわかりませんが、$ helpers = array( 'menuCache')を書いたので、 "未定義の$ html"を取得している理由があります。デフォルトでは、ケーキにもHtmlHelperが置かれています。あなたもそれを行う必要があります(また、あなたが使用するJavascriptなど)。つまり、$ helpers = array( 'Html'、 'Javascript'、 'menuCache'など)。 –

答えて

3

Configure::read('Config.language')を使用できます。

現在のロケールはConfigure :: read( 'Config.language')の現在の値です。 Config.languageの値は、既に設定されていない限り、L10nクラスで割り当てられます。あなたはbootstrap.phpでそれを上書きしない限り

国際化、__()を使用して翻訳を担当するクラスは、その変数は、選択した言語が含まれている、そうConfig.languageを使用しています。実際には、たとえそれを上書きしても、それはまだ使用されている言語を含んでいます(I10nは実際に変更を認識していないので、矛盾するかもしれませんが、

言語のリストを取得するには、L10n::catalog()を使用します。しかし、CakePHPが知っているすべての言語をリストアップしているので、それが実際に翻訳を持っている言語だけでなく、app/localeになっているのではないかと思います。

関連する問題