Я использую транслятор 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
Обновить
Вот ссылка на соответствующий исходный код генерации хэша, который упоминает Брэм https://github.com/zendframework/zf2/blob/master/library/Zend/I18n/Translator/Translator.php#L553.