【发布时间】:2021-12-27 10:55:59
【问题描述】:
我的网站将管理两种语言,法语(默认语言)和荷兰语。 在法语中,我认为我不需要在 URL 中显示语言参数,所以我只想为荷兰语显示它(例如 myapp.com/nl/)。目前我的路线无法正常工作,不确定我是否以正确的方式使用 lang 参数。 我是 CakePHP 的菜鸟,所以我按照文档做了以下操作:
Header.php(我觉得这里有问题……)
<?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']);
感谢您的帮助。
【问题讨论】:
标签: cakephp internationalization cakephp-4.x