登录后和注销后丢失当前本地语言

lost current local language after login and after logout

我可以正确切换我网站的语言,但是当我登录时,我在 url 中丢失了我当前的语言。例如登录前 http://test.bu/app_dev.php/en/admin/slideshow/ and after login i have this http://test.bu/app_dev.php/fr/admin/slideshow/ symfony2.7 始终采用语言环境:fr。我使用 FosUserBundle。我惊呆了,我发现我可以使用捆绑包来解决这个问题,但我想我可以通过编辑配置来解决这个问题。 登录后,我通过 default_target_path 重定向网站:slideshow_index 像这样

app_slideshow:
    resource: "@AppBundle/Resources/config/routing/slideshow.yml"
    prefix:   /{_locale}/admin/slideshow

this is my config.yml

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: services.yml }

# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
    locale: fr

framework:
    #esi: ~
    translator: { fallback: %locale% }
    secret: '%secret%'
    router:
        resource: '%kernel.root_dir%/config/routing.yml'
        strict_requirements: ~
    form: ~
    csrf_protection: ~
    validation: { enable_annotations: true }
    #serializer: { enable_annotations: true }
    templating:
        engines: ['twig']
    default_locale: '%locale%'
    trusted_hosts: ~
    trusted_proxies: ~
    session:
        # handler_id set to null will use default session handler from php.ini
        handler_id: ~
    fragments: ~
    http_method_override: true

# Twig Configuration
twig:
    debug: '%kernel.debug%'
    strict_variables: '%kernel.debug%'

# Doctrine Configuration
doctrine:
    dbal:
        driver: pdo_mysql
        host: '%database_host%'
        port: '%database_port%'
        dbname: '%database_name%'
        user: '%database_user%'
        password: '%database_password%'
        charset: UTF8
        # if using pdo_sqlite as your database driver:
        #   1. add the path in parameters.yml
        #     e.g. database_path: '%kernel.root_dir%/data/data.db3'
        #   2. Uncomment database_path in parameters.yml.dist
        #   3. Uncomment next line:
        #path: '%database_path%'

    orm:
        auto_generate_proxy_classes: '%kernel.debug%'
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true

# Swiftmailer Configuration
swiftmailer:
    transport: '%mailer_transport%'
    host: '%mailer_host%'
    username: '%mailer_user%'
    password: '%mailer_password%'
    spool: { type: memory }
# app/config/config.yml
fos_user:
    db_driver: orm # other valid values are 'mongodb' and 'couchdb'
    firewall_name: main
    user_class: Gold\UserBundle\Entity\User
    from_email:
        address: "%mailer_user%"
        sender_name: "%mailer_user%"

  thanks Whosebug

您可以使用 JMSI18nRoutingBundle

处理语言环境 detection/switch

将所需的捆绑包添加到 composer.json:

"require": {
    ...
    "jms/i18n-routing-bundle": "1.1.*",
    "jms/translation-bundle": "1.1.*",
    "friendsofsymfony/user-bundle": "1.3.*"
},

http://jmsyst.com/bundles/JMSI18nRoutingBundle/master/installation

JMS 路由包

Link https://github.com/schmittjoh/JMSI18nRoutingBundle

但在安装之前请先观看这个简短的视频教程。本教程帮助我理解了 fos 用户包和 url.

中的语言环境之间的问题

https://codereviewvideos.com/course/getting-started-with-fosuserbundle/video/translations-and-internationalisation-in-fosuserbundle

如果您不想使用 composer.json 文件安装 jms 路由包,您可以使用此命令安装它 php composer.phar require jms/i18n-routing-bundle "dev-master"

这是我的配置:

jms_i18n_routing:
    default_locale: "%locale%"
    locales: ["fr", "en"]
    strategy: prefix_except_default

Security.yml:

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_token_generator: security.csrf.token_manager
            require_previous_session: false
            login_path: fos_user_security_login
            check_path: fos_user_security_check
            default_target_path: your_route_name_homepage
        logout:
            path: fos_user_security_logout
            target: your_route_name_homepage        
        anonymous: true


        access_control:
             - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY  }
             - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY }
             - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
             - { path: ^/admin/, role: ROLE_ADMIN }

安装 Jms 路由包后。尝试执行命令 debug/router (symfony 3) 并观察路由名称和前缀。