duanci5913
2017-07-21 17:37
浏览 62
已采纳

Symfony - 如何切换和使用区域设置

what is the best practise how to work with locale in the twig templates:

  • how switch between languages (with language switcher in template) and how to keep an existing URL with just a change of language
  • how create URL with locale support

For example: I have 2 languages (ES and EN), default language is ES, for my home page I create 2 Route Anotations for / (for default language, in this case ES) and for /{_locale}/ (for other languages) in my Controller file.

And now I need to get locale parameter to my twig template to my URL, but only if I will not on my default language.

Manually rewrite URL works fine, but is there any easy way how add locale parameter to URL when I creating on my twig templates ?

The actual value of the variable locale can be passed to Controller, but is there any better way to got it in twig?

EDIT:

/**
 * @Route(
 *     "/{_locale}/branches", name="branches",
 *     requirements={"_locale":"%app_locales%"}
 *     )
 * 
 */
public function indexAction(Request $request) {
    return $this->render('branches/index.html.twig');
}

index.html.twig

<li class="{% if app.request.attributes.get('_route') starts with 'branches' %}active{% endif %}">
                    <a href="{{ path('branches') }}" class="">{{ 'header.menu.branches'|trans }}</a>
                </li>

I got

No route found for "GET /branches" i use this URL http://localhost:8080/en/branches (works OK) and http://localhost:8080/branches (ERROR) I must use something like this:

/**
 * @Route(
 *     "/branches/", name="branches_def",
 *     defaults={"_locale":"%locale%"},
 *     )
 * @Route(
 *     "/{_locale}/branches/", name="branches",
 *     requirements={"_locale":"%app_locales%"}
 *     )
 * 
 */
public function indexAction(Request $request) {
    return $this->render('branches/index.html.twig');
}

URL generating with path is OK, but if I delete locale parameter from my URL in my browser I got this error.

Thanks a lot for any usefull advice

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dozr13344 2017-07-22 13:46
    已采纳
    1. uncomment row translator: { fallbacks: ['%locale%'] } in config.yml
    2. declare needed variables in the same file:

      parameters:
          locale: en
          app.locales: en|lv|ru
      
    3. declare your needed route in routing.yml like this:

      contact_us:
          path: /{_locale}/contact
          defaults:
              _controller: 'AppBundle:Default:contact'
              _locale: '%app.locales%'
      
    4. use {{ path('another_route') }} without parameters, in case another_route declared with _locale placeholder. Also for single text translation use {{ 'home.title'|trans }}.
    点赞 打赏 评论
  • douniangliao4327 2017-07-22 07:23

    save your locale into a cookie and then inside your twig file create links like <a href="{{ path('your-path-name', {'locale': app.request.cookies.get('LOCALE_COOKIE')}) }}">

    I am not sure if you will get an error or a null value (which will help you with your default locale in your controller route) if the cookie is not set but you should try it out.

    点赞 打赏 评论

相关推荐 更多相似问题