Cakephp 3.x翻译路线

时间:2016-02-02 03:36:02

标签: cakephp routing internationalization cakephp-3.0

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

domain.com/catalog/products     // english
domain.com/catalogo/productos   // portuguese

两个不同的路由,但调用相同的Plugin / Controller / Action /

我尝试像这样创作:

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

但是,即使我的网站上登录的用户是“pt_BR”,I18n::locale()也会返回默认的“en_US”。 在我的控制器上,相同的功能:I18n::locale()返回正确。

好的,现在让我们想象用__d()“自动”做到这一点是不可能的,我必须用每种语言编写每一条路线(至少目前它只是2)。

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

echo $this->Html->link(
        __d('catalog','inventory'),
        ['plugin'=>'catalog', 'controller' => 'inventory', 'action' => 'index']
    );

1 个答案:

答案 0 :(得分:1)

  

但是,I18n :: locale()返回EVERYTIME的默认值" en_US"即使我登录我网站的用户是" pt_BR"。在我的控制器上,相同的函数:I18n :: locale()返回正确。

听起来像执行订单的问题。在实际设置语言时弄清楚。我现在不确定也没有时间为你查找它,但我认为甚至在应用程序bootstrap.php之前就已经加载了路径。

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