Как перевести всю страницу в Symfony?

Обычно, когда я использую услуги переводчика, у меня есть eventsubscriber для перевода локали из пользовательских настроек, хранящихся в запросе как _locale. Это работает для слов или фраз, через файлы yaml в качестве сообщений или валидаторов. Но представьте, что у вас есть политика конфиденциальности.

Как лучше всего перевести всю страницу, используя услуги переводчика в Symfony 4?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
0
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для чего-то, что представляет собой целую страницу, у меня часто был бы отдельный шаблон или, по крайней мере, часть страницы, которая была бы включена в страницу целиком.

Вы можете получить _locale из $request, а затем выбрать другой шаблон на его основе. В самом простом случае, $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 в рендеринг как переменную и использовать ее в качестве параметра для включения частичного шаблона.

Это мой код:/** * @Route("{_locale}/privacy-policy", name = "privacy_policy") * @Route() */ public function index(Request $request) { $locale = $request- >получить локаль(); return $this->render("privacy_policy/privacy_{$locale}.html.twig"); } Спасибо

CitizenG1 07.06.2019 18:10

Другие вопросы по теме