首页 > 解决方案 > 在 Symfony 4 中通过 Ajax 更改区域设置后的渲染视图

问题描述

我正在尝试通过下拉菜单更改页面语言。{{ form_widget(registrationForm.locale, { 'attr': {'onChange': 'languageChange()'} }) }}下拉列表是由树枝中的此代码生成的。

阿贾克斯函数

function languageChange() {
    let selectedLanguage = $('#email_form_locale').val();
    $.ajax({
        url:        '{{ path('change_locale') }}',
        type:       'POST',
        dataType:   'json',
        data:       {'selectedLanguage': selectedLanguage},
        async:      true,

        success: function(data, status) {
            console.info(data);
            location.reload();
        },
        error : function(xhr, textStatus, errorThrown) {
            alert('Ajax request failed.');
        }
    });

}

控制器功能

/**
         * @Route("/registration/changeLocale", name="change_locale")
         * Method({"GET","POST"})
         */
        public function changeLocale (Request $request)
        {
            $user = new User();

            $form = $this->createForm(EmailFormType::class, $user);

            if ($request->isXmlHttpRequest()) {
                $jsonData = array();
                $temp = $request->request->all();
                $jsonData[0] = $temp;
                $request->getSession()->set('_locale', $temp['selectedLanguage']);
                $request->setLocale($temp['selectedLanguage']);
                $jsonData[1] = $request->getLocale();
                $user->setLocale($temp['selectedLanguage']);
                return new JsonResponse(array(
                        'jsonData' => $jsonData,
                        'html' => $this->renderView('main/registration.html.twig', array('registrationForm' => $form->createView()))
                    )
                );
            } else {
                return $this->render('main/registration.html.twig');
            }

我试图在 Jason 响应后渲染视图。然后必须选择页面语言(我已经在翻译文件夹中添加了某些语言的翻译模块和单词,如果我更改 services.yaml 中的语言环境正在更改)请帮我这样做。

标签: phpajaxlocalesymfony4

解决方案


我想这就是你要找的? https://symfony.com/doc/current/translation/locale.html

如果您按照此处的说明进行操作,则应在该请求期间为整个翻译组件设置语言环境。所以你所有的翻译标签都会改变。


推荐阅读