Salut tous le monde, j'utilise depuis le debut de sa sortie cakephp3 et ce framework est génial, mais je suis devant un problème que je n'arrive pas a resoudre. L'internationalisation de mon projet. malgré la doc bien fournie et les explications je n'ai pas trop compris comment je peut sété mes éléments a traduire et comment je doit m'y prendre pour les routes de mon application

2 réponses


Xeta
Réponse acceptée

Salut.
Perso je ne fait rien avec les routes, je fonctionne avec les sessions et la base de données. Après expliquer comment faire un système d'internationalisation, va prendre un peut de temps, car ça demande de faire pas mal de petit trucs. Mais je vais essayer.

Déjà, je vais me basé sur un projet perso qui intègre ce système et qui est open-source, ça va faliciter l'expliquation et pour toi, la compréhension.
Le projet : https://github.com/Xety/Xeta

Il faut déjà commencer par la configuration que tu trouveras ici, cette configuration va nous servir pour faire un menu avec les langues disponibles, comme ceci :


Puis, comme tu peux le voir dans ce code, j'ai une route nommé set-lang, cette route sert tout simplement à switcher de language, tu trouveras le code de la route ici elle prend un param :lang qui défini la nouvelle langue à utiliser par défaut.
Maintenant, il faut qu'on définisse l'action dans le controller Page (ou un autre comme tu veux) :

/**
  * Redirect to the referer.
  *
  * @return void
  */
public function lang()
{
    $this->redirect($this->referer());
}

Oui c'est bizarre mais je ne fait strictement rien dans action mis à part le rediriger sur la page où il étais avant. Je pense que tu te pose la question de comment je switch de langue alors? ^^
Voici la réponse, en faite j'ai une classe uniquement réservé pour ça, et cette classe est appelé à chaque requête sur le site., Donc pour l'appeler à chaque requête, il faut la définir dans l'AppController, comme ceci. Maintenant, voici la classe en question , c'est elle qui fait toute la logique de switch de la langue. Elle est assez bien documenté, mais j'utilise aussi la base de données en plus des cookies c'est pour cella qu'elle est assez "grosse". Avec juste un système de cookie, il y a moyen de faire bien plus simple.

Une dernière chose, Cake3 intègre un middleware par défaut qui te permet de sélectionner la langue automatiquement par rapport au header du client et qui est définit dans l'Appplication.php ici.

Et pour finir, il faut bien sûr que tu utilises les fonctions d'internationalisation dans ton code comme __(), __d(), __x() et j'en passe. Tu trouveras toutes ces fonctions sur la doc de Cake dans la rubrique Internationalisation. Et après il faut que tu extrais ces phrase avec la console de Cake, tu trouveras de la doc sur çaici. Et pour finir, il faut traduire ces fichiers, et pour cela, tu as le magnifique POEdit.

Voilà, tu as tout se qu'il te faut pour faire un beau système d'internationalisation pour ton site.

Defy
Auteur

Ben merci beaucoup pour tous ca :-) je vais bien lire et prendre le temps de regarder les exemples et ca devrait le faire merci :-)