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