duanci5913 2017-07-21 17:37
浏览 67

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?


 * @Route(
 *     "/{_locale}/branches", name="branches",
 *     requirements={"_locale":"%app_locales%"}
 *     )
public function indexAction(Request $request) {
    return $this->render('branches/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>

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:

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

          path: /{_locale}/contact
              _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 }}.
    本回答被题主选为最佳回答 , 对您是否有帮助呢?



  • ¥20 求解答(matlab)
  • ¥30 ffmpeg库使用过程中遇到的问题
  • ¥15 pyqt5 中python如何通过Qtwebchannel主动发消息给web前端
  • ¥15 关于HTML中title获取xml内容的问题
  • ¥15 fanuc机器人PRIO083数字信号未复原错误,如何解决?
  • ¥20 如何为现有电路板增加远程控制功能
  • ¥15 C#点击按钮的时候的循环次数就是最后一次,如何是循环第几次的值?
  • ¥15 UE5打包失败,求解决
  • ¥15 请问STM32G431的CANOPEN协议函数怎么写
  • ¥15 graphpad prism 三因素重复测定报错