在Zend Framework 2中注册自定义转换器加载器

时间:2012-10-25 19:49:05

标签: zend-framework2 zend-translate

我正在尝试注册自定义数据库转换程序加载程序。

为此,我的灵感来自于: Feeding Zend Translator

我在(module.config.php)中有以下facotry代码:

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

DatabaseTranslationService看起来像这样:

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

但似乎没有使用“setInvokableClass”: 我收到了这个错误:

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

有人知道如何正确注册翻译

2 个答案:

答案 0 :(得分:2)

经过两天的搜索,我找到了解决方案。

我不知道这是否是一个很好的解决方案,但它对我有用。

替换行:

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

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

我希望这个解决方案可以帮助你。

答案 1 :(得分:2)

在当前版本(zf2 2.2.4)中,您只需要更改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',
        ),
    ),
)

YourNamespace\I18n\Translator\Loader\YourCustomFormat必须实现Zend\I18n\Translator\Loader\FileLoaderInterface接口; load($locale, $filename)方法必须返回Zend\I18n\Translator\TextDomain个实例。

这对我有用。

(当然自动加载器必须找到类)