0

私はcakePHPについていくつか質問があります。私は解決策をグーグルで検索することに長い時間を費やしましたが、何も見つからなかったため、正しいアプローチを取っているかどうかわかりません。

したがって、一部が静的(xmlファイル-i10n)で一部が動的(データベースi18n)のメニュー/サイトマップがあります。

次のようにメニューをキャッシュするように求められました。

  1. コンポーネントが存在しない場合、コンポーネントは各言語のメニュー全体のキャッシュxmlファイルを作成します

  2. ヘルパーは、コンポーネントから作成されたxmlファイルからフォーマットされたキャッシュHTMLを作成します

  3. レイアウトはヘルパーを使用してページにメニューを追加します

質問:

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

  • これは

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

    実際の言語を取得する正しい方法は?

  • 各コントローラーにヘルパー/コンポーネントを入力する代わりに、app_controllerにヘルパー/コンポーネントをインポートした場合

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

レイアウトでcall to undefined object $htmlのを取得しますecho $html->charset();

理由がわからない...

4

1 に答える 1

3

を使用できますConfigure::read('Config.language')。CakePHPクックブックの一部には次のように記載されています。

現在のロケールは、Configure :: read('Config.language')の現在の値です。Config.languageの値は、すでに設定されていない限り、L10nクラスで割り当てられます。

__()を使用した翻訳を担当するクラスであるI18nは、でConfig.languageオーバーライドしない限りbootstrap.php、その変数に選択された言語が含まれていることを使用します。実際には、オーバーライドしても、使用されている言語が含まれています(I10nは変更を実際に認識していないため、矛盾がある可能性がありますが、遭遇したことはありません)。

言語のリストを取得するには、を使用できますL10n::catalog()。それがあなたが何を求めているのかはわかりませんが、実際に翻訳されている言語だけでなく、CakePHPが知っているすべての言語がリストされているためapp/localeです。

于 2009-05-29T07:41:02.183 に答える