0

我正在尝试添加Zend_Translate一个 PHP 项目,使用 Zend 组件作为独立库。

我已经使用以下方法对多个项目使用缓存:

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

现在,按照 的文档Zend_Translate,我将相同的$cache对象设置为 myZend_TranslatesetCache实际创建对象:

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在图片中添加了任何内容,或者我可以像我一样加载我所有的翻译吗?

谢谢!

4

2 回答 2

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() 只是添加新的翻译源,您可以将它们传递给构造函数(您的情况)。

在将缓存传递给 Zend_Translate 之前尝试为缓存设置“cache_id_prefix”,这将帮助您确定问题是否出现在代码“...”的某个地方,或者在每次页面加载时创建的新缓存是由 Zend Translate 创建的。

于 2012-05-03T13:29:43.143 回答
-1

如果我没记错的话,Zend_Translate 中的 Zend_Cache 用法有点用词不当。我认为它的作用是通过设置翻译器的选项来减少目录扫描和区域设置,而不是翻译字符串本身的结果。

于 2012-05-02T15:28:39.117 回答