From d4fb88108799e43e5b62d6edd628097352ad167c Mon Sep 17 00:00:00 2001 From: Julien Rosset Date: Wed, 15 May 2024 14:17:17 +0200 Subject: [PATCH] Manage locale in URL --- composer.json | 77 ++++++++++++++++--------------- config/packages/translation.yaml | 2 +- config/routes.yaml | 5 ++ config/services.yaml | 3 ++ src/Controller/CoreController.php | 14 ++++++ 5 files changed, 62 insertions(+), 39 deletions(-) diff --git a/composer.json b/composer.json index 2375ccf..89124e1 100644 --- a/composer.json +++ b/composer.json @@ -4,50 +4,51 @@ "minimum-stability": "stable", "prefer-stable": true, "require": { - "php": ">=8.1", - "ext-ctype": "*", - "ext-iconv": "*", - "doctrine/annotations": "^2.0", - "doctrine/dbal": "^3", - "doctrine/doctrine-bundle": "^2.9", + "php": ">=8.1", + "ext-ctype": "*", + "ext-iconv": "*", + "doctrine/annotations": "^2.0", + "doctrine/dbal": "^3", + "doctrine/doctrine-bundle": "^2.9", "doctrine/doctrine-migrations-bundle": "^3.2", - "doctrine/orm": "^2.15", + "doctrine/orm": "^2.15", "phpdocumentor/reflection-docblock": "^5.3", - "phpstan/phpdoc-parser": "^1.20", + "phpstan/phpdoc-parser": "^1.20", "stof/doctrine-extensions-bundle": "^1.7", - "symfony/asset": "6.4.*", - "symfony/asset-mapper": "6.4.*", - "symfony/console": "6.4.*", + "symfony/asset": "6.4.*", + "symfony/asset-mapper": "6.4.*", + "symfony/console": "6.4.*", "symfony/doctrine-messenger": "6.4.*", - "symfony/dotenv": "6.4.*", + "symfony/dotenv": "6.4.*", "symfony/expression-language": "6.4.*", - "symfony/flex": "^2", - "symfony/form": "6.4.*", - "symfony/framework-bundle": "6.4.*", - "symfony/http-client": "6.4.*", - "symfony/intl": "6.4.*", - "symfony/mailer": "6.4.*", - "symfony/mime": "6.4.*", - "symfony/monolog-bundle": "^3.0", - "symfony/notifier": "6.4.*", - "symfony/process": "6.4.*", - "symfony/property-access": "6.4.*", - "symfony/property-info": "6.4.*", - "symfony/rate-limiter": "6.4.*", - "symfony/runtime": "6.4.*", - "symfony/security-bundle": "6.4.*", - "symfony/serializer": "6.4.*", - "symfony/string": "6.4.*", - "symfony/translation": "6.4.*", - "symfony/twig-bundle": "6.4.*", - "symfony/validator": "6.4.*", - "symfony/web-link": "6.4.*", - "symfony/yaml": "6.4.*", - "symfonycasts/sass-bundle": "^0.6.0", + "symfony/flex": "^2", + "symfony/form": "6.4.*", + "symfony/framework-bundle": "6.4.*", + "symfony/http-client": "6.4.*", + "symfony/intl": "6.4.*", + "symfony/mailer": "6.4.*", + "symfony/mime": "6.4.*", + "symfony/monolog-bundle": "^3.0", + "symfony/notifier": "6.4.*", + "symfony/process": "6.4.*", + "symfony/property-access": "6.4.*", + "symfony/property-info": "6.4.*", + "symfony/rate-limiter": "6.4.*", + "symfony/runtime": "6.4.*", + "symfony/security-bundle": "6.4.*", + "symfony/serializer": "6.4.*", + "symfony/string": "6.4.*", + "symfony/translation": "6.4.*", + "symfony/twig-bundle": "6.4.*", + "symfony/validator": "6.4.*", + "symfony/web-link": "6.4.*", + "symfony/yaml": "6.4.*", + "symfonycasts/sass-bundle": "^0.6.0", "symfonycasts/verify-email-bundle": "^1.17", - "twbs/bootstrap": "^5.3", - "twig/extra-bundle": "^3.0", - "twig/twig": "^3.0" + "twbs/bootstrap": "^5.3", + "twig/extra-bundle": "^3.0", + "twig/string-extra": "^3.10", + "twig/twig": "^3.0" }, "config": { "allow-plugins": { diff --git a/config/packages/translation.yaml b/config/packages/translation.yaml index abb76aa..14f53e2 100644 --- a/config/packages/translation.yaml +++ b/config/packages/translation.yaml @@ -1,5 +1,5 @@ framework: - default_locale: en + default_locale: '%locale.default%' translator: default_path: '%kernel.project_dir%/translations' fallbacks: diff --git a/config/routes.yaml b/config/routes.yaml index 41ef814..c8c0dd6 100644 --- a/config/routes.yaml +++ b/config/routes.yaml @@ -1,5 +1,10 @@ +core_root_redirect: + path: / + controller: App\Controller\CoreController::root_redirect + controllers: resource: path: ../src/Controller/ namespace: App\Controller type: attribute + prefix: /{_locale<%locale.all%>} \ No newline at end of file diff --git a/config/services.yaml b/config/services.yaml index 5a4bced..37292ac 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -7,6 +7,9 @@ parameters: mailer.email: '%env(MAILER_EMAIL)%' mailer.name: '%env(MAILER_NAME)%' + locale.all: 'en|fr' + locale.default: 'en' + services: # default configuration for services in *this* file _defaults: diff --git a/src/Controller/CoreController.php b/src/Controller/CoreController.php index 4de471d..93590bf 100644 --- a/src/Controller/CoreController.php +++ b/src/Controller/CoreController.php @@ -3,6 +3,7 @@ namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; @@ -10,6 +11,19 @@ use Symfony\Component\Routing\Attribute\Route; * Controller for core page : home, etc. */ class CoreController extends AbstractController { + /** + * Redirection for root URL (without locale) + * + * @param Request $request The request + * + * @return Response The response + */ + public function root_redirect (Request $request): Response { + return $this->redirectToRoute('core_main', [ + '_locale' => $request->getPreferredLanguage(explode('|', $this->getParameter('locale.all'))), + ]); + } + /** * Home page *