PEAR is discontinued

This is a static archive preserving historical releases and metadata. No new packages or updates will be published. For updates to existing packages, or to publish new packages, please use Composer and Packagist.

Home » Internationalization » Translation2 » Bug #2972

cache_lite decorator not handling param sub as expected

Details

Submitted2004-12-15 18:21 UTC
Frommichael dot caplan at lechateau dot ca
Assignedquipo
StatusClosed
PackageTranslation2
PHP Version5.0.2
OSirrelevant
Roadmaps(Not assigned)

Comments

[2004-12-15 18:21 UTC] michael dot caplan at lechateau dot ca

Description:
------------
with the cache_light decorator, parameter substiution does not work as expected (at least what I expected). With caching on, I expect multiple calls to fetch a translation string to do parameter substitution each time. Instead, the first cached string is alwasy returned, which defeats the purpose of parameter substitution.

[2004-12-15 19:19 UTC] michael dot caplan at lechateau dot ca

For what it is worth, here a patch (it's a really rough patch that doesn't fully take into consideration the different ways that the Cache_Lite_Function::call() method can be invoked. But, as a temporary messure it works):

===================================================================
RCS file: /prod/cvs/intranet_3/lib/Translation2/Decorator/CacheLiteFunction.php,v
retrieving revision 1.5
retrieving revision 1.3
diff -p --unified=3 -r1.5 -r1.3
--- CacheLiteFunction.php 2004/12/15 19:16:44 1.5
+++ CacheLiteFunction.php 2004/11/29 17:46:53 1.3
@@ -16,11 +16,11 @@
// | Authors: Lorenzo Alberton <l dot alberton at quipo dot it> |
// +----------------------------------------------------------------------+
//
-// $Id: CacheLiteFunction.php,v 1.5 2004/12/15 19:16:44 michael Exp $
+// $Id: CacheLiteFunction.php,v 1.3 2004/11/29 17:46:53 michael Exp $
//
/**
* @package Translation2
- * @version $Id: CacheLiteFunction.php,v 1.5 2004/12/15 19:16:44 michael Exp $
+ * @version $Id: CacheLiteFunction.php,v 1.3 2004/11/29 17:46:53 michael Exp $
*/
/**
* Load Translation2 decorator base class
@@ -156,9 +156,8 @@ class Translation2_Decorator_CacheLiteFu
global ${$this->tempVarName}; // WITHOUT THIS, IT DOESN'T WORK
${$this->tempVarName} = $this->translation2;

- $return = $this->cacheLiteFunction->call($this->tempVarName.'->get',
- $stringID, $pageID, $langID, $defaultText, false);
- return $this->translation2->_replaceParams($return);
+ return $this->cacheLiteFunction->call($this->tempVarName.'->get',
+ $stringID, $pageID, $langID, $defaultText);
}

// }}}

===================================================================
RCS file: /prod/cvs/intranet_3/lib/Translation2.php,v
retrieving revision 1.3
retrieving revision 1.4
diff -bB -p --unified=3 -r1.3 -r1.4
--- Translation2.php 2004/11/29 17:47:45 1.3
+++ Translation2.php 2004/12/15 18:55:30 1.4
@@ -16,11 +16,11 @@
// | Authors: Lorenzo Alberton <l dot alberton at quipo dot it> |
// +----------------------------------------------------------------------+
//
-// $Id: Translation2.php,v 1.3 2004/11/29 17:47:45 michael Exp $
+// $Id: Translation2.php,v 1.4 2004/12/15 18:55:30 michael Exp $
//
/**
* @package Translation2
- * @version $Id: Translation2.php,v 1.3 2004/11/29 17:47:45 michael Exp $
+ * @version $Id: Translation2.php,v 1.4 2004/12/15 18:55:30 michael Exp $
*/

/**
@@ -396,16 +396,21 @@ class Translation2
* @param string $langID
* @param string $defaultText Text to display when the strings in both
* the default and the fallback lang are empty
+ * @param boolean $replace Should string parameter replacing take place (default true)
* @return string
*/
- function get($stringID, $pageID=TRANSLATION2_DEFAULT_PAGEID, $langID=null, $defaultText='')
+ function get($stringID, $pageID=TRANSLATION2_DEFAULT_PAGEID, $langID=null, $defaultText='', $replace = true)
{
$pageID = ($pageID == TRANSLATION2_DEFAULT_PAGEID ? $this->currentPageID : $pageID);
$str = $this->storage->getOne($stringID, $pageID, $langID);
if (PEAR::isError($str)) {
return $str;
}
+ if ($replace) {
return $this->_replaceParams($str);
+ } else {
+ return $str;
+ }
}

// }}}

[2004-12-15 19:20 UTC] michael dot caplan at lechateau dot ca

ignore comment about Cache_Lite_Function::call() That would be part of the cache_light pacakge.

[2004-12-15 22:57 UTC] michael dot caplan at lechateau dot ca

sorry about the messed up summary. IE auto-populated the summary using an old filed bug

[2004-12-16 00:50 UTC] michael dot caplan at lechateau dot ca

This is pretty much exactly what I am doing:

$fw_tr =& Translation2::factory('mdb2', &$fw_db, $fw_tr_params);

if (PEAR::isError($fw_tr)) {
trigger_error($fw_tr->getMessage . $fw_tr->GetUserInfo(), E_USER_ERROR);
die();
}

// set default translation lang
$fw_lang = (is_null($fw_locale)) ? $fw_ini['locales.locale']['default_locale'] : $fw_locale;
$fw_lang = strtolower(substr($fw_lang, 0, 2));
$fw_tr->setLang($fw_lang);
$fw_tr->setPageID();

// set translation caching
$fw_tr =& $fw_tr->getDecorator('CacheLiteFunction');
define('TR_CACHE_DIR', ROOT . DIR_SEP . 'cache' . DIR_SEP . 'translation' . DIR_SEP);
$fw_tr->setOption('cacheDir', TR_CACHE_DIR);
$fw_tr->setOption('lifeTime', 3600*24); //one day
$fw_tr->setOption('autoCleanCache', true);

// set fallback language
$fw_lang_fallback = ($fw_ini['locales.locale']['default_locale'] != $fw_locale) ? $fw_locale : 'en_CA';
$fw_lang_fallback = strtolower(substr($fw_lang_fallback, 0, 2));
$fw_tr =& $fw_tr->getDecorator('Lang');
$fw_tr->setOption('fallbackLang', $fw_lang_fallback);

// set default text
$fw_tr =& $fw_tr->getDecorator('DefaultText');
$fw_tr->setOption('emptyPrefix', '['); //mark empty strings
$fw_tr->setOption('emptyPostfix', ']'); //enclose them within brackets

$fw_tr->setParams(array('collection' => $collection));
$results[] = $fw_tr->get('result_restored');

$fw_tr->setParams(array('collection' => $collection2));
$results[] = $fw_tr->get('result_restored');

$fw_tr->setParams(array('collection' => $collection3));
$results[] = $fw_tr->get('result_restored');

Where results_restored is something like 'Collection &&collection&& has been restored.'