Невозможно загрузить перевод из базы данных в Symfony 4.3.3

голоса
1

я пытаюсь загрузить переводы из базы данных в Symfony 4. Переводчик экземпляра не вызывает пользовательский загрузчик я написал с помощью этого учебника ( https://medium.com/@andrew72ru/store-translation-messages-in-database- в-симфони-3f12e579df74 ).

Я создал фиктивные файлы в /translationпапке (messages.it.db) , чтобы запустить загрузчик , но не дозвонились.

services.yaml

parameters:
    locales: ['it','en']
    db_i18n.entity: App\Entity\Translation
 services:
    translation.loader.db:
        class: App\Loader\DbLoader
        arguments:
          - '@service_container'
          - '@doctrine.orm.entity_manager'
        tags:
          - { name: translation.loader, alias: db}

DbLoader.php

namespace App\Loader;


use Creative\DbI18nBundle\Interfaces\EntityInterface;
use Creative\DbI18nBundle\Interfaces\TranslationRepositoryInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Translation\Loader\LoaderInterface;
use Symfony\Component\Translation\MessageCatalogue;

class DbLoader implements LoaderInterface
{
    /**
     * @var EntityManagerInterface
     */
    private $doctrine;

    /**
     * @var string
     */
    private $entityClass;

    public function __construct(ContainerInterface $container, EntityManagerInterface $doctrine)
    {
        $this->doctrine = $doctrine;
        $this->entityClass = $container->getParameter('db_i18n.entity');
    }

    public function load($resource, $locale, $domain = 'messages')
    {
        $messages = $this->getRepository()->findByDomainAndLocale($domain, $locale);
        $values = array_map(static function (EntityInterface $entity) {
            return $entity->getTranslation();
        }, $messages);

        $catalogue = new MessageCatalogue($locale, [
            $domain => $values
        ]);

        return $catalogue;
    }

    public function getRepository(): TranslationRepositoryInterface
    {
        return $this->doctrine->getRepository($this->entityClass);
    }
}

Вот мой перевод таблица

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

TestController.php

class TestController extends AbstractController
{
    /**
     * @Route(/test, name=test)
     */
    public function index(TranslatorInterface $translator)
    {
        $translator->trans('prova', [], 'messages', 'it');

        return new Response();
    }
}

Результат должен быть «Prova это» , но я получаю «Prova» вместо этого, который является ключом перевода. Я пытался поставить dd()на конструктор DbLoader и он никогда не был назван.

У меня также есть в моем проекте Api Platform, но я не думаю, что это вызывает эту проблему.

Задан 09/10/2019 в 12:58
источник пользователем
На других языках...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more