В моем проекте есть перевод для шаблонов и маршрутов.когда локаль установлена, переводы работают, за исключением того, что параметр локали в ссылках неверен.мой язык по умолчанию - NL.так что у меня есть страница www.website.com/nl/contact
, когда я переключаюсь на язык fr, я перехожу на www.website.com/fr/contact
, затем, когда я иду, чтобы посмотреть в исходном тексте HTML, ссылка снова www.website.com/nl/contact вместо www.website.com/fr/contact
поэтому параметр locale в ссылках не обновляется относительно setLocale
my module.php
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$eventManager->attach(
\Zend\Mvc\MvcEvent::EVENT_DISPATCH_ERROR,
function ($e) {
$application = $e->getApplication();
$match = $application->getMvcEvent()->getRouteMatch();
if (null === $match) {
$params = [
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Index',
'action' => 'not-found',
// Here you can add common params for your application routes
];
$viewModel = $e->getViewModel();
$viewModel->setTemplate('layout/website');
$routeMatch = new RouteMatch($params);
$routeMatch->setMatchedRouteName('home');
$application->getMvcEvent()->setRouteMatch(
$routeMatch
);
}
}
);
$moduleRouteListener = new ModuleRouteListener();
if (!$e->getRequest() instanceof ConsoleRequest) {
$this->setLanguage($e);
$eventManager->attach('route', array($this, 'onPreRoute'), 100);
$moduleRouteListener->attach($eventManager);
$this->initAcls($e);
if (isset($_SERVER['APP_ENV']) and $_SERVER['APP_ENV'] == 'production') {
$eventManager->attach('finish', array($this, 'outputCompress'), 100);
}
}
}
private function setLanguage($e)
{
$redirectBase = $e->getRequest()->getServer()->get('REDIRECT_BASE');
$requestUri = $e->getRequest()->getServer()->get('REQUEST_URI');
$cmsString = substr($requestUri, strlen($redirectBase), 4);
$language = 'nl';
$routeTranslation = true;
if ($requestUri != '/') {
$language = substr($requestUri, 1, 2);
}
if ($cmsString == 'cms/') {
$language = 'en-us';
$routeTranslation = false;
}
$translator = $e->getApplication()->getServiceManager()->get('MvcTranslator');
$translator->setLocale($language);
if ($routeTranslation) {
$translator->addTranslationFile('PhpArray', __DIR__.'/../language/Routes/' . $language . '.php', 'default', $language);
}
}
public function onPreRoute($e)
{
$app = $e->getTarget();
$serviceManager = $app->getServiceManager();
$serviceManager->get('router')->setTranslator($serviceManager->get('MvcTranslator'));
}