Symfony 3 обрабатывают несколько языков со своими URL - PullRequest
1 голос
/ 06 февраля 2020

Привет. Я пытаюсь добавить поддержку нескольких языков в свое приложение symfony, так как 3 дня безуспешно.

Я хочу обрабатывать URL-адреса в зависимости от предпочтений локали пользователя и добавлять ссылку для переключения языка, когда не вошел в систему .

Все, что я пробовал, не работало, наверное, я делаю что-то не так.

Я хочу изменить два языка: французский и английский sh. myapp.com/fr/contactez-nous и myapp.com/en/contact-us, например.

app / config / config.yml

parameters:
    locale: fr
framework:
    translator: { fallbacks: ["%locale%"] }
    default_locale: '%locale%'

app / config / routing.yml

locale:
    resource: "@StandardBundle/Controller/"
    type: annotation
    requirements:
        _locale: fr|en
    defaults:  { _locale: '%locale%' }

Контроллер

/**
 * @Route("/{_locale}/contactez-nous", name="contact_fr")
 * @Route("/{_locale}/contact-us", name="contact_en")
 */
public function contactAction(){
}

Работает как положено даже на языке переключение с помощью этого в вид моей ветки

{% if app.request.locale == "en" %}
    <a class="nav-link" href="{{ path(app.request.get('_route'), 
    app.request.get('_route_params')|merge({'_locale': 'fr'})) }}">Français</a>
{% else %}
    <a class="nav-link" href="{{ path(app.request.get('_route'), 
    app.request.get('_route_params')|merge({'_locale': 'en'})) }}">English</a>
{% endif %}

Все хорошо, но когда я вхожу в систему с пользователем, языковой стандарт которого en, symfony не применяет никаких изменений.

Вот как мой пользователь вошел в систему

app / config / security.yml

firewalls:
    main:
    pattern: ^/
        anonymous: true
        guard:
            authenticators:
                - guardAuthenticator

src / MyBundle / Ressources / config / services.yml

services:
    guardAuthenticator:
        class: MyBundle\Security\LoginFormAuthenticator
        autowire: true

MyBundle \ Security \ LoginFormAuthenticator

class LoginFormAuthenticator extends AbstractFormLoginAuthenticator
{
    public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
    {
        $user = $token->getUser();
        $idUtil = $user->getId();
        $session->set('_locale', $user->getLocale());
        /*
         * ALSO TRIED THIS
         * but after logged in request is not updated :(
        /*
        $request->setLocale($user->getLocale());
        $session->set('_security_main', serialize($token));
        $session->save();
    }
}

Я попробовал это Создание локали "Липкой" во время сеанса пользователя и многие другие решения, найденные в Google безуспешно.

И когда я выхожу, я перенаправляю здесь

enter image description here

не myapp.com/app_dev.php/fr с ассоциированным контроллером

/**
 * @Route("/{_locale}/", name="home")
 */
public function HomeAction()
{
}

Я должен ввести локаль в адресной строке вручную.

Я буду очень признателен за любую помощь по этому вопросу, и это начнёт сводить меня с ума из-за чего-то такого простого, без всяких рамок, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...