profileRyan KesPGP keyI build stuffEmailGithubTwitterLast.fmMastodonMatrix

Internationalized Routing

Introduction

Since Symfony 4.1 support for internationalized routes was added.

Syntax

contact:
  controller: App\Controller\ContactController::send
  path:
    en: /send-us-an-email
    nl: /stuur-ons-een-email
use Symfony\Component\Routing\Annotation\Route;

class ContactController
{
    /**
     * @Route({
     *     "en": "/send-us-an-email",
     *     "nl": "/stuur-ons-een-email"
     * }, name="contact")
     */
    public function send()
    {
        // ...
    }
}
/** @var UrlGeneratorInterface $urlGenerator */
// uses the current request locale
$url = $urlGenerator->generate('contact');

// ignores the current request locale and generates '/stuur-ons-een-email'
$url = $urlGenerator->generate('contact', ['_locale' => 'nl']);
// this would also work, but it's not recommended:
// $url = $urlGenerator->generate('contact.nl');
# config/routes/annotations.yaml
site:
  resource: "../src/Controller/"
  type: annotation
  prefix:
    en: "/site"
    es: "/sitio"
class DefaultController extends Controller
{
    /**
     * @Route({"en": "/contact", "es": "/contacto"}, name="contact")
     */
    public function contact()
    {
        // ...
    }

    /**
     * @Route("/page/{slug}", name="page")
     */
    public function page($slug)
    {
        // ...
    }
}

Related