0

J'ai créé le site web multilingue en anglais et en langue danoise et en utilisant I18N .po fichier. Mais si je change la langue en utilisant I18n :: locale() cela change aussi la langue du panneau d'administration. Je veux changer la langue de frontend seulement. Veuillez suggérer.Comment changer seule langue frontend dans CakePHP 3

Merci d'avance.

+2

Pouvez-vous nous dire comment vous différez les actions publiques avec des actions d'administration? utilisez-vous un préfixe par exemple!, –

Répondre

3

modification des paramètres régionaux la façon dont vous le faire est correct:

I18n::locale('da_DK'); 

Mais si cela change dans votre panneau d'administration aussi, la question est purement sur la façon dont votre application est structuré et où vous êtes changer les paramètres régionaux.

Si vous définissez les paramètres régionaux dans AppController par exemple, il va changer pour tous les contrôleurs. Il y a plusieurs façons de le faire. Vous pouvez créer un AdminController qui gère un préfixe /admin, et modifie les paramètres régionaux juste pour ce préfixe.

namespace App\Controller\Admin; 

    use App\Controller\AppController; 
    use Cake\Event\Event; 
    use Cake\I18n\I18n; 

    /** 
    * Application Controller for `admin` prefixed controllers. 
    * 
    * All controllers within the `app/Controller/Admin` directory should extend this 
    * controller rather than the normal `AppController`. 
    */ 
    class AdminController extends AppController 
    { 

     public function beforeFilter(Event $event) 
     { 
      parent::beforeFilter($event); 

      I18n::locale('en_GB'); 
     } 
    } 

Ensuite, vous assurer que vous avez correctement mis en place un itinéraire de préfixe pour /admin de sorte que vous pouvez mettre tous vos contrôleurs admin dans app/Controller/Admin, et tous les contrôleurs devraient étendre AdminController au lieu de AppController.

https://book.cakephp.org/3.0/en/development/routing.html#prefix-routing

0

Je ne voulais pas changer le flux de mon site. J'ai donc utilisé 18n :: locale ('en_GB') dans tous mes contrôleurs frontaux. Cela a résolu mon problème.