2012-05-02 1 views
0

Я пытаюсь добавить Zend_Translate в проект PHP, используя компоненты Zend в качестве автономных библиотек.Zend_Translate & Zend_Cache standalone

Я уже использую кэш для нескольких элементов, используя следующий метод:

$cache = Zend_Cache::factory(... 
if (!($obj = $cache->load('OBJ'))) 
{ 
    $obj = ... 
    $cache->save($obj); 
} 

Теперь, следуя документации Zend_Translate, я поставил тот же $cache объект моей Zend_Translate с setCache до того, чтобы фактически создать объект:

Zend_Translate::setCache($cache); 
$translate = new Zend_Translate(
    array(
    'adapter' => 'gettext', 
    'content' => 'languages', 
    null, 
    array('scan' => Zend_Translate::LOCALE_FILENAME) 
) 
); 

Итак, здесь я рулевое управление от моего обычного метода, который вместо того, чтобы было бы поставить весь Zend_Translate в кэше. Общий результат, как сейчас выглядит следующим образом:

// 1.php 

ob_start(); 
session_start(); 

$cache = Zend_Cache::factory(... 
if (!($obj = $cache->load('OBJ'))) 
{ 
    $obj = ... 
    $cache->save($obj); 
} 

Zend_Translate::setCache($cache); 
$translate = new Zend_Translate(
    array(
    'adapter' => 'gettext', 
    'content' => 'languages', 
    null, 
    array('scan' => Zend_Translate::LOCALE_FILENAME) 
) 
); 

echo $translate->_("Hello, I'm the first script"); 

// end 1.php 

и

// 2.php 

ob_start(); 
session_start(); 

$cache = Zend_Cache::factory(... 
if (!($obj = $cache->load('OBJ'))) 
{ 
    $obj = ... 
    $cache->save($obj); 
} 

Zend_Translate::setCache($cache); 
$translate = new Zend_Translate(
    array(
    'adapter' => 'gettext', 
    'content' => 'languages', 
    null, 
    array('scan' => Zend_Translate::LOCALE_FILENAME) 
) 
); 

echo $translate->_("Hello, I'm the second script"); 

// end 2.php 

Этот подход не работает, как я вижу, что кэш-файлы создаются каждый раз, когда я загрузить страницу.

Я интересно:

  1. Я правильно считать, что мне нужно позвонить Zend_Cache::factory на каждой странице?
  2. Как я могу получить свой перевод для работы с кешем в этой автономной ситуации?
  3. Вопрос о Zend_Translate: addTranslation добавить что-нибудь к картинке или я могу загрузить все мои переводы, как я?

Спасибо!

ответ

1

Вопрос №1 Да. При загрузке каждой страницы необходимо вызвать Zend_Cache :: factory. Но если вы уже используете Zend_Cache, вы можете повторно использовать его для своих нужд вместо создания нового экземпляра для Zend_Translate.

Вопрос №2. Нет никакой разницы в использовании Zend Translate + Zend Cache в качестве автономных компонентов. Вот как я использую их в качестве самостоятельных компонентов в таких маленьких сценариев:

// Init application 
define('APP_PATH',  realpath(dirname(__FILE__))); 
define('APP_DATA', APP_PATH . '/lang'); 
define('APP_CACHE',  APP_PATH . '/tmp'); 

require_once 'Zend/Translate.php'; 
require_once 'Zend/Cache.php'; 

// initialize cache 
$cache = Zend_Cache::factory(
     'Core' 
     , 'File' 
     , array(
       'caching'  => true 
      , 'lifetime' => 900 
      , 'automatic_serialization' => true 
      , 'automatic_cleaning_factor' => 20 
      , 'cache_id_prefix'    => 'Translate' 
      ) 
     , array(
       'hashed_directory_level' => 0 
      , 'cache_dir' => APP_CACHE 
     ) 
    ); 

// Setup translation object 
Zend_Translate::setCache($cache); 
$translate = new Zend_Translate('tmx', APP_DATA . '/general.tmx'); 

echo $translate->_("Hello, I'm the second script"); 

ОК, вы готовы к использованию Zend_Cache. Все кэширование будет охватываться самим экземпляром Zend_Translate.

Вопрос № 3. addTranslation() просто добавляет новые источники перевода, вы можете передать их вместо конструктора (ваш случай).

Попробуйте установить кеш-память cache_id_prefix перед передачей его в Zend_Translate, что поможет вам определить, возникает ли проблема где-то в вашем коде «...» или новый кеш, созданный при каждой загрузке страницы, создается Zend Переведите.

-1

Если я правильно помню, использование Zend_Cache в Zend_Translate является немного неправильным. Я думаю, что он делает это, уменьшая сканирование каталогов и локали, установив параметры для Translator, а не сами строки перевода.

+0

Просьба сообщить о причине просрочки голосования. Благодарю. – shrikeh

 Смежные вопросы

  • Нет связанных вопросов^_^