Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Traduzir a mensagem de erro do formElementErrors

Eu estava tentando buscar uma maneira de traduzir a mensagem de erro deixado de desafio no final da aula, e coloquei no IndexController no cadastrarAction o código:

    $translator = new Translator();
    $translator->addTranslationFile(
                'gettext',
                'resources/languages/pt_BR.mo',
                'default',
                'pt_BR'
            );

    AbstractValidator::setDefaultTranslator($translator);

Adicionando também nos uses:

    use Zend\I18n\Translator\Translator;
    use Zend\Validator\AbstractValidator;

E no cadastro.phtml:

    echo $this->formElementErrors()->render($form->get('nome'), array('message' => $this->translate("errormessage")));

Isso tudo baseado no que vi nesse site, porém o setDefaultTranslator espera que seja passado argumento do tipo Zend\Validator\Translator\TranslatorInterface ao invés do passado Zend\I18n\Translator\Translator, então como que eu poderia fazer essa tradução da mensagem?

2 respostas
solução!

Oi Hiago, tudo bom?

Qual versão do zend você está utilizando? O link que vc passou foi criado há 4 anos as vezes a resposta já está obsoleta ou trabalha com alguma outra versão do Zend.

O curso segue na versão 2.4, se não me engano. Uma solução que eu encontrei nessa versão dando uma googlada também foi essa aqui, usando o service manager para pegar o translator:

    $serviceManager = $e->getApplication()->getServiceManager();
    $translator = $serviceManager->get('translator');

    $locale = 'pt_BR';

    $translator->setLocale(\Locale::acceptFromHttp($locale));
    $translator->addTranslationFile(
        'phpArray',
        './vendor/zendframework/zendframework/resources/languages/de/Zend_Validate.php',
        'default',
        'de_DE'
    );
    \Zend\Validator\AbstractValidator::setDefaultTranslator($translator);

Você pode conferir aqui o historico todo.

Desculpe pela demora da resposta, mas funcionou sim, muito obrigado André