2012-05-02 2 views
0

젠드 구성 요소를 독립 실행 형 라이브러리로 사용하여 PHP 프로젝트에 Zend_Translate을 추가하려고합니다. 이미 다음과 같은 방법을 사용하여 여러 항목에 대한 캐시를 사용하고Zend_Translate & Zend_Cache 독립 실행 형

: 실제로을 생성하기 전에 Zend_Translate의 문서 다음, 이제

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

, 나는 setCacheZend_Translate에 동일한 $cache 객체를 설정 목적 :

그래서
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. Question about 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_Translate에서의 Zend_Cache 사용법은 다소 잘못된 것입니다. 번역기 자체의 결과가 아니라 번역기에 대한 옵션을 설정하여 디렉토리 검색 및 로켈 설정을 줄이는 것입니다.

+0

다운 투표의 이유에 대한 의견을 보내주십시오. 감사. – shrikeh