Symfony2 default locale in routing

前端 未结 12 2160
猫巷女王i
猫巷女王i 2020-12-01 04:41

I have a problem with routing and the internationalization of my site built with Symfony2.
If I define routes in the routing.yml file, like this:

exampl         


        
相关标签:
12条回答
  • 2020-12-01 04:59

    If someone is interested in, I succeeded to put a prefix on my routing.yml without using other bundles.

    So now, thoses URLs work :

    www.example.com/
    www.example.com//home/
    www.example.com/fr/home/
    www.example.com/en/home/
    

    Edit your app/config/routing.yml:

    ex_example:
        resource: "@ExExampleBundle/Resources/config/routing.yml"
        prefix:   /{_locale}
        requirements:
            _locale: |fr|en # put a pipe "|" first
    

    Then, in you app/config/parameters.yml, you have to set up a locale

    parameters:
        locale: en
    

    With this, people can access to your website without enter a specific locale.

    0 讨论(0)
  • 2020-12-01 04:59

    There is my Solution, it makes this process faster!

    Controller:

    /**
     * @Route("/change/locale/{current}/{locale}/", name="locale_change")
     */
    public function setLocaleAction($current, $locale)
    {
        $this->get('request')->setLocale($locale);
        $referer = str_replace($current,$locale,$this->getRequest()->headers->get('referer'));
    
        return $this->redirect($referer);
    }
    

    Twig:

    <li {% if app.request.locale == language.locale %} class="selected" {% endif %}>
        <a href="{{ path('locale_change', { 'current' : app.request.locale,  'locale' : language.locale } ) }}"> {{ language.locale }}</a>
    </li>
    
    0 讨论(0)
  • 2020-12-01 05:04

    You can define multiple patterns like this:

    example_default:
      pattern:   /example
      defaults:  { _controller: ExampleBundle:Example:index, _locale: fr }
    
    example:
      pattern:   /{_locale}/example
      defaults:  { _controller: ExampleBundle:Example:index}
      requirements:
          _locale:  fr|en
    

    You should be able to achieve the same sort of thing with annotations:

    /**
     * @Route("/example", defaults={"_locale"="fr"})
     * @Route("/{_locale}/example", requirements={"_locale" = "fr|en"})
     */
    

    Hope that helps!

    0 讨论(0)
  • 2020-12-01 05:10

    I use annotations, and i will do

    /**
     * @Route("/{_locale}/example", defaults={"_locale"=""})
     * @Route("/example", defaults={"_locale"="en"}, , requirements = {"_locale" = "fr|en|uk"})
     */
    

    But for yml way, try some equivalent...

    0 讨论(0)
  • 2020-12-01 05:10

    Maybe I solved this in a reasonably simple way:

    example:
        path:      '/{_locale}{_S}example'
        defaults:  { _controller: 'AppBundle:Example:index' , _locale="de" , _S: "/" }
        requirements:
            _S: "/?"
            _locale: '|de|en|fr'
    

    Curious about the judgement of the critics ... Best wishes, Greg

    0 讨论(0)
  • 2020-12-01 05:11

    I think you could simply add a route like this:

    example: 
    pattern:  /example 
    defaults: { _controller: ExampleBundle:Example:index } 
    

    This way, the locale would be the last locale selected by the user, or the default locale if user locale has not been set. You might also add the "_locale" parameter to the "defaults" in your routing config if you want to set a specific locale for /example:

    example: 
    pattern:  /example 
    defaults: { _controller: ExampleBundle:Example:index, _locale: fr }
    

    I don't know if there's a better way to do this.

    0 讨论(0)
提交回复
热议问题