Manually switch _locale in symfony 4

后端 未结 1 703
野的像风
野的像风 2021-01-24 17:41

I\'m absolutely stuck in getting a solution to manually switch the _locale variable in Symfony 4.

I followed these steps, but now I have absolutely no idea

相关标签:
1条回答
  • 2021-01-24 18:00

    The answer is slightly different from this answer which is not applicable in Symfony 4. Start with editing the services.yaml file in the config directory.

    {# project/config/services.yaml}
    
    # ...
    parameters:
        # ...
        app_locales: [nl_NL, en_EN]
    
    twig:
        # ...
        globals:
            locales: %app_locales%
            # ...
    

    Then add a template to integrate the switch button somewhere in your base template.

    {# 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 %}
    

    And finally integrate this brandnew template in your base template.

    {# project/templates/base.html.twig #}
    
    {% include '_locale_switcher.html.twig' %}
    

    EDIT for Symfony 4.3.4+

    As per the answer of Charles beneath, the locales value in services.yaml file should be inserted with quotes to avoid an unvalid YAML error:

    {# project/config/services.yaml}
    
    # ...
    parameters:
        # ...
        app_locales: [nl_NL, en_EN]
    
    twig:
        # ...
        globals:
            locales: "%app_locales%"
            # ... 
    
    0 讨论(0)
提交回复
热议问题