symfony如何读取php翻译的语言环境
我想在我的symfony4项目中使用 我一直在关注这个问题 但我有个问题。当我想翻译成语言时,如果我不指定语言环境,它就不起作用symfony如何读取php翻译的语言环境,symfony,translation,Symfony,Translation,我想在我的symfony4项目中使用 我一直在关注这个问题 但我有个问题。当我想翻译成语言时,如果我不指定语言环境,它就不起作用 $trans = $translator->trans('portal.no_access', [], 'portal', $request->getLocale()); $transWithoutLocale = $translator->trans('portal.no_access', [], 'portal'); var_dump($t
$trans = $translator->trans('portal.no_access', [], 'portal', $request->getLocale());
$transWithoutLocale = $translator->trans('portal.no_access', [], 'portal');
var_dump($trans); ==> return 'string translated'
var_dump($transWithoutLocale); ==> return 'string in default locale format' ( fr )
var_dump($request->getLocale()); ==> return 'de'
我如何强制
翻译人员使用请求区域设置,就像一样,因为翻译人员没有像@yivi所说的那样读取请求区域设置,并且我不想将请求区域设置赋予我对trans
的所有调用。我添加了一个侦听器
,它侦听所有KernelEvents::REQUEST
,并将locale
设置到Translator
:
class LocaleListener implements EventSubscriberInterface
{
/** @var TranslatorInterface */
private $translator;
/**
* LocaleListener constructor.
*/
public function __construct(TranslatorInterface $translator)
{
$this->translator = $translator;
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => ['onKernelRequest', 10],
];
}
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
if (\method_exists($this->translator, 'setLocale')) {
$this->translator->setLocale($request->getLocale());
}
}
}
您没有使用Symfony的翻译包。使用Symfony的翻译包,您将无法指定用户的区域设置。但有了这个第三方软件包,您似乎需要这样做。您要么装饰服务并封装调用,要么在每个trans()
调用上传递请求区域设置,这似乎很简单。
class LocaleListener implements EventSubscriberInterface
{
/** @var TranslatorInterface */
private $translator;
/**
* LocaleListener constructor.
*/
public function __construct(TranslatorInterface $translator)
{
$this->translator = $translator;
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => ['onKernelRequest', 10],
];
}
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
if (\method_exists($this->translator, 'setLocale')) {
$this->translator->setLocale($request->getLocale());
}
}
}