如何在CakePHP3中仅更改前端语言

如何在CakePHP3中仅更改前端语言,cakephp,internationalization,locale,frontend,multilingual,Cakephp,Internationalization,Locale,Frontend,Multilingual,我已经使用I18N和.po文件创建了英语和丹麦语的多语言网站。但是如果我使用I18n::locale()更改语言,它也会更改管理面板的语言。我只想更改前端的语言。请建议 提前感谢。以正确的方式更改区域设置: I18n::locale('da_DK'); 但是如果它也在您的管理面板中更改它,那么问题纯粹是关于您的应用程序是如何构造的以及您在哪里更改区域设置的 例如,如果在AppController中设置区域设置,则所有控制器的区域设置都会更改。有很多方法可以做到这一点。您可以创建一个处理/adm

我已经使用I18N和.po文件创建了英语和丹麦语的多语言网站。但是如果我使用I18n::locale()更改语言,它也会更改管理面板的语言。我只想更改前端的语言。请建议


提前感谢。

以正确的方式更改区域设置:

I18n::locale('da_DK');
但是如果它也在您的管理面板中更改它,那么问题纯粹是关于您的应用程序是如何构造的以及您在哪里更改区域设置的

例如,如果在
AppController
中设置区域设置,则所有控制器的区域设置都会更改。有很多方法可以做到这一点。您可以创建一个处理
/admin
前缀的
AdminController
,并仅为该前缀更改区域设置

    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');
        }
    }
然后确保为
/admin
正确设置了前缀路由,以便可以将所有管理员控制器放入
app/Controller/admin
,并且所有这些控制器都应该扩展
AdminController
,而不是
AppController


我不想更改网站的流量。因此,我在所有前端控制器中使用了18n::locale('en_GB')。这解决了我的问题。

你能告诉我们你如何区分公共行为和管理行为吗?例如,您是否使用前缀!,