Impossible de charger la traduction de base de données dans symfony 4.3.3

voix
1

Je suis en train de charger des traductions de base de données dans Symfony 4. L'instance de Translator ne remet pas le chargeur sur mesure je l' ai écrit en utilisant ce tutoriel ( https://medium.com/@andrew72ru/store-translation-messages-in-database- en symfony-3f12e579df74 ).

J'ai créé des fichiers factices dans le /translationdossier (messages.it.db) pour déclencher le chargeur , mais qu'il ne soit pas appelé.

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);
    }
}

Voici ma table de traduction

Voici le code de test j'utilise pour appeler le traducteur

TestController.php

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

        return new Response();
    }
}

Le résultat est censé être « prova il » mais je reçois « prova » au lieu, ce qui est la clé de la traduction. J'ai essayé de mettre dd()sur le constructeur DbLoader et il n'a jamais été appelé.

J'ai aussi dans mon projet Plate-forme api, mais je ne pense pas que cela cause ce problème.

Créé 09/10/2019 à 12:58
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Je résolus ma question.

En utilisant dd()mon exemple Traducteur j'ai découvert que Symfony ne chargeait pas mes fichiers de traduction correctement. En regardant à travers les propriétés i remarqué le chemin de mon dossier de traduction ne sont pas correctes.

Je les ai mis en src/Resources/translationsplace et cela a fonctionné!

Créé 17/10/2019 à 14:01
source utilisateur

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