synchroniced it with the developer_tools::class.solangfile.inc.php 1.19

This commit is contained in:
Ralf Becker 2003-10-16 19:51:56 +00:00
parent f04c06956d
commit 297447b421

View File

@ -24,13 +24,21 @@
var $loaded_apps = array(); // Loaded app langs var $loaded_apps = array(); // Loaded app langs
var $functions = array( // functions containing phrases to translate and param# var $functions = array( // functions containing phrases to translate and param#
'lang' => array(1), 'lang' => array(1),
'create_input_box' => array(1,3), 'create_input_box' => array(1,3),
'create_check_box' => array(1,3), 'create_check_box' => array(1,3),
'create_select_box' => array(1,4), 'create_select_box' => array(1,4),
'create_text_area' => array(1,5), 'create_text_area' => array(1,5),
'create_notify' => array(1,5),
'create_password_box' => array(1,3) 'create_password_box' => array(1,3)
); );
var $files = array(
'config.tpl' => 'config',
'hook_admin.inc.php' => 'file_admin',
'hook_preferences.inc.php' => 'file_preferences',
'hook_sidebox_menu.inc.php' => 'file',
'hook_acl_manager.inc.php' => 'acl_manager'
);
var $public_functions = array( var $public_functions = array(
'index' => True 'index' => True
@ -41,11 +49,112 @@
$this->db = $GLOBALS['phpgw']->db; $this->db = $GLOBALS['phpgw']->db;
} }
function parse_php_app($fd,$plist) function fetch_keys($app,$arr)
{
if (!is_array($arr))
{
return;
}
foreach($arr as $key => $val)
{
$this->plist[$key] = $app;
}
}
function config_file($app,$fname)
{
//echo "<p>solangfile::config_file(app='$app',fname='$fname')</p>\n";
$lines = file($fname);
if ($app != 'setup')
{
$app = 'admin';
}
foreach($lines as $n => $line)
{
while (ereg('\{lang_([^}]+)\}(.*)',$line,$found))
{
$lang = str_replace('_',' ',$found[1]);
$this->plist[$lang] = $app;
$line = $found[2];
}
}
}
function special_file($app,$fname,$langs_in)
{
//echo "<p>solangfile::special_file(app='$app',fname='$fname',langs_in='$langs_in')</p>\n";
switch ($langs_in)
{
case 'config':
$this->config_file($app,$fname);
return;
case 'file_admin':
case 'file_preferences':
$app = substr($langs_in,5);
break;
case 'phpgwapi':
$app = 'common';
break;
}
if (!function_exists('display_sidebox'))
{
function display_sidebox($appname,$menu_title,$file) // hook_sidebox_menu
{
unset($file['_NewLine_']);
$GLOBALS['file'] += $file;
}
function display_section($appname,$file,$file2='') // hook_preferences, hook_admin
{
if (is_array($file2))
{
$file = $file2;
}
$GLOBALS['file'] += $file;
}
}
$GLOBALS['file'] = array();
unset($GLOBALS['acl_manager']);
include($fname);
if (isset($GLOBALS['acl_manager'])) // hook_acl_manager
{
foreach($GLOBALS['acl_manager'] as $app => $data)
{
foreach ($data as $item => $arr)
{
foreach ($arr as $key => $val)
{
switch ($key)
{
case 'name':
$this->plist[$val] = $app;
break;
case 'rights':
foreach($val as $lang => $right)
{
$this->plist[$lang] = $app;
}
break;
}
}
}
}
}
if (count($GLOBALS['file'])) // hook_{admin|preferences|sidebox_menu}
{
foreach ($GLOBALS['file'] as $lang => $link)
{
$this->plist[$lang] = $app;
}
}
}
function parse_php_app($app,$fd)
{ {
$reg_expr = '('.implode('|',array_keys($this->functions)).")[ \t]*\([ \t]*(.*)$"; $reg_expr = '('.implode('|',array_keys($this->functions)).")[ \t]*\([ \t]*(.*)$";
define('SEP',filesystem_separator()); define('SEP',filesystem_separator());
list($app) = explode(SEP,$fd);
$d=dir($fd); $d=dir($fd);
while ($fn=$d->read()) while ($fn=$d->read())
{ {
@ -53,12 +162,20 @@
{ {
if (($fn!='.')&&($fn!='..')&&($fn!='CVS')) if (($fn!='.')&&($fn!='..')&&($fn!='CVS'))
{ {
$plist=$this->parse_php_app($fd.$fn.SEP,$plist); $this->parse_php_app($app,$fd.$fn.SEP);
} }
} }
elseif ((strpos($fn,'.php')>1) && (is_readable($fd.$fn))) elseif (is_readable($fd.$fn))
{ {
$lines = file($fd.SEP.$fn); if (isset($this->files[$fn]))
{
$this->special_file($app,$fd.$fn,$this->files[$fn]);
}
if (strpos($fn,'.php') === False)
{
continue;
}
$lines = file($fd.$fn);
foreach($lines as $n => $line) foreach($lines as $n => $line)
{ {
@ -91,8 +208,8 @@
//echo "next2=$next, phrase='$phrase'<br>\n"; //echo "next2=$next, phrase='$phrase'<br>\n";
if ($args[0] == $i) if ($args[0] == $i)
{ {
//if (!isset($plist[$phrase])) echo ">>>$phrase<<<<br>\n"; //if (!isset($this->plist[$phrase])) echo ">>>$phrase<<<<br>\n";
$plist[$phrase] = $app; $this->plist[$phrase] = $app;
array_shift($args); array_shift($args);
if (!count($args)) if (!count($args))
{ {
@ -101,7 +218,7 @@
} }
$rest = substr($rest,$next+1); $rest = substr($rest,$next+1);
} }
if(!ereg("[ \t\n]*,[ \t\n]*(.*)$",$rest,$parts)) if(!ereg("[ \t\n]*,[ \t\n]*(.*)$",$rest,$parts))
{ {
break; // nothing found break; // nothing found
} }
@ -113,7 +230,6 @@
} }
} }
$d->close(); $d->close();
return ($plist);
} }
function missing_app($app,$userlang=en) function missing_app($app,$userlang=en)
@ -121,61 +237,11 @@
$cur_lang=$this->load_app($app,$userlang); $cur_lang=$this->load_app($app,$userlang);
define('SEP',filesystem_separator()); define('SEP',filesystem_separator());
$fd = PHPGW_SERVER_ROOT . SEP . $app . SEP; $fd = PHPGW_SERVER_ROOT . SEP . $app . SEP;
$plist=array(); $this->plist = array();
$plist = $this->parse_php_app($fd,$plist); $this->parse_php_app($app == 'phpgwapi' ? 'common' : $app,$fd);
reset($plist);
return($plist);
}
/*! reset($this->plist);
@function add_app return($this->plist);
@abstract loads all app phrases into langarray
@param $lang user lang variable (defaults to en)
*/
function add_app($app,$userlang='en')
{
define('SEP',filesystem_separator());
$fd = PHPGW_SERVER_ROOT . SEP . $app . SEP . 'setup';
$fn = $fd . SEP . 'phpgw_' . $userlang . '.lang';
if (@is_writeable($fn) || is_writeable($fd))
{
$wr = True;
}
$this->src_apps = array($app => $app);
if (file_exists($fn))
{
$this->src_file = $fn;
$fp = fopen($fn,'rb');
while ($data = fgets($fp,8000))
{
list($message_id,$app_name,$null,$content) = explode("\t",$data);
if(!$message_id)
{
continue;
}
//echo '<br>add_app(): adding phrase: $this->langarray["'.$message_id.'"]=' . trim($content);
$_mess_id = strtolower(trim($message_id));
$app_name = trim($app_name);
$this->langarray[$_mess_id]['message_id'] = $_mess_id;
$this->langarray[$_mess_id]['app_name'] = $app_name;
$this->langarray[$_mess_id]['content'] = trim($content);
$this->src_apps[$app_name] = $app_name;
}
fclose($fp);
}
else
{
$this->src_file = lang('no file');
}
// stuff class array listing apps that are included already
$this->loaded_apps[$userlang]['filename'] = $fn;
$this->loaded_apps[$userlang]['writeable'] = $wr;
if($this->debug) { _debug_array($this->langarray); }
@ksort($this->langarray);
return $this->langarray;
} }
/*! /*!
@ -183,41 +249,54 @@
@abstract loads all app phrases into langarray @abstract loads all app phrases into langarray
@param $lang user lang variable (defaults to en) @param $lang user lang variable (defaults to en)
*/ */
function load_app($app,$userlang='en') function load_app($app,$userlang='en',$target=True)
{ {
define('SEP',filesystem_separator()); define('SEP',filesystem_separator());
$fd = PHPGW_SERVER_ROOT . SEP . $app . SEP . 'setup'; $langarray = array();
$fd = PHPGW_SERVER_ROOT . SEP . $app . SEP . ($app == 'setup' ? 'lang' : 'setup');
$fn = $fd . SEP . 'phpgw_' . $userlang . '.lang'; $fn = $fd . SEP . 'phpgw_' . $userlang . '.lang';
if (@is_writeable($fn) || is_writeable($fd)) if (@is_writeable($fn) || is_writeable($fd))
{ {
$wr = True; $wr = True;
} }
$from = $GLOBALS['phpgw']->translation->charset($userlang);
$to = $GLOBALS['phpgw']->translation->system_charset;
//echo "<p>solangfile::load_app('$app','$userlang') converting from charset('$userlang')='$from' to '$to'</p>\n";
if (file_exists($fn)) if (file_exists($fn))
{ {
$this->tgt_file = $fn;
if ($fp = @fopen($fn,'rb')) if ($fp = @fopen($fn,'rb'))
{ {
while ($data = fgets($fp,8000)) while ($data = fgets($fp,8000))
{ {
list($message_id,$app_name,$null,$content) = explode("\t",$data); list($message_id,$app_name,$null,$content) = explode("\t",$data);
if(!$message_id) if(!$message_id)
{ {
continue; continue;
} }
//echo '<br>add_app(): adding phrase: $this->langarray["'.$message_id.'"]=' . trim($content); //echo '<br>load_app(): adding phrase: $this->langarray["'.$message_id.'"]=' . trim($content);
$_mess_id = strtolower(trim($message_id)); $_mess_id = strtolower(trim($message_id));
$langarray[$_mess_id]['message_id'] = $_mess_id; $langarray[$_mess_id]['message_id'] = $_mess_id;
$langarray[$_mess_id]['app_name'] = trim($app_name); $langarray[$_mess_id]['app_name'] = trim($app_name);
$langarray[$_mess_id]['content'] = trim($content); $langarray[$_mess_id]['content'] =
$GLOBALS['phpgw']->translation->convert(trim($content),$from,$to);
} }
fclose($fp); fclose($fp);
} }
} }
else else
{ {
$this->tgt_file = lang('no file'); $fn = lang('no file');
}
if ($target)
{
$this->tgt_file = $fn;
}
else
{
$this->src_file = $fn;
} }
// stuff class array listing apps that are included already // stuff class array listing apps that are included already
$this->loaded_apps[$userlang]['filename'] = $fn; $this->loaded_apps[$userlang]['filename'] = $fn;
@ -251,9 +330,13 @@
return $languages; return $languages;
} }
function write_file($app_name,$langarray,$userlang) function write_file($app_name,$langarray,$userlang,$which='target')
{ {
$fn = PHPGW_SERVER_ROOT . SEP . $app_name . SEP . 'setup' . SEP . 'phpgw_' . $userlang . '.lang'; $to = $GLOBALS['phpgw']->translation->charset($userlang);
$from = $GLOBALS['phpgw']->translation->system_charset;
//echo "<p>solangfile::write_file('$app_name',,'$userlang') converting from '$from' to charset('$userlang')='$to'</p>\n";
$fn = PHPGW_SERVER_ROOT . SEP . $app_name . SEP . ($app_name == 'setup' ? 'lang' : 'setup') . SEP . 'phpgw_' . $userlang . '.lang';
if (file_exists($fn)) if (file_exists($fn))
{ {
$backup = $fn . '.old'; $backup = $fn . '.old';
@ -263,72 +346,31 @@
$fp = fopen($fn,'wb'); $fp = fopen($fn,'wb');
while(list($mess_id,$data) = @each($langarray)) while(list($mess_id,$data) = @each($langarray))
{ {
$data['content'] = $GLOBALS['phpgw']->translation->convert(trim($data['content']),$from,$to);
fwrite($fp,$mess_id . "\t" . $data['app_name'] . "\t" . $userlang . "\t" . $data['content'] . "\n"); fwrite($fp,$mess_id . "\t" . $data['app_name'] . "\t" . $userlang . "\t" . $data['content'] . "\n");
} }
fclose($fp); fclose($fp);
return;
if ($which == 'source')
{
$this->src_file = $fn;
}
else
{
$this->tgt_file = $fn;
}
return $fn;
} }
function loaddb($app_name,$userlang) function loaddb($app_name,$userlangs)
{ {
$this->db->transaction_begin(); if (!is_array($userlangs))
$langarray = $this->load_app($app_name,$userlang);
@reset($langarray);
while (list($x,$data) = @each($langarray))
{ {
if (strlen($data['message_id']) > MAX_MESSAGE_ID_LENGTH) $userlangs = array($userslangs => $userlangs);
{
$data['message_id'] = substr($data['message_id'],0,MAX_MESSAGE_ID_LENGTH);
}
$message_id = $this->db->db_addslashes(substr($data['message_id'],0,MAX_MESSAGE_ID_LENGTH));
$addit = False;
/*echo '<br><br><pre> checking ' . $data['message_id'] . "\t" . $data['app_name'] . "\t" . $userlang . "\t" . $data['content'];*/
$this->db->query("SELECT COUNT(*) FROM phpgw_lang"
." WHERE message_id='$message_id' AND lang='$userlang' AND app_name='$app_name'",__LINE__,__FILE__);
$this->db->next_record();
if ($this->db->f(0) == 0)
{
$addit = True;
/* echo '... no</pre>'; */
}
else
{
/* echo '... yes</pre>'; */
}
if ($addit)
{
if($data['message_id'] && $data['content'])
{
/* echo "<br>adding - insert into lang values ('" . $data['message_id'] . "','$app_name','$userlang','" . $data['content'] . "')"; */
$this->db->query("INSERT into phpgw_lang VALUES ('$message_id','$app_name','$userlang','"
. $this->db->db_addslashes($data['content']) . "')",__LINE__,__FILE__);
}
}
else
{
if($data['message_id'] && $data['content'])
{
$this->db->query("UPDATE phpgw_lang SET content='". $this->db->db_addslashes($data['content']) . "'"
. " WHERE message_id='message_id'"
. " AND app_name='$app_name' AND lang='$userlang'",__LINE__,__FILE__);
if ($this->db->affected_rows() > 0)
{
/*
echo "<br>changing - update lang set content='". $data['content'] . "'"
. " where message_id='" . $data['message_id'] ."'"
. " and app_name='$app_name' and lang='$userlang'";
*/
}
}
}
} }
$this->db->transaction_commit(); $GLOBALS['phpgw']->translation->install_langs($userlangs,'addmissing',$app_name);
return lang('done'); return lang('done');
} }
} }