* * 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, 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301 USA */ require_once(dirname(__FILE__)."/pfctools.php"); function _pfc() { $args = func_get_args(); $serverid = isset($GLOBALS['serverid']) ? $GLOBALS['serverid'] : 0; // serverid is used to avoid conflicts with external code using same 'i18n' key $args[0] = isset($GLOBALS[$serverid]["i18n"][$args[0]]) && $GLOBALS[$serverid]["i18n"][$args[0]] != "" ? ($GLOBALS["output_encoding"] == "UTF-8" ? $GLOBALS[$serverid]["i18n"][$args[0]] : iconv("UTF-8", $GLOBALS["output_encoding"], $GLOBALS[$serverid]["i18n"][$args[0]])) : "_".$args[0]."_"; return call_user_func_array('sprintf', $args); } /** * Just like _pfc but just return the raw translated string, keeping the %s into it * (used by the javascript resources (i18n) class) */ function _pfc2() { $args = func_get_args(); $serverid = isset($GLOBALS['serverid']) ? $GLOBALS['serverid'] : 0; // serverid is used to avoid conflicts with external code using same 'i18n' key $args[0] = isset($GLOBALS[$serverid]["i18n"][$args[0]]) && $GLOBALS[$serverid]["i18n"][$args[0]] != "" ? ($GLOBALS["output_encoding"] == "UTF-8" ? $GLOBALS[$serverid]["i18n"][$args[0]] : iconv("UTF-8", $GLOBALS["output_encoding"], $GLOBALS[$serverid]["i18n"][$args[0]])) : "_".$args[0]."_"; return $args[0]; } class pfcI18N { function Init($language,$type="main") { if ($type=="admin") if (!in_array($language, pfcI18N::GetAcceptedLanguage("admin"))) $language = pfcI18N::GetDefaultLanguage(); if (!in_array($language, pfcI18N::GetAcceptedLanguage())) $language = pfcI18N::GetDefaultLanguage(); if ($type=="admin") require_once(dirname(__FILE__)."/../i18n/".$language."/admin.php"); else require_once(dirname(__FILE__)."/../i18n/".$language."/main.php"); $serverid = isset($GLOBALS['serverid']) ? $GLOBALS['serverid'] : 0; // serverid is used to avoid conflicts with external code using same 'i18n' key $GLOBALS[$serverid]['i18n'] = $GLOBALS['i18n']; // do not pass by reference because $GLOBALS['i18n'] is maybe used by unknown external code $GLOBALS["output_encoding"] = "UTF-8"; // by default client/server communication is utf8 encoded } /** * Switch output encoding in order to write the right characteres in the web page */ function SwitchOutputEncoding($oe = "") { if ($oe == "") { $GLOBALS["output_encoding"] = $GLOBALS["old_output_encoding"]; unset($GLOBALS["old_output_encoding"]); } else { if (isset($GLOBALS["old_output_encoding"])) die("old_output_encoding must be empty (".$GLOBALS["old_output_encoding"].")"); $GLOBALS["old_output_encoding"] = $GLOBALS["output_encoding"]; $GLOBALS["output_encoding"] = $oe; } } /** * Return the default language : "en" */ function GetDefaultLanguage() { return "en_US"; } /** * Return the language list supported bye i18n system * (content of the i18n directory) */ function GetAcceptedLanguage($type="main") { return /**/array('nl_NL','ko_KR','nl_BE','tr_TR','pt_PT','en_US','eo','hr_HR','vi_VN','es_ES','zh_TW','nn_NO','ru_RU','id_ID','hu_HU','th_TH','hy_AM','oc_FR','da_DK','de_DE-formal','uk_RO','nb_NO','fr_FR','it_IT','sv_SE','uk_UA','sr_CS','ar_LB','bg_BG','pt_BR','ba_BA','bn_BD','el_GR','zh_CN','gl_ES','pl_PL','de_DE-informal','ja_JP');/**/ } /** * Parse the source-code and update the i18n ressources files */ function UpdateMessageRessources() { // first of all, update the GetAcceptedLanguage list $i18n_basepath = dirname(__FILE__).'/../i18n'; $i18n_accepted_lang = array(); $dh = opendir($i18n_basepath); while (false !== ($file = readdir($dh))) { // skip . and .. generic files, skip also .svn directory if ($file == "." || $file == ".." || strpos($file,".")===0) continue; if (file_exists($i18n_basepath.'/'.$file.'/main.php')) $i18n_accepted_lang[] = $file; } closedir($dh); $i18n_accepted_lang_str = "array('" . implode("','", $i18n_accepted_lang) . "');"; $data = file_get_contents_flock(__FILE__); $data = preg_replace("/(\/\*\*\/)(.*)(\/\*<\/GetAcceptedLanguage>\*\/)/", "$1".$i18n_accepted_lang_str."$3", $data); file_put_contents(__FILE__, $data, LOCK_EX); // Now scan the source code in order to find "_pfc" patterns $files = array(); $files = array_merge($files, glob(dirname(__FILE__)."/*.php")); $files = array_merge($files, glob(dirname(__FILE__)."/commands/*.php")); $files = array_merge($files, glob(dirname(__FILE__)."/containers/*.php")); $files = array_merge($files, glob(dirname(__FILE__)."/proxies/*.php")); $files = array_merge($files, glob(dirname(__FILE__)."/client/*.php")); $files = array_merge($files, glob(dirname(__FILE__)."/../themes/default/*.php")); $res = array(); foreach ( $files as $src_filename ) { $lines = file($src_filename); $line_nb = 1; foreach( $lines as $l) { // the labels server side if( preg_match_all('/_pfc\("([^\"]+)"/', $l, $matches) ) { foreach($matches[1] as $label) { echo "line: ".$line_nb."\t- ".$label."\n"; $res[$label] = "// line ".$line_nb." in ".basename($src_filename); } } // the labels client side (JS) if( preg_match_all('/"([^"]*)",\s\/\/\s_pfc/', $l, $matches) ) { echo "line: ".$line_nb."\t- ".$matches[1][0]."\n"; $res[$matches[1][0]] = "// line ".$line_nb." in ".basename($src_filename); } $line_nb++; } } $dst_filenames = array(); foreach($i18n_accepted_lang as $lg) $dst_filenames[] = dirname(__FILE__)."/../i18n/".$lg."/main.php"; foreach( $dst_filenames as $dst_filename ) { // filter lines to keep, line to add $old_content = file_get_contents_flock($dst_filename); // remove php tags to keep only real content $old_content = preg_replace("/^\<\?php/", "", $old_content); $old_content = preg_replace("/\?\>$/", "", $old_content); // save into the file $new_content = ""; foreach($res as $str => $com) { //echo "com=".$com."\n"; //echo "str=".$str."\n"; if (preg_match("/".preg_quote($str,'/')."/", $old_content) == 0) $new_content .= $com."\n\$GLOBALS[\"i18n\"][\"".$str."\"] = \"\";\n\n"; } $content = ""; //echo $content; file_put_contents($dst_filename, $content, LOCK_EX); } } } ?>