有没有办法转州路线?例如:
domain.com/catalog/products // english
domain.com/catalogo/productos // portuguese两个不同的路由,但调用相同的插件/控制器/操作/
我试着像这样创建:
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条)。
那么,如何根据用户的语言创建链接呢?例如:
echo $this->Html->link(
__d('catalog','inventory'),
['plugin'=>'catalog', 'controller' => 'inventory', 'action' => 'index']
);发布于 2016-02-02 16:31:52
但是,i18n::
()每次都会返回默认的"en_US“,即使登录到我的站点的用户是"pt_BR”也是如此。在我的控制器上,同样的函数: I18n::locale()返回right。
听起来像是执行顺序的问题。去弄清楚语言是什么时候实际设置的。我不确定,我现在也没有心情和时间来帮你查一下,但我认为在应用程序bootstrap.php之前,路线就已经加载了。
根据您实现语言检测的方式,我猜它是在您的路由之后设置的,这就是您最终使用en_US的原因。如果你使用的是语言调度过滤器,我猜它是在路由之后设置的,但是逻辑上是在控制器加载之前设置的。
https://stackoverflow.com/questions/35144596
复制相似问题