Added gettext - filter for smarty
Signed-off-by: Florian Aders (EleRas) <eleras@froxlor.org>
This commit is contained in:
117
lib/functions/smarty_plugins/gettext-prefilter.php
Normal file
117
lib/functions/smarty_plugins/gettext-prefilter.php
Normal file
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
/*
|
||||
Projectname: Smarty gettext Prefilter
|
||||
Description: A prefilter for smarty that will filter for {t}....{/t} blocks
|
||||
To use simply include this file after declaring the $smarty object
|
||||
or register the filter normally using a similar command as shown below
|
||||
|
||||
The function expects a HAVE_GETTEXT define set to true to actually do any
|
||||
work with gettext.
|
||||
|
||||
{t} supports 3 variables:
|
||||
domain - To change the gettext domain to use from the default one
|
||||
plural - To mark a block as having a plural and normal form.
|
||||
Set plural to the plural version of the block, eg:
|
||||
{t count=$files|@count plural="{$files} files"}One file{/t}
|
||||
escape - Escape the resulting string for either:
|
||||
js (JavaScript), html (HTML entities), url (URL Encode)
|
||||
Defaults to no escaping at all.
|
||||
|
||||
This work is licensed under the Creative Commons Attribution 2.5 License.
|
||||
To view a copy of this license, visit http://creativecommons.org/licenses/by/2.5/
|
||||
or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco,
|
||||
California, 94105, USA.
|
||||
|
||||
This file is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
$smarty->registerFilter('pre', 'smarty_prefilter_t');
|
||||
function smarty_prefilter_t($tpl_source, &$smarty) {
|
||||
/* find all {t} ... {/t} uses regex */
|
||||
$tpl_source = preg_replace_callback(
|
||||
'|{t([^}]*)}(.*?){/t}|s',
|
||||
'smarty_helper_gettext_block',
|
||||
$tpl_source
|
||||
);
|
||||
|
||||
/* return our new tpl_source */
|
||||
return $tpl_source;
|
||||
}
|
||||
function smarty_helper_gettext_block($matches)
|
||||
{
|
||||
/* the actual text is the 2nd submatch */
|
||||
$text = stripslashes($matches[2]);
|
||||
|
||||
/* if we do not have gettext, just return the text itself */
|
||||
if (!HAVE_GETTEXT) return $text;
|
||||
|
||||
/* build our params via the 1st submatch */
|
||||
$params = Array();
|
||||
if(!isset($param_matches))
|
||||
{
|
||||
$param_matches = '';
|
||||
}
|
||||
$num = preg_match_all(
|
||||
"|(\\w+)=([\"'])([^\\2]*)\\2|",
|
||||
$param_matches,
|
||||
$matches[2]
|
||||
);
|
||||
if ($num) foreach($param_matches AS $param) $params[$param[1]] = $param[3];
|
||||
|
||||
// set domain if needed
|
||||
if (isset($params['domain']))
|
||||
{
|
||||
$domain = $params['domain'];
|
||||
unset($params['domain']);
|
||||
}
|
||||
|
||||
// set escape mode
|
||||
if (isset($params['escape'])) {
|
||||
$escape = $params['escape'];
|
||||
unset($params['escape']);
|
||||
}
|
||||
|
||||
// set plural version
|
||||
if (isset($params['plural'])) {
|
||||
$plural = $params['plural'];
|
||||
unset($params['plural']);
|
||||
|
||||
// set count
|
||||
if (isset($params['count'])) {
|
||||
$count = $params['count'];
|
||||
unset($params['count']);
|
||||
}
|
||||
}
|
||||
|
||||
// use plural if required parameters are set
|
||||
if (isset($count) && isset($plural))
|
||||
{
|
||||
$text = isset($domain) ? dngettext($domain, $text, $plural, $count) : ngettext($text, $plural, $count);
|
||||
}
|
||||
else
|
||||
{ // use normal
|
||||
$text = isset($domain) ? dgettext($domain, $text) : gettext($text);
|
||||
}
|
||||
|
||||
// default to noescaping at all
|
||||
if (isset($escape)) {
|
||||
switch ($escape) {
|
||||
case 'javascript':
|
||||
case 'js':
|
||||
// javascript escape
|
||||
$text = str_replace('\'', '\\\'', stripslashes($text));
|
||||
break;
|
||||
case 'url':
|
||||
// url escape
|
||||
$text = urlencode($text);
|
||||
break;
|
||||
case 'html':
|
||||
$text = nl2br(htmlspecialchars($text));
|
||||
}
|
||||
}
|
||||
|
||||
return $text;
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user