2

ZF2 I18n トランスレータと memcached を使用しています。セットアップは次のとおりです。

use Zend\I18n\Translator\Translator;
use Zend\Cache\Storage\Adapter\MemcachedResourceManager as MemcachedResourceManager;

//=== setup the cache ===//
//create a memcached resource manager
$memcached_resource_manager = new MemcachedResourceManager();
$memcached_resource_manager->addServer( RESOURCE_ID, array( 'localhost', '11211' ));

//create memcached options
$memcached_options = new \Zend\Cache\Storage\Adapter\MemcachedOptions(array(
        'resource_manager' => $memcached_resource_manager,
        'resource_id'      => RESOURCE_ID,
        'namespace'        => CACHE_NAMESPACE,
        'ttl'              => 3600,
        )
    );

//create memcached adapter
$memcached_adapter = new \Zend\Cache\Storage\Adapter\Memcached( $memcached_options );
//== end cache setup ===//

//create translator
$translator = new Translator();
$translator->setCache( $memcached_adapter );

(大文字の単語はすべて定数です。)

CsvLoader次に、拡張するカスタム クラスを含むファイルを追加しますAbstractFileLoader。その部分はうまく機能します。

$translator->addTranslationFile('CsvLoader', $translation_file_name, 'section');

私の問題は、キャッシュをクリアしたいときです。現在、名前空間または何も指定せずに、すべてのロケール/ファイルを一度にクリアできます。キャッシュに追加された各翻訳ファイルに接頭辞/接尾辞を追加するにはどうすればよいですか?

現在、次のような値が表示されます CACHE_NAMESPACE:Zend_I18n_Translator_Messages_7a1565097c5fca5a3138b2330c2451db

次のようなエントリを見たい CACHE_NAMESPACE:Zend_I18n_Translator_Messages_es_MX_7a1565097c5fca5a3138b2330c2451db

ロケールを表示します。ありがとう。

追加情報 エントリをクリアするには、現在次のエントリを取得しています。

$entries = $translator->getCache()->getOptions()->getResourceManager()->getResource(self::RESOURCE_ID)->getAllKeys()

(これは途方もなく長い関数チェーンのように思えます-より良い方法の提案は大歓迎です)そしてループして項目名を確認します。アイテムが基準に一致する場合、私は電話しますremoveItem

アップデート

Bram が言及しているハッシュ生成の関連ソース コードへのリンクは次のとおりですhttps://github.com/zendframework/zf2/blob/master/library/Zend/I18n/Translator/Translator.php#L553

4

1 に答える 1