Как symfony прочитать локаль для php перевода - PullRequest
0 голосов
/ 03 февраля 2020

Я хочу использовать php -translation / symfony -bundle в моем проекте Symfony 4.

Я выполнил этап настройки .

translation:
    locales: ["fr", "en", "de", "nl"]
    configs:
        applicationName:
            dirs: ['%kernel.project_dir%/templates', '%kernel.project_dir%/src']
            output_dir: '%kernel.project_dir%/translations'
            excluded_names: ['*TestCase.php', '*Test.php']
            excluded_dirs: [cache, data, logs]
            remote_storage: ['php_translation.adapter.loco']

Но у меня проблема. Когда я хочу перевести на язык, это не сработает, если я не укажу языковой стандарт.

 $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'

Как заставить translator использовать языковой стандарт запроса, например symfony рекомендую

1 Ответ

0 голосов
/ 05 марта 2020

Так как переводчик не читает язык запроса, как сказал @yivi, и я не хочу передавать язык запроса всем моим звонкам на trans. Я добавил Listener, который слушает все 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());
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...