D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
lampp
/
lib
/
php
/
HTML
/
Template
/
Xipe
/
Filter
/
Filename :
Translate.php
back
Copy
<?php // // +----------------------------------------------------------------------+ // | PHP Version 4 | // +----------------------------------------------------------------------+ // | Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2003 The PHP Group | // +----------------------------------------------------------------------+ // | This source file is subject to version 2.02 of the PHP license, | // | that is bundled with this package in the file LICENSE, and is | // | available at through the world-wide-web at | // | http://www.php.net/license/2_02.txt. | // | If you did not receive a copy of the PHP license and are unable to | // | obtain it through the world-wide-web, please send a note to | // | license@php.net so we can mail you a copy immediately. | // +----------------------------------------------------------------------+ // | Authors: Wolfram Kriesing <wolfram@kriesing.de> | // +----------------------------------------------------------------------+ // $Id: Translate.php,v 1.5 2003/01/10 13:21:51 cain Exp $ // require_once 'HTML/Template/Xipe/Options.php'; /** * translation filters and helpers * * @package HTML_Template_Xipe * @access public * @version 02/04/14 * @author Wolfram Kriesing <wolfram@kriesing.de> */ class HTML_Template_Xipe_Filter_Translate extends HTML_Template_Xipe_Options { /** * apply a function/method to each output which translates the string, so i dont have to * do it by hand every time * use only as POST-filter, since it looks for '< ? =' tags * * NOTE: its quite couragous using this filter, since it might also translate usernames or other stuff * that is dynamically generated, and if it also is in the translate-table then the page may become funny * * @version 02/01/08 * @author Wolfram Kriesing <wolfram@kriesing.de> * @param string $input the original template code * @param string $functionName the function to put around a string that is printed * @param array $possibleMarkUpDelimiters delimiters that are around a text that should be translated, see Language_Translate * @see $Language_Translate::possibleMarkUpDelimiters * @return string the modified template */ function applyTranslateFunction( $input , $functionName , $possibleMarkUpDelimiters ) { if( sizeof($possibleMarkUpDelimiters) ) foreach( $possibleMarkUpDelimiters as $begin=>$end ) // go thru all the delimiters and try to translate the strings { // FIXXME the [ ^ ? > ] makes it impossible to translate the following string // automatically: < ?=$key? > --- < ?=$aLoop? > // if i had left a "." instead there it would result in: < ?=translateMathod($key? > --- < ?=$aLoop)? > // but now we have the problem that ONLY to stuff inside the $possibleMarkUpDelimiters // the translate function is applied, but we need the $possibleMarkUpDelimiters since // we dont want to translate every < ?=.. tag, since those might also just be formatting // things or in a style sheet simply a path or whatsoever, so $possibleMarkUpDelimiters IS DEFINITELY NEEDED // but must become better $input = preg_replace( // $ [^ ? >] takes care of only applying the method to the proper block, // i think there is some reg-exp modifier for that too, but dont know yet // (->)? takes care of class operators to be included in the translation '/('.$begin.'<\?php\secho\s)(\$([^?>](->)?)*)(\?>'.$end.')/i' , "$1$functionName($2)$5" , $input ); } return $input; /* TEST CASES THAT PASSED: " 1. the problem here was the class-operator '->', since the '>' is also in the possibleMarkUpDelimiter <td class="listContent">< ?=$language->getName($aBookmark['language'])? ></td> */ } /** * this function will simply search variables that have the additional prefix $markString * and applies the translate function to them, and only to them * example: * - your variable that shall be translated is $foo * - your $functionName is 'translateMe', the function that translates the string * - you have set the mark string to 'T_' (same as default) * now all the varibales in the code, where you have written * $T_foo instead of $foo * will be replaced by 'translateMe($foo)' * so that {$T_foo} will finally become '<? php echo translateMe($foo) ? >' * that's all it does. note that the variable name will be reset to what * it actually shall be, the 'T_' is only kind of a mark, which indicates * translate this variable. There doesnt have to exist a variable with this name * * @param * @param * @param string this is a short string, that marks how a variable name * has to start, if this is found the value will be translated * otherwise it will be left alone * */ function translateMarkedOnly( $input , $functionName , $markString='T_' ) { // $regExp = '/\\$'.preg_quote($markString).'([a-z0-9_\->]*)/i'; $regExp = '/\\$'.preg_quote($markString).'(.*)\\?>/Ui'; $input = preg_replace( $regExp , "$functionName($$1) ?>" , $input ); return $input; } } ?>