Bonjour à tous, j'ai essayé de mettre en place le plugin de CakeDC pour l’internationalisation.

Et rien ne fonctionne. Je n'utilise pas la table parce que je ne veux pas traduire les contenus mais seulement les menus. Donc j'ai générer mon fichier pot et la traduction avec poedit. J'ai fait un teste au préalable en entrant manuellement la langue par defaut et les menus sont bien traduis.

Maintenant j'ai mis en place le plugin et rien ne va. J'ai suivi toutes les instructions à savoir:

bootstrap:

CakePlugin::load('I18n', array('routes' => true));
define('DEFAULT_LANGUAGE', 'eng');
Configure::write('Config.languages', array('fra', 'chi', 'spa', 'rus'));

routes

<?php
App::uses('I18nRoute', 'I18n.Routing/Route');
Router::connect('/', array('controller' => 'events', 'action' => 'index'), array('routeClass' => 'I18nRoute'));
Router::connect('/event/:slug-:id',array('controller'=>'events','action'=>'show'), array('pass'
        => array('id','slug'), 'id'=>'[0-9]+','slug' =>'[a-z0-9\-]+'),array('routeClass' => 'I18nRoute'));
Router::connect('/categorie/:slug',array('controller'=>'events','action'=>'category'), array('pass'
        => array('slug'), 'slug' =>'[a-z0-9\-]+'), array('routeClass' => 'I18nRoute'));

CakePlugin::routes();

AppController

public $helpers = array('Text','Form','Html','Session','Cache','Media.Media','Date','DatePicker','I18n.I18n');

et dans ma vue index j'ai ajouté

<?php echo $this->I18n->flagSwitcher(array('class' => 'languages', 'id' => 'language-switcher')); ?>

Alors j'ai bien les petits drapeaux mais quand je clic dessus la page se recharge mais la langue est toujours la même.

L'un d'entre vous saurait-il m'aider ?

3 réponses


SwithFr
Auteur
Réponse acceptée

Bon finalement plutôt que de passer par l'afterFind, j'ai fais comme n'importe quel autre lien, Html->link et j'ai redéfini la route. Plus simple que de passer par l'afterFind selon moi.

SwithFr
Auteur

En fait il se trouve que j'avais une ligne en trop dans mon bootsrap qui est gérée par le plugin. Après l'avoir enlevée c'est presque bon.

Maintenant tout fonctionne sauf la vue de mes articles. J'ai une action show qui me montre le détail d'un article. ça fonctionnait très bien avant et plus maintenant.

Voici l'erreur

the requested address '/cakephp/events/show/id:1/slug:mon-premier-article/lang:fra'

Alors je pense que la route n'est plus correcte mais heu... pourquoi ?

Ma route:

Router::connect('/event/:slug-:id',array('controller'=>'events','action'=>'show'), array('pass'
        => array('id','slug'), 'id'=>'[0-9]+','slug' =>'[a-z0-9\-]+'),array('routeClass' => 'I18nRoute'));

Ma route n'a pas changée si ce n'est que j'ai ajouté ceci

,array('routeClass' => 'I18nRoute')

Mais je l'ai ajouté partout (il faut bien) et pourtant aucun soucis ailleurs

SwithFr
Auteur

Bon après réflexion en fait mon lien pour accéder à mon action show est généré dans le model:

public function afterFind($data){
        foreach($data as $k=>$d){
            if(isset($d'Event']'slug']) && isset($d'Event']'id']) && isset($d'Event']'type'])){
                $d'Event']'link'] = array(
                    'controller'    => 'events',
                    'action' => 'show',
                    'id' => $d'Event']'id'],
                    'slug' => $d'Event']'slug']
                );
            }
            $data$k] = $d;
        }
        return $data;
    }

Le lien que j'ai dans ma page index

<?php echo $this->Html->url($v'link']); ?>

Est-ce que ça ne serait pas cette fonction afterFind qui ferait planter le lien ?