【问题标题】:Symfony Twig - get default _locale in twigSymfony Twig - 在 twig 中获取默认的 _locale
【发布时间】:2015-02-06 02:44:32
【问题描述】:

我正在我的网站上添加语言切换器。

我的参数是这样的:

avc_coming_soon:
resource: "@AVCComingSoonBundle/Controller/"
type:     annotation
prefix:   /{_locale}
defaults:
    _locale: en
requirements:
    _locale: |fr

en默认设置

在我的树枝上,我这样做了:

<div class="languages">
        <ul class="lang-menu">
            <li class="en"><a href="{{ path(app.request.get('_route'), {'_locale': 'en' })  }}"><img src="{{ asset('images/flag_en.gif') }}" alt="EN"></a></li>
            <li class="fr"><a href="{{ path(app.request.get('_route'), {'_locale': 'fr'})  }}"><img src="{{ asset('images/flag_fr.gif') }}" alt="FR"></a></li>
        </ul>
    </div>

但是当我点击“English”时,我的路径变成了www.mysite.com/en,或者好的路径是www.mysite.com/(没有/en),因为在参数中,我有这个:

defaults:
    _locale: en

如何在 twig 中获取默认的 _locale ?

{{ path(app.request.get('_route'), {'_locale': <<<default>>> })  }}

谢谢你:)

【问题讨论】:

    标签: symfony path twig translation locale


    【解决方案1】:

    你需要使用app.request.attributes:

    {{ path(app.request.get('_route'), {'_locale': app.request.attributes.get('_locale') })  }}
    

    如果您在控制器中有配置,则需要在函数参数中设置默认值:

    /**
     * @Route("/", name="coming_soon", options={"expose"=true}, requirements={"_locale" = "fr|en"})
     */
    public function indexAction($_locale = 'en')
    {
        ...
    }
    

    【讨论】:

    • 不起作用,因为如果我在“www.mysite.com/fr”上然后点击“English”,路径将变为“www.mysite.com/fr”而不是'www.mysite.com/'。和/或如果我在“www.mysite.com/”上然后单击“英语”,路径将变为“www.mysite.com//”
    • 这是另一个问题。
    • 为什么在您请求mysite.com/ 时被重定向到mysite.com/fr?您对此有重定向规则吗?
    • 不,当我请求mysite.com/ 时,网站是英文的,当我请求mysite.com/fr 时,网站是法语的。我需要的是当我在 mysite.com/fr 并点击“英语,请求必须是 mysite.com/ 而不是 mysite.com/en 。在我的控制器中,我做到了:* @Route("/", name="coming_soon", options={"expose"=true}, requirements={"_locale" = "fr|en"})
    • 这是你问的另一个问题。但我更新了我的答案以将其考虑在内。
    【解决方案2】:

    我使用这个包:https://github.com/schmittjoh/JMSI18nRoutingBundle

    感谢捆绑包,我再也不用弄乱语言环境了..

    您可以将捆绑包配置为除了默认语言环境之外的所有内容(这是您不想要的,将 cmets 读取到另一个答案)。

    对于语言切换器,您只需在任何给定路线上设置 _locale

    【讨论】:

      【解决方案3】:

      使用 service.yaml 中的 '%locale%' 参数时,twig 文件中的值不会使用订阅者更改。使用此代码对我有用:

      app.request.session.get('_locale')
      

      【讨论】:

      • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多