Php Symfony 3通过URL处理多个语言

Php Symfony 3通过URL处理多个语言,php,symfony,Php,Symfony,您好,我正在尝试添加多个语言支持到我的symfony应用程序中,从3天以来没有成功 我希望根据用户的区域设置首选项处理URL,并在未登录时添加切换语言的链接 我试过的每一件事都不起作用,我想我做错了什么 我想要两种语言法语和英语。 例如,myapp.com/fr/contactez-nous和myapp.com/en/contact-us app/config/config.yml app/config/routing.yml 控制器 它的工作原理和预期一样,甚至可以在我的小树枝的视图中切换语言

您好,我正在尝试添加多个语言支持到我的symfony应用程序中,从3天以来没有成功

我希望根据用户的区域设置首选项处理URL,并在未登录时添加切换语言的链接

我试过的每一件事都不起作用,我想我做错了什么

我想要两种语言法语和英语。 例如,
myapp.com/fr/contactez-nous
myapp.com/en/contact-us

app/config/config.yml

app/config/routing.yml

控制器

它的工作原理和预期一样,甚至可以在我的小树枝的视图中切换语言

{% if app.request.locale == "en" %}
    <a class="nav-link" href="{{ path(app.request.get('_route'), 
    app.request.get('_route_params')|merge({'_locale': 'fr'})) }}">Français</a>
{% else %}
    <a class="nav-link" href="{{ path(app.request.get('_route'), 
    app.request.get('_route_params')|merge({'_locale': 'en'})) }}">English</a>
{% endif %}
src/MyBundle/resources/config/services.yml

MyBundle\Security\LoginFormAuthenticator

我尝试了这个和其他许多解决方案,但没有成功

当我注销时,我会重定向到这里

不要将控制器关联到myapp.com/app_dev.php/fr

/**
 * @Route("/{_locale}/", name="home")
 */
public function HomeAction()
{
}
我必须手动在地址栏中输入区域设置


我真的非常感谢您在这方面提供的任何帮助,因为它开始让我为在没有框架的情况下实现如此简单的东西而疯狂。谢谢您

您好,您可能会在这篇博文中找到有用的资源:为什么是Symfony 3.4?最后一个版本是5.0。@COil我也看到了这个链接,但我想学习symfony mechanics,我很确定有一种方法可以做到这一点,而不需要额外的捆绑。@COil是真的,但如果我学习SF 5,客户要求使用3.4进行项目,因为他还没有花时间迁移到最新版本呢?我什么也不做i18n处理更好,因为您不必为每种语言声明一条路由。我问这个问题是因为如果这是一个新项目,没有理由至少从4.4开始。您可能正在测试一个新项目,而不是真正的项目?您好,您可能会在这篇博文中找到有用的资源:Why Symfony 3.4?最后一个版本是5.0。@COil我也看到了这个链接,但我想学习symfony mechanics,我很确定有一种方法可以做到这一点,而不需要额外的捆绑。@COil是真的,但如果我学习SF 5,客户要求使用3.4进行项目,因为他还没有花时间迁移到最新版本呢?我什么也不做i18n处理更好,因为您不必为每种语言声明一条路由。我问这个问题是因为如果这是一个新项目,没有理由至少从4.4开始。也许你在测试一个新项目,而不是真正的项目?
/**
 * @Route("/{_locale}/contactez-nous", name="contact_fr")
 * @Route("/{_locale}/contact-us", name="contact_en")
 */
public function contactAction(){
}
{% if app.request.locale == "en" %}
    <a class="nav-link" href="{{ path(app.request.get('_route'), 
    app.request.get('_route_params')|merge({'_locale': 'fr'})) }}">Français</a>
{% else %}
    <a class="nav-link" href="{{ path(app.request.get('_route'), 
    app.request.get('_route_params')|merge({'_locale': 'en'})) }}">English</a>
{% endif %}
firewalls:
    main:
    pattern: ^/
        anonymous: true
        guard:
            authenticators:
                - guardAuthenticator
services:
    guardAuthenticator:
        class: MyBundle\Security\LoginFormAuthenticator
        autowire: true
class LoginFormAuthenticator extends AbstractFormLoginAuthenticator
{
    public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
    {
        $user = $token->getUser();
        $idUtil = $user->getId();
        $session->set('_locale', $user->getLocale());
        /*
         * ALSO TRIED THIS
         * but after logged in request is not updated :(
        /*
        $request->setLocale($user->getLocale());
        $session->set('_security_main', serialize($token));
        $session->save();
    }
}
/**
 * @Route("/{_locale}/", name="home")
 */
public function HomeAction()
{
}