为缓存的ZF2翻译文件添加前缀



我使用ZF2 I18n转换器和memcached。设置为:

use ZendI18nTranslatorTranslator;
use ZendCacheStorageAdapterMemcachedResourceManager 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 ZendCacheStorageAdapterMemcachedOptions(array(
        'resource_manager' => $memcached_resource_manager,
        'resource_id'      => RESOURCE_ID,
        'namespace'        => CACHE_NAMESPACE,
        'ttl'              => 3600,
        )
    );
//create memcached adapter
$memcached_adapter = new ZendCacheStorageAdapterMemcached( $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

更新

以下是Bram提到的哈希生成的相关源代码的链接https://github.com/zendframework/zf2/blob/master/library/Zend/I18n/Translator/Translator.php#L553

没有选项可以配置要在缓存键中使用的后缀。你有两个选项。

1) 扩展Translator类并覆盖loadMessages()方法,根据需要自定义代码。您将不得不复制这种方法中的所有代码,这实际上是不可行的,并且当ZF开发人员更改代码或实现新功能时,会导致维护问题。

2) 缓存密钥构建如下:

$cacheId = 'Zend_I18n_Translator_Messages_' . md5($textDomain . $locale);

要使区域设置esdefault文本域的缓存无效,您只需使用相同的代码自己重建缓存密钥,然后使用缓存适配器删除给定的密钥。

$memcache_adapter->removeItem('Zend_I18n_Translator_Messages_' . md5('defaultes');

相关内容

  • 没有找到相关文章

最新更新