通常,当我使用翻译器服务时,我有一个eventsubscriber以便从用户首选项转换语言环境,并以_locale的形式存储在请求中。这适用于单词或短语,通过yaml文件作为消息或验证器。但是,假设您有隐私政策。
使用symfony 4中的翻译器服务翻译整页的最佳方法是什么?
答案 0 :(得分:2)
对于整个页面来说,我经常会有一个单独的模板,或者至少会有一部分页面包含在整个页面中。
您可以从$ request获取_locale,然后基于它选择一个不同的模板。简单来说,$this->twig->renderResponse("privacy.{$locale}.html.twig");
或将其传递并在页面级内容中切换包含的模板。
对于动态模板名称,我之前做过类似的事情-这是一个简化的版本(我有两个变量,而不仅仅是$place
)。
$tplName = "policies/privacy_{$place}.html.twig";
if (!$this->twig->exists($tplName)) {
$tplName = "policies/privacy_uk.html.twig";
$place = 'uk';
}
return $this->twig->renderResponse($tplName, ['place' => $place]);
同样,您可以将$tplName
作为变量传递到渲染中,并将其用作包含部分模板的参数。