首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cakephp 3.x翻译路由

Cakephp 3.x翻译路由
EN

Stack Overflow用户
提问于 2016-02-02 11:36:02
回答 1查看 293关注 0票数 0

有没有办法转州路线?例如:

代码语言:javascript
复制
domain.com/catalog/products     // english
domain.com/catalogo/productos   // portuguese

两个不同的路由,但调用相同的插件/控制器/操作/

我试着像这样创建:

代码语言:javascript
复制
    Router::plugin('Catalog', ['path' => __d('catalog', /catalog']), function ($routes ){
        $routes->connect(__d('catalog','/inventory'),
            ['controller' => 'inventory', 'action' => 'index']
        );
    }

但是,I18n::locale()每次都会返回默认的"en_US“,即使登录到我的站点的用户是"pt_BR”。在我的控制器上,同样的函数:I18n::locale()返回right。

好吧,现在让我们想象一下,用__d()“自动”完成这件事是不可能的,我必须用每种语言编写每条路由(至少目前只有2条)。

那么,如何根据用户的语言创建链接呢?例如:

代码语言:javascript
复制
echo $this->Html->link(
        __d('catalog','inventory'),
        ['plugin'=>'catalog', 'controller' => 'inventory', 'action' => 'index']
    );
EN

回答 1

Stack Overflow用户

发布于 2016-02-02 16:31:52

但是,i18n::

()每次都会返回默认的"en_US“,即使登录到我的站点的用户是"pt_BR”也是如此。在我的控制器上,同样的函数: I18n::locale()返回right。

听起来像是执行顺序的问题。去弄清楚语言是什么时候实际设置的。我不确定,我现在也没有心情和时间来帮你查一下,但我认为在应用程序bootstrap.php之前,路线就已经加载了。

根据您实现语言检测的方式,我猜它是在您的路由之后设置的,这就是您最终使用en_US的原因。如果你使用的是语言调度过滤器,我猜它是在路由之后设置的,但是逻辑上是在控制器加载之前设置的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35144596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档