Add gettext-smarty 1.0b1
This commit is contained in:
parent
ed846acac2
commit
050cd9c0dc
126
includes/smarty/plugins/block.t.php
Normal file
126
includes/smarty/plugins/block.t.php
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* block.t.php - Smarty gettext block plugin
|
||||||
|
*
|
||||||
|
* ------------------------------------------------------------------------- *
|
||||||
|
* This library is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU Lesser General Public *
|
||||||
|
* License as published by the Free Software Foundation; either *
|
||||||
|
* version 2.1 of the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This library 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. See the GNU *
|
||||||
|
* Lesser General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU Lesser General Public *
|
||||||
|
* License along with this library; if not, write to the Free Software *
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
|
||||||
|
* ------------------------------------------------------------------------- *
|
||||||
|
*
|
||||||
|
* Installation: simply copy this file to the smarty plugins directory.
|
||||||
|
*
|
||||||
|
* @package smarty-gettext
|
||||||
|
* @version $Id: block.t.php,v 1.1 2005/07/27 17:58:56 sagi Exp $
|
||||||
|
* @link http://smarty-gettext.sourceforge.net/
|
||||||
|
* @author Sagi Bashari <sagi@boom.org.il>
|
||||||
|
* @copyright 2004-2005 Sagi Bashari
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replaces arguments in a string with their values.
|
||||||
|
* Arguments are represented by % followed by their number.
|
||||||
|
*
|
||||||
|
* @param string Source string
|
||||||
|
* @param mixed Arguments, can be passed in an array or through single variables.
|
||||||
|
* @returns string Modified string
|
||||||
|
*/
|
||||||
|
function smarty_gettext_strarg($str)
|
||||||
|
{
|
||||||
|
$tr = array();
|
||||||
|
$p = 0;
|
||||||
|
|
||||||
|
for ($i=1; $i < func_num_args(); $i++) {
|
||||||
|
$arg = func_get_arg($i);
|
||||||
|
|
||||||
|
if (is_array($arg)) {
|
||||||
|
foreach ($arg as $aarg) {
|
||||||
|
$tr['%'.++$p] = $aarg;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$tr['%'.++$p] = $arg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return strtr($str, $tr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Smarty block function, provides gettext support for smarty.
|
||||||
|
*
|
||||||
|
* The block content is the text that should be translated.
|
||||||
|
*
|
||||||
|
* Any parameter that is sent to the function will be represented as %n in the translation text,
|
||||||
|
* where n is 1 for the first parameter. The following parameters are reserved:
|
||||||
|
* - escape - sets escape mode:
|
||||||
|
* - 'html' for HTML escaping, this is the default.
|
||||||
|
* - 'js' for javascript escaping.
|
||||||
|
* - 'url' for url escaping.
|
||||||
|
* - 'no'/'off'/0 - turns off escaping
|
||||||
|
* - plural - The plural version of the text (2nd parameter of ngettext())
|
||||||
|
* - count - The item count for plural mode (3rd parameter of ngettext())
|
||||||
|
*/
|
||||||
|
function smarty_block_t($params, $text, &$smarty)
|
||||||
|
{
|
||||||
|
$text = stripslashes($text);
|
||||||
|
|
||||||
|
// 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 = ngettext($text, $plural, $count);
|
||||||
|
} else { // use normal
|
||||||
|
$text = gettext($text);
|
||||||
|
}
|
||||||
|
|
||||||
|
// run strarg if there are parameters
|
||||||
|
if (count($params)) {
|
||||||
|
$text = smarty_gettext_strarg($text, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($escape) || $escape == 'html') { // html escape, default
|
||||||
|
$text = nl2br(htmlspecialchars($text));
|
||||||
|
} elseif (isset($escape)) {
|
||||||
|
switch ($escape) {
|
||||||
|
case 'javascript':
|
||||||
|
case 'js':
|
||||||
|
// javascript escape
|
||||||
|
$text = str_replace('\'', '\\\'', stripslashes($text));
|
||||||
|
break;
|
||||||
|
case 'url':
|
||||||
|
// url escape
|
||||||
|
$text = urlencode($text);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $text;
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
124
includes/smarty/tsmarty2c.php
Executable file
124
includes/smarty/tsmarty2c.php
Executable file
@ -0,0 +1,124 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* tsmarty2c.php - rips gettext strings from smarty template
|
||||||
|
*
|
||||||
|
* ------------------------------------------------------------------------- *
|
||||||
|
* This library is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU Lesser General Public *
|
||||||
|
* License as published by the Free Software Foundation; either *
|
||||||
|
* version 2.1 of the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This library 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. See the GNU *
|
||||||
|
* Lesser General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU Lesser General Public *
|
||||||
|
* License along with this library; if not, write to the Free Software *
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
|
||||||
|
* ------------------------------------------------------------------------- *
|
||||||
|
*
|
||||||
|
* This command line script rips gettext strings from smarty file,
|
||||||
|
* and prints them to stdout in C format, that can later be used with the
|
||||||
|
* standard gettext tools.
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* ./tsmarty2c.php <filename or directory> <file2> <..> > smarty.c
|
||||||
|
*
|
||||||
|
* If a parameter is a directory, the template files within will be parsed.
|
||||||
|
*
|
||||||
|
* @package smarty-gettext
|
||||||
|
* @version $Id: tsmarty2c.php,v 1.3 2005/07/27 17:59:39 sagi Exp $
|
||||||
|
* @link http://smarty-gettext.sf.net/
|
||||||
|
* @author Sagi Bashari <sagi@boom.org.il>
|
||||||
|
* @copyright 2004-2005 Sagi Bashari
|
||||||
|
*/
|
||||||
|
|
||||||
|
// smarty open tag
|
||||||
|
$ldq = preg_quote('{');
|
||||||
|
|
||||||
|
// smarty close tag
|
||||||
|
$rdq = preg_quote('}');
|
||||||
|
|
||||||
|
// smarty command
|
||||||
|
$cmd = preg_quote('t');
|
||||||
|
|
||||||
|
// extensions of smarty files, used when going through a directory
|
||||||
|
$extensions = array('tpl');
|
||||||
|
|
||||||
|
// "fix" string - strip slashes, escape and convert new lines to \n
|
||||||
|
function fs($str)
|
||||||
|
{
|
||||||
|
$str = stripslashes($str);
|
||||||
|
$str = str_replace('"', '\"', $str);
|
||||||
|
$str = str_replace("\n", '\n', $str);
|
||||||
|
return $str;
|
||||||
|
}
|
||||||
|
|
||||||
|
// rips gettext strings from $file and prints them in C format
|
||||||
|
function do_file($file)
|
||||||
|
{
|
||||||
|
$content = @file_get_contents($file);
|
||||||
|
|
||||||
|
if (empty($content)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
global $ldq, $rdq, $cmd;
|
||||||
|
|
||||||
|
preg_match_all(
|
||||||
|
"/{$ldq}\s*({$cmd})\s*([^{$rdq}]*){$rdq}([^{$ldq}]*){$ldq}\/\\1{$rdq}/",
|
||||||
|
$content,
|
||||||
|
$matches
|
||||||
|
);
|
||||||
|
|
||||||
|
for ($i=0; $i < count($matches[0]); $i++) {
|
||||||
|
// TODO: add line number
|
||||||
|
echo "/* $file */\n"; // credit: Mike van Lammeren 2005-02-14
|
||||||
|
|
||||||
|
if (preg_match('/plural\s*=\s*["\']?\s*(.[^\"\']*)\s*["\']?/', $matches[2][$i], $match)) {
|
||||||
|
echo 'ngettext("'.fs($matches[3][$i]).'","'.fs($match[1]).'",x);'."\n";
|
||||||
|
} else {
|
||||||
|
echo 'gettext("'.fs($matches[3][$i]).'");'."\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// go through a directory
|
||||||
|
function do_dir($dir)
|
||||||
|
{
|
||||||
|
$d = dir($dir);
|
||||||
|
|
||||||
|
while (false !== ($entry = $d->read())) {
|
||||||
|
if ($entry == '.' || $entry == '..') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$entry = $dir.'/'.$entry;
|
||||||
|
|
||||||
|
if (is_dir($entry)) { // if a directory, go through it
|
||||||
|
do_dir($entry);
|
||||||
|
} else { // if file, parse only if extension is matched
|
||||||
|
$pi = pathinfo($entry);
|
||||||
|
|
||||||
|
if (isset($pi['extension']) && in_array($pi['extension'], $GLOBALS['extensions'])) {
|
||||||
|
do_file($entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$d->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
for ($ac=1; $ac < $_SERVER['argc']; $ac++) {
|
||||||
|
if (is_dir($_SERVER['argv'][$ac])) { // go through directory
|
||||||
|
do_dir($_SERVER['argv'][$ac]);
|
||||||
|
} else { // do file
|
||||||
|
do_file($_SERVER['argv'][$ac]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
Reference in New Issue
Block a user