00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 class PHPTAL_Attribute_I18N_Translate extends PHPTAL_Attribute
00024 {
00025 function
activate(&$g, &$tag)
00026 {
00027 $g->requireGettext();
00028
00029
if (strlen($this->expression) == 0) {
00030 $key =
"'". $this->
_preparseGetTextKey($tag) .
"'";
00031 }
else {
00032 $exp =
new PHPTAL_Expression($g, $tag, $this->expression);
00033 $exp->setPolicy(
_PHPTAL_ES_RECEIVER_IS_TEMP);
00034 $key = $g->newTemporaryVar();
00035 $exp->setReceiver($key);
00036 $err = $exp->generate();
00037
if (PEAR::isError($err)) {
return $err; }
00038 }
00039
00040
00041
00042 $g->doOBStart();
00043 foreach ($tag->_children as $child) {
00044 $child->generateCode($g);
00045 }
00046 $g->doOBClean();
00047
00048 $code = sprintf('$__tpl__->_translate(%s)', $key);
00049 $g->doPrintRes($code,
true);
00050 }
00051
00052 function
_preparseGetTextKey(&$tag)
00053 {
00054 $key =
"";
00055 foreach ($tag->_children as $child) {
00056
if ($child->isData()) {
00057 $str = preg_replace('/\s+/sm',
' ', $child->_content);
00058 $key .= trim($str) .
' ';
00059 }
else {
00060 $is_i18n_name =
false;
00061
00062 foreach ($child->_surround_attributes as $att) {
00063
if (get_class($att) == strtolower(
"PHPTAL_Attribute_I18N_Name")) {
00064 $key .= '${' . $att->expression .
'}';
00065 $is_i18n_name =
true;
00066 }
00067 }
00068
00069
if (!$is_i18n_name) {
00070 $key .=
PHPTAL_Attribute_I18N_Translate::_preparseGetTextKey($child) .
' ';
00071 }
00072 }
00073 }
00074
00075
00076 $key = preg_replace('/\s+/sm',
' ', $key);
00077 $key = trim($key);
00078
return $key;
00079 }
00080 }
00081
00082 ?>