【问题标题】:How to change only frontend language in Cakephp 3如何在 Cakephp 3 中仅更改前端语言
【发布时间】:2017-06-13 00:11:09
【问题描述】:

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

提前致谢。

【问题讨论】:

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

标签: cakephp internationalization locale frontend multilingual


【解决方案1】:

我不想改变我网站的流程。所以我在所有前端控制器中都使用了 18n::locale('en_GB') 。这解决了我的问题。

【讨论】:

    【解决方案2】:

    以您的方式更改语言环境是正确的:

    I18n::locale('da_DK');
    

    但如果它也在您的管理面板中更改它,那么问题纯粹是关于您的应用程序的结构以及您在哪里更改区域设置。

    例如,如果您在AppController 中设置区域设置,那么它将针对所有控制器进行更改。有很多方法可以做到。您可以创建一个 AdminController 来处理 /admin 前缀,并仅为该前缀更改语言环境。

        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

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

    【讨论】:

      猜你喜欢
      • 2016-04-06
      • 1970-01-01
      • 2015-03-28
      • 2022-04-11
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多