zend tutorial framework create composer zend-framework2 zend-translate

zend framework2 - tutorial - Registro de traductor de traductor personalizado en Zend Framework 2



zend framework module (2)

Intento registrar un cargador de traductor de base de datos personalizado.

Para eso me inspiré: Traductor de Feeding Zend

Tengo el siguiente código de facotry en (module.config.php):

''service_manager'' => array( ''factories'' => array( ''translator'' => function($sm){ $translator = new /V1/Service/DatabaseTranslationService(); return $translator->createService($sm); }, ), ),

El DatabaseTranslationService se ve así:

$config = $serviceLocator->get(''Config''); $trConfig = isset($config[''translator'']) ? $config[''translator''] : array(); $translator = new /Zend/I18n/Translator/Translator(); $translator->getPluginManager()->setInvokableClass(''database'', ''/Foo/I18n/Translator/Loader/DatabaseTranslator'', true); $translator->addTranslationFile(''database'', ''en_EN''); return $translator;

Pero parece que no se usa "setInvokableClass": recibí este error:

Zend/ServiceManager/ServiceManager::get was unable to fetch or create an instance for database

¿Alguien sabe cómo registrar el traductor correctamente?


Después de dos días de búsqueda, encontré una solución.

No sé si es una buena solución, pero funciona para mí.

Reemplazar la línea:

$translator->getPluginManager()->setInvokableClass(''database'', ''/Foo/I18n/Translator/Loader/DatabaseTranslator'', true);

con

$viewHelper = $serviceLocator->get(''viewHelperManager''); $viewHelper->setInvokableClass(''database'', ''/Foo/I18n/Translator/Loader/DatabaseTranslator'', true);

Espero que esta solución te ayude.


En la versión actual (zf2 2.2.4) solo necesita cambiar la entrada type -config:

''translator'' => array( ''locale'' => ''de_DE'', ''translation_file_patterns'' => array( array( ''type'' => ''YourNamespace/I18n/Translator/Loader/YourCustomFormat'', ''base_dir'' => __DIR__ . ''/../language'', ''pattern'' => ''%s.whatever'', ), ), )

El YourNamespace/I18n/Translator/Loader/YourCustomFormat debe implementar la Zend/I18n/Translator/Loader/FileLoaderInterface ; el método load($locale, $filename) debe devolver una Zend/I18n/Translator/TextDomain .

Esto funcionó para mí.

(por supuesto, el autocargador debe encontrar la clase)