2009-05-27 14 views
0

Ich habe ein paar Fragen über CakePHP, ich verbrachte lange Zeit Googeln für eine Lösung und da ich keine gefunden habe, bin ich mir nicht sicher, ob ich den richtigen Ansatz nehme.CakePHP Helfer und i18n

So habe ich ein Menü/Sitemap, die einen Teil statisch (xml-Datei - i10n) und Teil dynamisch (Datenbank i18n)

Ich bin gebeten worden, um das Menü zu cachen, so dass:

  1. A-Komponente erstellt eine Cache-xML-Datei des gesamten Menüs für jede Sprache, wenn es nicht

  2. ein Helfer erstellt aus der xML-Datei aus der Komponente

  3. erstellt formatiert einen Cache html existiert
  4. Das Layout verwendet die Helfer das Menü in der Seite

Fragen hinzufügen:

  • Wie bekomme ich die Liste der verfügbaren Sprachen aus dem Helfer und von der Komponente?

  • Ist der

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

    der richtige Weg, um die tatsächliche Sprache zu bekommen?

  • Wenn ich die Helfer/Komponente in dem app_controller importieren, anstatt sie in jedem Controller

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

ich ein call to undefined object $html für die echo $html->charset(); im Layout erhalte eingeben

kann nicht verstehen, warum ...

+0

Ich weiß nicht über das L10n Problem, aber der Grund, warum Sie den "undefinierten $ html" bekommen, ist, weil Sie $ helpers = array ('menuCache') geschrieben haben; Standardmäßig stellt cake HtmlHelper ebenfalls dort hin, Sie müssen es auch tun (und Javascript und andere, die Sie verwenden). h. $ helpers = array ('Html', 'Javascript', 'menuCache', etc ...); –

Antwort

3

Sie können Configure::read('Config.language') verwenden. Ein Teil des CakePHP-Kochbuchs lautet:

Das aktuelle Gebietsschema ist der aktuelle Wert von Configure :: read ('Config.language'). Der Wert von Config.language wird in der L10n-Klasse zugewiesen - es sei denn, es ist bereits festgelegt.

I18n, die Klasse verantwortlich für die Übersetzung mit __() verwendet Config.language so, wenn Sie es in bootstrap.php außer Kraft setzen, dass Variable enthält die ausgewählte Sprache. Tatsächlich, selbst wenn Sie es überschreiben, wird es immer noch die verwendete Sprache enthalten (es könnte Inkonsistenzen geben, da I10n die Änderung nicht wirklich kennt, aber ich nie auf irgendwas stieß). Um eine Liste von Sprachen zu erhalten, können Sie L10n::catalog() verwenden. Ich bin mir nicht sicher, ob es das ist, was Sie suchen, da es alle Sprachen auflistet, die CakePHP kennt, nicht nur die Sprachen, die tatsächlich eine Übersetzung in app/locale haben.