Symfony2 locale nel percorso

Ho seguito Symfony2 doc http://symfony.com/doc/2.0/book/translation.html#the-locale-and-the-url e aggiunto locale per i miei percorsi. Ma, non riesco a trovare il modo di portare locale attraverso percorsi come ho posto {{ path(‘myroute’) }} in twig template, ma il locale diventa sempre fallback valore invece di prendere l’attuale locale.

Ho provato {{ path(‘myroute’, {‘_locale’: _locale}) }} ma ho ottenuto l’errore “Variabile “_locale” non esiste”.

Qualche idea?

InformationsquelleAutor umpirsky | 2011-04-27



4 Replies
  1. 12

    Fisso con {{ path('address', {'_locale': app.request.attributes.get('_locale')}) }} grazie a questo thread http://www.mail-archive.com/[email protected]/msg34838.html.

    • Come ottenere il _locale ‘default’ ? {‘_locale’: defaults_locale } ? Perché l’inglese è impostato come questo nei miei parametri di routing: prefisso: /{_locale} default: _locale: it
    • Temo di non capire la tua domanda. Si prega di prendere in considerazione per spiegare meglio o di aprire una nuova domanda con la descrizione dettagliata del problema.
  2. 6

    In Symfony2.1 il locale è memorizzato nella richiesta, quindi devi usare questo:

    {{ path('address', {'_locale': app.request.locale}) }}
  3. 3

    Due pagine:

    localhost.lo/xx/su

    localhost.lo/xx/hello/{name}

    dove xx – diverse impostazioni locali descritto nel routing.yml

    — routing.yml

    home:
      resource: "@JetInformBundle/Resources/config/routing.yml"
      prefix: /{_locale}
      requirements:
        _locale: ^en|de|ru|uk|pl$

    — JetInformBundle di routing.yml

    hello:
      pattern:  /hello/{name}
      defaults: { _controller: JetInformBundle:Default:index, name: 'alexander' }
    
    about:
      pattern:  /about
      defaults: { _controller: JetInformBundle:Default:about }

    — DefaultController.php

    <?php
    
    namespace Jet\InformBundle\Controller;
    
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
    use Symfony\Component\HttpFoundation\Request;
    
    class DefaultController extends Controller
    {
        public function indexAction($name, Request $request)
        {
            return $this->render('JetInformBundle:Default:index.html.twig',
                                 array('name' => $name, 'matches' =>     $this->matchAction($request)));
        }
    
        public function aboutAction(Request $request)
        {
            return $this->render('JetInformBundle:Default:about.html.twig',
                                  array('matches' => $this->matchAction($request)));
        }
    
        protected function matchAction(Request $request)
        {
            return $this->get('router')->match($request->getRequestUri());
        }
    }

    — indice.html.twig

    {% extends '::base.html.twig' %}
    
    {% block body %}
    <h1>{{ 'hello.name'|trans }} {{ name }}!</h1>
    <h3>{{ 'your.locale'|trans }} [{{ app.request.get('_locale') }}]</h3>
    
    {% include 'JetInformBundle:Default:locales.html.twig'
                with {
                    'uripath': 'hello',
                    'params': {
                        'name': app.request.get('name')
                    }
                }
    %}
    
    {% include 'JetInformBundle:Default:matches.html.twig'
                with { 'matches': matches } %}
    
    <div>
        <p>{{ 'return.to'|trans }} <a href="{{ path('about', { '_locale': app.request.get('_locale') }) }}">About</a></p>
    </div>
    {% endblock %}

    — circa.html.twig

    {% extends '::base.html.twig' %}
    
    {% block body %}
    <h1>{% trans %}about.page{% endtrans %}</h1>
    <h3>{% trans %}your.locale{% endtrans %} [{{ app.request.get('_locale') }}]</h3>
    
    {% include 'JetInformBundle:Default:locales.html.twig'
                with { 'uripath': 'about', 'params': {}} %}
    
    {% include 'JetInformBundle:Default:matches.html.twig'
                with { 'matches': matches } %}
    
    <div>
        <p>{% trans%}return.to{% endtrans%} <a href="{{ path('hello', { 'name': app.request.get('name'), '_locale': app.request.get('_locale') }) }}">Hello</a></p>
    </div>
    {% endblock %}

    — locale.html.twig

    {% if not params %}
        {% set params = {} %}
    {% endif %}
    
    <div class="langs">
        <ul>
            <li>
                {% if app.request.get('_locale') == 'ru' %}
                    Русский
                {% else %}
                    <a href="{{ path(uripath, params|merge({ '_locale': 'ru' })) }}">Русский</a>
                {% endif %}
            </li>
            <li>
                {% if app.request.get('_locale') == 'en' %}
                    English
                {% else %}
                    <a href="{{ path(uripath, params|merge({ '_locale': 'en' })) }}">English</a>
                {% endif %}
            </li>
            <li>
                {% if app.request.get('_locale') == 'uk' %}
                    Украiнська
                {% else %}
                    <a href="{{ path(uripath, params|merge({ '_locale': 'uk' })) }}">Украiнська</a>
                {% endif %}
            </li>
            <li>
                {% if app.request.get('_locale') == 'de' %}
                    Deutsch
                {% else %}
                    <a href="{{ path(uripath, params|merge({ '_locale': 'de' })) }}">Deutsch</a>
                {% endif %}
            </li>
            <li>
                {% if app.request.get('_locale') == 'pl' %}
                    Polish
                {% else %}
                    <a href="{{ path(uripath, params|merge({ '_locale': 'pl' })) }}">Polish</a>
                {% endif %}
            </li>
        </ul>
    </div>

    — partite.html.twig

    <h5>Matches</h5>
    <ol>
    {% for key, value in matches %}
        <li>{{ key }} : {{ value }} </li>
    {% endfor %}
    </ol>
    • requisiti non importati percorso (risorsa) … quindi prestare attenzione che il locale può essere qualsiasi cosa per queste rotte !

Lascia un commento