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

Zend framework2 在Zend Framework 2中注册自定义转换器加载程序,zend-framework2,zend-translate,Zend Framework2,Zend Translate,我正在尝试注册一个自定义数据库转换器加载程序 为此,我的灵感来自: 我在(module.config.php)中有以下facotry代码: DatabaseTranslationService如下所示: $config = $serviceLocator->get('Config'); $trConfig = isset($config['translator']) ? $config['translator'] : array(); $translator = new

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

为此,我的灵感来自:

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

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

有人知道如何正确注册翻译吗?经过两天的搜索,我找到了一个解决方案

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

更换线路:

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

我希望此解决方案对您有所帮助。

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

这对我有用


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

看起来很棒。谢谢。更改此选项时,我收到一个关于
base\u dir
不可用的错误。然后删除注释
/
字符;)嗯,是的,但是为什么在你的回答中他们被注释掉了?
$viewHelper = $serviceLocator->get('viewHelperManager');
$viewHelper->setInvokableClass('database', '\Foo\I18n\Translator\Loader\DatabaseTranslator', true);
'translator' => array(
    'locale' => 'de_DE',
    'translation_file_patterns' => array(
        array(
            'type' => 'YourNamespace\I18n\Translator\Loader\YourCustomFormat',
            'base_dir' => __DIR__ . '/../language',
            'pattern'  => '%s.whatever',
        ),
    ),
)