CakePHP-Fr.Org

Forum francophone du Framework CakePHP

Vous n'êtes pas identifié.

#1 23-03-2012 10:51:16

avairet
Chef Pâtissier
Date d'inscription: 25-06-2008
Messages: 1320

Plugin i18n de CakeDC ne fonctionne pas...

Salut,

Décidément, en ce moment, j'ai vraiment des soucis avec les plugins...

Cette fois, c'est le plugin i18n de CakeDC que j'essaie de mettre en place pour faire mon routing avec langue.

J'ai réalisé la même config que celle préconisée par real34 ici :
http://bin.cakephp.org/view/1339987040

Et bien, quelle que soit l'url que je saisisse avec un paramètre de langue, j'obtiens systématiquement un "missing controller" !?

Par exemple : "http://www.monsite.com/fre" ou "http://www.monsite.com/fr" pour accéder à la home, "Error : Fr (ou Fre) controller not found"

Idem avec une simple action CRUD comme "http://www.monsite.com/fre/users/index"...

Idem si je mets "eng" ou "en" qui est la valeur de ma constante "DEFAULT_LANGUAGE"...

Avez-vous déjà rencontré ce problème ?
Faut-il redéfinir le schéma de base d'une url dans routes ? Genre "/:lang/:controller/:action" avec le 'routeClass' => 'I18nRoute' ? Pourtant c'est indiqué nulle part dans les docs liées au plugin.

Environnement :
- cake 1.3.14
- PHP 5.3.8
- Win XP
- version 1.1 du plugin

Hors ligne

 

#2 23-03-2012 18:30:35

Kalt
Cooker
Lieu: Caen
Date d'inscription: 27-06-2008
Messages: 1257
Site web

Re: Plugin i18n de CakeDC ne fonctionne pas...

Salut Avairet

Je vais essayer de te lister ce que j'ai du définir dans une appli en 1.3.14 pour le plugin i18n :

config/bootstrap.php :

Code: php

  1. Configure::write('Config.languages', array(
  2.   'fre',
  3.   'eng'
  4. ));
  5. Configure::write('Config.language', 'fre');
  6. define('DEFAULT_LANGUAGE', 'fre');

config/routes.php :

Code: php

  1. App::import('Lib', 'I18n.I18nRoute');
  2. Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'), array('routeClass' => 'I18nRoute'));

Et TOUTES mes autres routes ont comme 3ème argument array('routeClass' => 'I18nRoute') sauf celle qui envoie sur l'admin.

Je ne me souviens pas d'autres réglages en particulier, tiens moi au jus.


Formation CakePHP : utilisation du framework au jour le jour.

Hors ligne

 

#3 23-03-2012 18:32:23

Kalt
Cooker
Lieu: Caen
Date d'inscription: 27-06-2008
Messages: 1257
Site web

Re: Plugin i18n de CakeDC ne fonctionne pas...

Et non je n'ai pas réécrit la route par défaut pour mettre :lang, ça le fait tout seul.

Mes urls dans la langue par défaut ne comportent pas la langue, les autres sont du style /eng/controller et pas /en/controller


Formation CakePHP : utilisation du framework au jour le jour.

Hors ligne

 

#4 25-03-2012 14:44:55

avairet
Chef Pâtissier
Date d'inscription: 25-06-2008
Messages: 1320

Re: Plugin i18n de CakeDC ne fonctionne pas...

Salut Kalt,

Merci d'avoir répondu ! En fait, via le chan irc officiel, j'ai trouvé d'où venait la faille...
Dans mon bootstrap, j'avais deux éléments qui faisaient foirer le plugin et le i118nRoute :

Voici ce que j'avais :

Code: php

  1. Configure::write('Config.languages', array(
  2.   'fre' => __('French', true)
  3.   'eng' => __('English', true)
  4. ));
  5.  
  6. // et
  7.  
  8. Configure::write('Config.language', 'eng');

En fait j'avais ces deux trucs car ils me servaient pour un helper perso, utilisé pour internationaliser mes formulaires en générant automatiquement les champs pour chaque langue.
Mais visiblement, ils font planter le plugin...

Et en plus, il ne faut pas reprendre la langue par défaut dans les variables !
Donc voici ce qu'il convient de faire dans bootstrap pour que le routing i18n fonctionne parfaitement :

Code: php

  1. define('DEFAULT_LANGUAGE', 'eng'); // Uniquement la langue par défaut
  2. Configure::write('Config.languages', array('fre')); // Ici uniquement les autres langues dispos, pas celle pas celle par défaut

Et ne surtout pas ajouter : Configure::write('Config.language', 'eng'); Ceci est géré automatiquement par le plugin !

A noter que vous pouvez sans problème utiliser des codes langues à 2 lettres (fr au lieu de fre), le routing va fonctionner et toutes vos traductions faites avec le TranslateBehavior vont suivre, même si dans votre table i18n vous avez "fre" comme locale. C'est tout de même plus "propre" d'avoir une url contenant "/fr/" que "/fre"... enfin peut-être juste une question de goût ?!
Je dois juste tester maintenant pour les fichier .po, pour voir si on peut les laisser dans un répertoire avec une locale à 3 lettres ou si on doit utiliser un répertoire à 2 lettres. Je vous tiens au courant !

Hors ligne

 

#5 26-03-2012 11:13:37

avairet
Chef Pâtissier
Date d'inscription: 25-06-2008
Messages: 1320

Re: Plugin i18n de CakeDC ne fonctionne pas...

Je dois juste tester maintenant pour les fichier .po, pour voir si on peut les laisser dans un répertoire avec une locale à 3 lettres ou si on doit utiliser un répertoire à 2 lettres.

J'ai fait quelques tests, apparemment c'est bon, on peut laisser un nom de répertoire à 3 lettres !

A noter que vous pouvez sans problème utiliser des codes langues à 2 lettres (fr au lieu de fre), le routing va fonctionner et toutes vos traductions faites avec le TranslateBehavior vont suivre, même si dans votre table i18n vous avez "fre" comme locale.

Attention, pour cette affirmation, il faut bien identifier toutes les méthodes ou vues qui utiliseraient Configure::read('Config.languages'); car il peut y avoir des soucis de conversion 2 lettres > 3 lettres...

Si vous ne voulez pas vous prendre la tête, alors il vaut mieux laisser un code langue à 3 lettres dans les urls.

Hors ligne

 

Pied de page des forums

Propuls� par FluxBB
Traduction par FluxBB.fr