Параметр локали маршрута ZF3 - PullRequest
0 голосов
/ 23 февраля 2019

В моем проекте есть перевод для шаблонов и маршрутов.когда локаль установлена, переводы работают, за исключением того, что параметр локали в ссылках неверен.мой язык по умолчанию - 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'));
}
...