2009-05-27 6 views
0

J'ai quelques questions à propos de cakePHP, j'ai passé beaucoup de temps à googler pour trouver une solution et comme je n'en ai trouvé aucun, je ne suis pas sûr de prendre la bonne approche.CakePHP helpers et i18n

Donc, j'ai un menu/plan du site qui fait partie statique (fichier xml - i10n) et une partie dynamique (base de données i18n)

m'a demandé de mettre en cache le menu afin que:

  1. un composant crée un fichier xml cache du menu entier pour chaque langue si elle n'existe pas

  2. une aide crée un cache html formaté à partir du fichier XML créé à partir du composant

  3. La mise en page utilise l'aide pour ajouter le menu dans la page

Questions:

  • Comment puis-je obtenir la liste des langues disponibles de l'aide et de la composante?

  • Est-ce

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

    la bonne façon d'obtenir la langue réelle?

  • Si j'importer les aides/composant dans le app_controller au lieu de les taper dans chaque contrôleur

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

je reçois un call to undefined object $html pour la echo $html->charset(); dans la mise en page

ne peut pas comprendre pourquoi ...

+0

Je ne connais pas le problème L10n, mais la raison pour laquelle vous obtenez le "$ html non défini" est que vous avez écrit $ helpers = array ('menuCache'); Par défaut, le gâteau met aussi HtmlHelper, vous devez le faire aussi (et Javascript et d'autres que vous utilisez). c'est-à-dire $ helpers = array ('Html', 'Javascript', 'menuCache', etc ...); –

Répondre

3

Vous pouvez utiliser Configure::read('Config.language'). Une partie du livre de recettes CakePHP indique:

L'environnement local actuel est la valeur actuelle de Configure :: read ('Config.language'). La valeur de Config.language est assignée dans la classe L10n - à moins qu'elle ne soit déjà définie.

I18n, la classe responsable de la traduction à l'aide __(), utilise Config.language, sauf si vous le remplacer dans bootstrap.php, cette variable contient la langue sélectionnée. En fait, même si vous le remplacez, il contiendra toujours la langue utilisée (il peut y avoir des incohérences car I10n n'est pas vraiment conscient du changement mais je n'en ai jamais rencontré). Pour obtenir la liste des langues, vous pouvez utiliser L10n::catalog(). Cependant, je ne suis pas sûr que ce soit ce que vous recherchez, car il répertorie toutes les langues que CakePHP connaît, pas seulement les langues qui ont réellement une traduction en app/locale.