php - 在 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 中的语言环境正在更改)请帮我这样做。
解决方案
我想这就是你要找的? https://symfony.com/doc/current/translation/locale.html
如果您按照此处的说明进行操作,则应在该请求期间为整个翻译组件设置语言环境。所以你所有的翻译标签都会改变。
推荐阅读
- c# - 如何使用 c# 在 Unity 中创建一个游戏对象,该游戏对象在 x 时间内生成并且它位于场景中
- docker - 如何让 Kubernetes 服务使用本地主机在 Web 浏览器上打开我的 django 应用程序?
- javascript - 将 PrimeNg 表模块添加到组件会导致错误 - 超出最大调用堆栈大小
- npm - 是否可以使用 webpack 编译单个 javascript 库?
- javascript - 鹡鸰编辑器中的特殊字符菜单
- javascript - 我正在使用 udemy 克隆,如何使用 onmouseover 更改列表?
- node.js - TypeError:无法读取未定义的属性“成员”。Discord bot仪表板EJS问题
- iphone - 魔码 | iOS 构建失败
- java - getAWTGraphicsConfiguration 返回空错误
- amazon-web-services - Amplify 构建失败并显示“请求失败 401 未授权”