我的网站将管理两种语言,法语(默认语言)和荷兰语。在法语中,我认为我不需要在URL中显示语言参数,所以我想只显示荷兰语(例如myapp.com/nl/)。目前我的路由不能正常工作,不确定我是否正确使用lang参数。我是一个新手与CakePHP,所以我做了以下根据文档:
我觉得这里面有一个问题。
<?php if (!$this->request->getParam('lang')) : ?>
<?= $this->Html->link('<i class="fas fa-globe"></i> Nederlands', ['lang' => 'nl'], ['class' => 'btn ms-lg-4 btn-primary btn-sm float-end float-lg-start mt-3 mt-lg-0', 'escape' => false]) ?>
<?php else : ?>
<?= $this->Html->link('<i class="fas fa-globe"></i> Français', ['lang' => ''], ['class' => 'btn ms-lg-4 btn-primary btn-sm float-end float-lg-start mt-3 mt-lg-0', 'escape' => false]) ?>
<?php endif ?>
appController.php
public function beforeFilter(EventInterface $event) {
# We check if we have a language set
if ($this->request->getParam('lang')) {
I18n::setLocale($this->request->getParam('lang'));
} else {
# If we don't have one, we will set the default one (in my case it's French)
I18n::setLocale('fr');
}
}
routes.php
$builder
->connect(
'/',
['controller' => 'pages', 'action' => 'home']
);
$builder
->connect(
'{lang}/',
['controller' => 'pages', 'action' => 'home']
)
->setPersist(['lang']);
$builder
->connect(
'/{lang}/{controller}/{action}/*',
[]
)
->setPatterns([
'lang' => '[a-z]{2}'
])
->setPersist(['lang']);
$builder
->connect(
'/{lang}/{controller}/{action}/{id}',
[]
)
->setPatterns([
'lang' => '[a-z]{2}',
'id' => '\d+'
])
->setPersist(['lang'])
->setPass(['id']);
$builder
->connect(
'/{lang}/{controller}/{action}/{slug}',
[]
)
->setPatterns([
'lang' => '[a-z]{2}',
'slug' => '[a-z0-9-_]+'
])
->setPersist(['lang'])
->setPass(['slug']);
谢谢你的帮助。
1条答案
按热度按时间bjg7j2ky1#
在您的Header.php中试试这个