IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Passer la locale de l'utilisateur dans toutes les urls [4.x]


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut Passer la locale de l'utilisateur dans toutes les urls
    Bonjour,

    J'ai un site en anglais et j'aimerais l'internationaliser. Cependant, lorsque je tente d'accéder à ma homepage (127.0.0.1:8000), j'obtiens l'erreur suivante :

    You're seeing this page because you haven't configured any homepage URL
    Pour travailler avec la locale de l'utilisateur dans les urls, au niveau de la configuration, j'ai effectué les étapes suivantes :

    • dans App/config/services.yaml :



    Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    services:
        # default configuration for services in *this* file
        _defaults:
            bind:
                $projectDir: '%kernel.project_dir%'
                $locales: '%app_locales%'
                $defaultLocale: '%locale%'
    ...

    • dans App/config/packages/framework.yaml :



    Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
        translator:
            default_path: '%kernel.project_dir%/translations'
            fallbacks: ["%locale%"]   
        default_locale: 'en'
    ...

    • dans App/config/routes/annotations.yaml :



    Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    controllers:
        resource: ../../src/Controller/
        type: annotation
        prefix: /{_locale}
        requirements:
            _locale: '%app_locales%'
        defaults:
            _locale: 'en'
    ...

    • dans App/config/packages/translations.yaml :



    Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    framework:
        default_locale: '%locale%'
        translator:
            default_path: '%kernel.project_dir%/translations'
            fallbacks:
                - 'en'

    Dans mon controller, je n'ai rien changé à mes routes. Exemple avec ma homepage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    ...
        /**
         * Homepage
         * 
         * @Route("/", name="home")
         *
         * @param Request $request
         * @param AdvertRepository $advertRepository
         * @param RatingRepository $ratingRepository
         * @param SubscriptionRepository $subscriptionRepository
         * @param PhotoRepository $photoRepository
         * @return Response
         */
        public function index(Request $request, AdvertRepository $advertRepository, RatingRepository $ratingRepository, SubscriptionRepository $subscriptionRepository, PhotoRepository $photoRepository): Response
        {
    ...
    J'ai beau lire les différentes documentations trouvées, je ne comprends pas comment je dois procéder.

    Quelqu'un aurait la gentillesse de m'aiguiller?

    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    controllers:
        resource: ../../src/Controller/
        type: annotation
        prefix: /{_locale}
        requirements:
            _locale: '%app_locales%'
        defaults:
            _locale: 'en'
    ...
    le routage ci-dessus déclare que toutes les routes doivent être préfixées par la locale par conséquent les URI doivent l'être également.
    La route home sera appelée par l'URL 127.0.0.1:8000/en ou 127.0.0.1:8000/fr.

    Pour lister tes toutes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    php bin/console debug:router

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Bonjour et merci pour ta réponse. Je viens cependant de trouver une autre solution plus propre : dans mon fichier config/services.yaml, j'ai ajouté un pipe à la fin du paramètre app_locales et ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    parameters:
        locale: 'fr'
        app_locales : en|fr|

  4. #4
    Candidat au Club
    Homme Profil pro
    Instit et développeur web
    Inscrit en
    Mars 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Instit et développeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2020
    Messages : 1
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par dubitoph Voir le message
    Bonjour et merci pour ta réponse. Je viens cependant de trouver une autre solution plus propre : dans mon fichier config/services.yaml, j'ai ajouté un pipe à la fin du paramètre app_locales et ça fonctionne
    Bonjour @Dubitoph,

    merci pour cette astuce qui m'a sorti du même problème que toi.
    Juste une précision, sous Symfony 5, c'est le fichier config/routes/annotations.yaml que j'ai dû éditer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    controllers:
        resource: ../../src/Controller/
        type: annotation
        prefix: /{_locale}
        requirements:
            _locale: fr|en|
    Mais je suppose que les 2 solutions sont valables ?

    JR

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [4.x] prefix locale dans toutes les url
    Par merou19 dans le forum Symfony
    Réponses: 7
    Dernier message: 06/08/2019, 19h36
  2. Réponses: 5
    Dernier message: 12/12/2010, 23h04
  3. [VBA-E] Supprimer le cont de cellules dans toutes les feuill
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/03/2006, 09h44
  4. bizarerie dans toutes les requetes
    Par zais_ethael dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 09/03/2006, 21h28
  5. Comment MAJ le même champ présent dans toutes les tables ?
    Par PamelaGeek dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 02/02/2006, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo