Symfony2 default locale in routing

前端 未结 12 2159
猫巷女王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 05:15

    This is what I use for automatic locale detection and redirection, it works well and doesn't require lengthy routing annotations:

    routing.yml

    The locale route handles the website's root and then every other controller action is prepended with the locale.

    locale:
      path: /
      defaults:  { _controller: AppCoreBundle:Core:locale }
    
    main:
      resource: "@AppCoreBundle/Controller"
      prefix: /{_locale}
      type: annotation
      requirements:
        _locale: en|fr
    

    CoreController.php

    This detects the user's language and redirects to the route of your choice. I use home as a default as that it the most common case.

    public function localeAction($route = 'home', $parameters = array())
    {
        $this->getRequest()->setLocale($this->getRequest()->getPreferredLanguage(array('en', 'fr')));
    
        return $this->redirect($this->generateUrl($route, $parameters));
    }
    

    Then, the route annotations can simply be:

    /**
     * @Route("/", name="home")
     */
    public function indexAction(Request $request)
    {
        // Do stuff
    }
    

    Twig

    The localeAction can be used to allow the user to change the locale without navigating away from the current page:

    {{ targetLanguage }}
    

    Clean & simple!

提交回复
热议问题