我正在使用ZF2 I18n翻譯器和memcached。設置爲:向緩存的ZF2翻譯文件添加前綴
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);
(所有大寫單詞是常數。)
然後我添加文件使用擴展AbstractFileLoader
自定義類CsvLoader
。這部分工作很好。
$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
更新
下面是哈希生成該布拉姆提到https://github.com/zendframework/zf2/blob/master/library/Zend/I18n/Translator/Translator.php#L553
你的例子是一個memcached設置,但你描述了文件系統存儲。 (使用memcached時,無法通過名稱空間或前綴清除緩存的條目) – 2015-04-13 14:38:29
我已編輯我的帖子以解釋我目前如何清除條目。謝謝。 – 2015-04-13 20:46:02