Вручную переключить _locale в Symfony 4

Я абсолютно застрял в поиске решения для ручного переключения переменной _locale в Symfony 4.

Я следил за эти шаги, но теперь я совершенно не знаю, как сделать простую кнопку переключения в разделе навигации. Я также посмотрел на вопрос это, но это похоже на более старую версию Symfony ..

Может ли кто-нибудь помочь мне выбраться из этой темной дыры и объяснить мне, как я могу интегрировать простую кнопку переключения _locale или, по крайней мере, указать мне правильное направление?

Использование $request->getSession()->set('_locale', 'en'); в кнопке переключателя подойдет вам?

yceruto 30.07.2018 20:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
1 981
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ответ немного отличается от ответа это, который не применим в Symfony 4. Начните с редактирования файла services.yaml в каталоге config.

{# project/config/services.yaml}

# ...
parameters:
    # ...
    app_locales: [nl_NL, en_EN]

twig:
    # ...
    globals:
        locales: %app_locales%
        # ...

Затем добавьте шаблон для интеграции кнопки переключения где-нибудь в вашем базовом шаблоне.

{# project/templates/_locale_switcher.html.twig #}

{% set route = app.request.attributes.get('_route') %}
{% set route_params = app.request.attributes.get('_route_params') %}
{% set params = route_params|merge(app.request.query.all) %}

{# You may want to not print a flag/link for current view, the "if" here let 
you handle it #}

{% for locale in locales if locale != app.request.locale %}

    <li>
        <a href = "{{ path(route, params|merge({ _locale: locale })) }}">
            <img src = "{{ asset('img/flags/' ~ locale ~ '.jpg') }}" alt = "{{ 
locale }}">
        </a>
    </li>

{% endfor %}

И, наконец, интегрируйте этот новый шаблон в свой базовый шаблон.

{# project/templates/base.html.twig #}

{% include '_locale_switcher.html.twig' %}

РЕДАКТИРОВАТЬ для Symfony 4.3.4+

Согласно ответу Чарльза ниже, значение локали в файле services.yaml должно быть вставлено в кавычки, чтобы избежать недопустимой ошибки YAML:

{# project/config/services.yaml}

# ...
parameters:
    # ...
    app_locales: [nl_NL, en_EN]

twig:
    # ...
    globals:
        locales: "%app_locales%"
        # ... 

Вот что у меня работает в последней версии Symfony 4

services.yaml:

parameters:
    locale: 'en'
    app_locales: en|fr

twig:
    globals:
        locales: '%app_locales%'

шаблон языкового стандарта:

{# project/templates/_locale_switcher.html.twig #}

{% set route = app.request.attributes.get('_route') %}
{% set route_params = app.request.attributes.get('_route_params') %}
{% set params = route_params|merge(app.request.query.all) %}

{# You may want to not print a flag/link for current view, the "if" here let
you handle it #}

{% for locale in locales|split('|') %}
    {% if locale != app.request.locale %}
        <li>
            <a href = "{{ path(route, params|merge({ _locale: locale })) }}">
                <img src = "{{ asset('img/flags/' ~ locale ~ '.jpg') }}" alt = "{{ locale }}">
            </a>
        </li>
    {% endif %}
{% endfor %}

Другие вопросы по теме