5

カスタムデータベーストランスレータローダーを登録しようとしています。

そのために私は触発されました: ZendTranslatorに餌をやる

(module.config.php)に次のファコトリーコードがあります:

'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

翻訳者を正しく登録する方法を知っている人はいますか

4

2 に答える 2

3

2日間の検索の後、私は解決策を見つけました。

それが良い解決策かどうかはわかりませんが、私にとってはうまくいきます。

次の行を置き換えます。

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

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

このソリューションがお役に立てば幸いです。

于 2012-11-11T20:47:51.587 に答える
2

type現在のバージョン(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

これは私のために働いた。

(もちろん、オートローダーはクラスを見つける必要があります)

于 2013-09-20T22:23:06.097 に答える