"; $input .= chr(60)."?php\n"; if ($old_kom == "") { // create CVS compatible description. $diz = chr(47)."*\n"; $diz .= " * e107 website system\n"; $diz .= " *\n"; $diz .= " * Copyright (C) 2008-2009 e107 Inc (e107.org)\n"; $diz .= " * Released under the terms and conditions of the\n"; $diz .= " * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)\n"; $diz .= " *\n"; $diz .= " * Language File\n"; $diz .= " *\n"; $diz .= " * ".chr(36)."Source: ".str_replace(array(e_LANGUAGEDIR, e_PLUGIN), array(e_LANGUAGEDIR_ABS, e_PLUGIN_ABS), $writeit)." ".chr(36)."\n"; $diz .= " * ".chr(36)."Revision: 1.0 ".chr(36)."\n"; $diz .= " * ".chr(36)."Date: ".date("Y/m/d H:i:s")." ".chr(36)."\n"; $diz .= " * ".chr(36)."Author: ".USERNAME." ".chr(36)."\n"; $diz .= " *\n"; $diz .= "*".chr(47)."\n\n"; } else { $diz = $old_kom; } $input .= $diz; $message .= str_replace("\n","
",$diz); for ($i=0; $i'.$notdef_end; $input .= $notdef_start."setlocale(".$defvar.",".$deflang.");".$notdef_end; } else { $message .= $notdef_start.$func.'('.$quote.htmlentities($defvar).$quote.',"'.$deflang.'");
'.$notdef_end; $input .= $notdef_start.$func."(".$quote.$defvar.$quote.", ".chr(34).$deflang.chr(34).");".$notdef_end; } } $message .="
"; $message .=""; $input .= "\n\n?>"; // Write to file. $fp = @fopen($writeit,"w"); if(!@fwrite($fp, $input)) { $caption = LAN_CHECK_PAGE_TITLE.' - '.LAN_ERROR; $message = ''; $emessage->add(LAN_CHECK_17, E_MESSAGE_ERROR); } else { $caption = LAN_CHECK_PAGE_TITLE.' - '.LAN_CHECK_24; $emessage->add(sprintf(LAN_CHECK_23, basename($writeit)), E_MESSAGE_SUCCESS); } fclose($writeit); $message .= "
".$frm->admin_button('language_sel', LAN_BACK)." ".$frm->hidden('language', $lan)."
"; $e107->ns->tablerender($caption, $emessage->render().$message); require_once(e_ADMIN."footer.php"); exit; } // ============================================================================ // Edit the Language File. if($f != ""){ if (!$mode) { $dir1 = e_BASE.$LANGUAGES_DIRECTORY."English/"; $f1=$f; $dir2 = e_BASE.$LANGUAGES_DIRECTORY.$lan."/"; $f2=$f; } else { $fullpath_orig = $f; $fullpath_trans = str_replace("English",$lan,$f); $f1 = basename($fullpath_orig); $f2 = basename($fullpath_trans); $dir1 = dirname($fullpath_orig)."/"; $dir2 = dirname($fullpath_trans)."/"; } $lck->edit_lanfiles($dir1,$dir2,$f1,$f2); } // =========================================================================== $core_plugins = array( "alt_auth", "banner_menu", "blogcalendar_menu", "calendar_menu", "chatbox_menu", "clock_menu", "comment_menu", "content", 'download', "featurebox", "forum", "gsitemap", "links_page", "linkwords", "list_new", "log", "login_menu", "newforumposts_main", "newsfeed", "newsletter", "online", "other_news_menu", "pdf", "pm", "poll", "rss_menu", "search_menu", "siteinfo", "trackback", "tree_menu", "user_menu" ); $core_themes = array("_blank", "e107v4a", "jayya", "khatru", "leaf", "vekna_blue"); if(isset($_POST['language_sel']) && isset($_POST['language'])) { $text = $lck->check_core_lanfiles($_POST['language']).$lck->check_core_lanfiles($_POST['language'],"admin/"); $text .= "
".ADLAN_CL_7." "; foreach($core_plugins as $plugs) { if(is_readable(e_PLUGIN.$plugs)) { $text .= $lck->check_lanfiles('P',$plugs,"English",$_POST['language']); } } $text .= "
".LAN_PLUGIN." ".LAN_CHECK_16." ".$_POST['language']." ".LAN_OPTIONS."
"; $text .= "
".LAN_CHECK_22." "; foreach($core_themes as $them) { if(is_readable(e_THEME.$them)) { $text .= $lck->check_lanfiles('T',$them,"English",$_POST['language']); } } $text .= "
".LAN_CHECK_21." ".LAN_CHECK_16." ".$_POST['language']." ".LAN_OPTIONS."
"; $mes = e107::getMessage(); if($lck->error_count == 0) { e107::getConfig()->setPref('lancheck/'.$_POST['language'],1); e107::getConfig()->save(FALSE); $mes->add(LAN_CHECK_27.''.$lck->error_count.'', E_MESSAGE_SUCCESS); } else { $mes->add(LAN_CHECK_27.''.$lck->error_count.'', E_MESSAGE_WARNING); } $ns->tablerender(LAN_CHECK_25, $mes->render(). $text); require_once(e_ADMIN."footer.php"); exit; } class lancheck { var $error_count=0; function check_core_lanfiles($checklan,$subdir=''){ global $frm; $English = $this->get_comp_lan_phrases(e_LANGUAGEDIR."English/".$subdir,$checklan); $check = $this->get_comp_lan_phrases(e_LANGUAGEDIR.$checklan."/".$subdir,$checklan); $legend_txt = LAN_CHECK_3.": ".$_POST['language']."/".$subdir; $fieldset_id = $subdir ? str_replace('/', '', $_POST['language'])."-".str_replace('/', '', $subdir) : str_replace('/', '', $_POST['language']); $text .= "
{$legend_txt} "; $keys = array_keys($English); sort($keys); $i = 0; foreach($keys as $k) { if($k != "bom") { $lnk = $k; $k_check = str_replace("English",$checklan,$k); $text .= " "; if(array_key_exists($k,$check)) { $text .= " "; $subkeys = array_keys($English[$k]); $er=""; $utf_error = ""; $bomkey = str_replace(".php","",$k_check); $bom_error = ($check['bom'][$bomkey]) ? "".LAN_CHECK_15."
" : ""; // illegal chars foreach($subkeys as $sk) { if($utf_error == "" && !$this->is_utf8($check[$k][$sk])) { $utf_error = "".LAN_CHECK_19."
"; } if($sk == "LC_ALL"){ $check[$k][$sk] = str_replace(chr(34).chr(34),"",$check[$k][$sk]); } if((!array_key_exists($sk,$check[$k]) && $English[$k][$sk] != "") || (trim($check[$k][$sk]) == "" && $English[$k][$sk] != "")) { $er .= ($er) ? "
" : ""; $er .= $sk." ".LAN_CHECK_5; $this->error_count++; } } $style = ($er) ? "warning" : "success"; $text .= " "; } else { // file missing $text .= " "; $this->error_count++; } // Leave in EDIT button for all entries - to allow re-translation of bad entries. $subpath = ($subdir!='') ? $subdir.$k : $k; $text .= " "; } $i++; } $text .= "
".LAN_CHECK_16." ".$_POST['language'].' '.LAN_CHECK_20." ".LAN_OPTIONS."
{$lnk}
"; $text .= $bom_error . $utf_error; if(!$er && !$bom_error && !$utf_error) { $text .= LAN_OK; } else { $text .= $er."
"; $this->error_count++; } $text .= "
{$lnk} ".LAN_CHECK_4." ".$frm->admin_button('but-corelan-'.str_replace(array('/', '\\'), '-', $subdir).$i, LAN_EDIT, 'edit', '', array('other' => "onclick=\"window.location='".e_SELF."?".$subpath."|".$_POST['language']."'\""))." "; $text .= "
"; return $text; } function get_lan_file_phrases($dir1,$dir2,$file1,$file2){ $ret = array(); $fname = $dir1.$file1; $type='orig'; if(is_file($fname)) { $data = file($fname); $ret=$ret + $this->fill_phrases_array($data,$type); if(substr($data[0],0,5) != "fill_phrases_array($data,$type); if(substr($data[0],0,5) != "get_files($comp_dir, '\.php','standard',$depth)){ sort($lang_array); } $regexp = (strpos($comp_dir,e_LANGUAGEDIR) !== FALSE) ? "#.php#" : "#".$lang."#"; foreach($lang_array as $f) { if(preg_match($regexp,$f['path'].$f['fname'])) { $data = file($f['path'].$f['fname']); $relpath = str_replace($comp_dir,"",$f['path']); if(substr($data[0],0,5) != "fill_phrases_array($data,$relpath.$f['fname']); } } return $ret; } // for plugins and themes - checks what kind of language files directory structure we have function check_lanfiles($mode, $comp_name, $base_lan="English", $target_lan) { global $frm; $folder['P'] = e_PLUGIN.$comp_name; $folder['T'] = e_THEME.$comp_name; $comp_dir = $folder[$mode]; $baselang = $this->get_comp_lan_phrases($comp_dir."/languages/","English",1); $check = $this->get_comp_lan_phrases($comp_dir."/languages/",$target_lan,1); $text = ""; $keys = array_keys($baselang); sort($keys); $i = 0; foreach($keys as $k) { $lnk = $k; //echo "klucz ".$k."
"; $k_check = str_replace("English",$target_lan,$k); $text .= " "; if(array_key_exists($k_check,$check)) { $text .= " ".$comp_name." ".str_replace("English/","",$lnk)." "; $subkeys = array_keys($baselang[$k]); $er = ""; $utf_error = ""; $bomkey = str_replace(".php","",$k_check); $bom_error = ($check['bom'][$bomkey]) ? "".LAN_CHECK_15."
" : ""; // illegal chars foreach($subkeys as $sk) { if($utf_error == "" && !$this->is_utf8($check[$k_check][$sk])) { $utf_error = "".LAN_CHECK_19."
"; } if(!array_key_exists($sk,$check[$k_check]) || (trim($check[$k_check][$sk]) == "" && $baselang[$k][$sk] != "")) { $er .= ($er) ? "
" : ""; $er .= $sk." ".LAN_CHECK_5; $this->error_count++; } } $style = ($er) ? "warning" : "success"; $text .= "
"; $text .= $bom_error . $utf_error; $text .= (!$er && !$bom_error && !$utf_error) ? LAN_OK : $er."
"; $text .= "
"; } else { $text .= " ".$comp_name." ".str_replace("English/","",$lnk)." ".LAN_CHECK_4." "; $this->error_count++; } $text .=" ".$frm->admin_button('but-corelan-'.str_replace(array('/', '\\'), '-', $comp_dir).$i, LAN_EDIT, 'edit', '', array('other'=> "onclick=\"window.location='".e_SELF."?".$comp_dir."/languages/".$lnk."|".$target_lan."|file'\""))." "; $text .=" "; $i++; } return $text; } function edit_lanfiles($dir1,$dir2,$f1,$f2){ global $e107, $emessage, $lan; /* echo "
dir1 = $dir1"; echo "
file1 = $f1"; echo "
dir2 = $dir2"; echo "
file2 = $f2";*/ if($dir2.$f2 == e_LANGUAGEDIR.$lan."/English.php") // it's a language config file. { $f2 = $lan.".php"; $root_file = e_LANGUAGEDIR.$lan."/".$lan.".php"; } else { $root_file = $dir2.$f2; } if($dir2.$f2 == e_LANGUAGEDIR.$lan."/English_custom.php") // it's a language config file. { $f2 = $lan."_custom.php"; $root_file = e_LANGUAGEDIR.$lan."/".$lan."_custom.php"; } $writable = (is_writable($dir2)) ? TRUE : FALSE; $trans = $this->get_lan_file_phrases($dir1,$dir2,$f1,$f2); $keys = array_keys($trans); sort($keys); $text = "
".LAN_CHECK_3." ".str_replace(array(e_PLUGIN, e_LANGUAGEDIR), array(e_PLUGIN_ABS, e_LANGUAGEDIR_ABS), $dir2)."{$f2} -> {$lan} "; $subkeys = array_keys($trans['orig']); foreach($subkeys as $sk) { $rowamount = round(strlen($trans['orig'][$sk])/34)+1; $hglt1=""; $hglt2=""; if ($trans['tran'][$sk] == "" && $trans['orig'][$sk]!="") { $hglt1=""; $hglt2=""; } $text .= " "; } $text .= "
  ".LAN_CHECK_16." Translate to ".$lan."
".$hglt1.htmlentities($sk).$hglt2." ".htmlentities(str_replace("ndef++", "", $trans['orig'][$sk])) ." ".(($writable) ? "" : "")." "; //echo "orig --> ".$trans['orig'][$sk]."
"; if (strpos($trans['orig'][$sk],"ndef++") !== False) { //echo "+orig --> ".$trans['orig'][$sk]." <> ".strpos($trans['orig'][$sk],"ndef++")."
"; $text .= " "; } else { $text .= " "; } $text .="
"; //Check if directory is writable if($writable) { //FIXME place of LAN_SAVE $text .="
".(($root_file) ? "" : "")."
"; } $text .= "
"; $text .= "
".((!$writable) ? $dir2.$f2.LAN_NOTWRITABLE : "")."
"; $e107->ns->tablerender(LAN_CHECK_PAGE_TITLE.' - '.LAN_CHECK_24, $text); require_once(e_ADMIN."footer.php"); exit; } function fill_phrases_array($data,$type) { $retloc = array(); foreach($data as $line){ //echo "line--> ".$line."
"; if (strpos($line,"define(") !== FALSE && strpos($line,");") === FALSE) { $indef=1; $bigline=""; // echo "big1 -->".$line."
"; } if ($indef) { $bigline.=str_replace("\n","",$line); // echo "big2 -->".$line."
"; } if (strpos($line,"define(") === FALSE && strpos($line,");") !== FALSE) { $indef=0; $we_have_bigline=1; // echo "big3 -->".$line."
"; } if(strpos($line,"setlocale(") !== FALSE) { $indef=1; $we_have_bigline=0; } if ((strpos($line,"define(") !== FALSE && strpos($line,");") !== FALSE && substr(ltrim($line),0,2) != "//") || $we_have_bigline || strpos($line,"setlocale(") !== FALSE) { if ($we_have_bigline) { $we_have_bigline=0; $line=$bigline; // echo "big -->".$line."
"; } $ndef = ""; //echo "_ndefline -->".$line."
"; if (strpos($line,"defined(") !== FALSE ) { $ndef = "ndef++"; $line = substr($line,strpos($line,"define(")); } if(strpos($line,"setlocale(") !== FALSE) { $pos = substr(strstr($line,","),1); $rep = array(");","\n",'""'); $val = str_replace($rep,"",$pos); $retloc[$type]['LC_ALL']= $val; // $retloc['orig']['LC_ALL']= "'en'"; } else { //echo "ndefline: ".$line."
"; if(preg_match("#\"(.*?)\".*?\"(.*)\"#",$line,$matches) || preg_match("#\'(.*?)\'.*?\"(.*)\"#",$line,$matches) || preg_match("#\"(.*?)\".*?\'(.*)\'#",$line,$matches) || preg_match("#\'(.*?)\'.*?\'(.*)\'#",$line,$matches) || preg_match("#\((.*?)\,.*?\"(.*)\"#",$line,$matches) || preg_match("#\((.*?)\,.*?\'(.*)\'#",$line,$matches)) { //echo "get_lan -->".$matches[1]." :: ".$ndef.$matches[2]."
"; if(!isset($retloc[$type][$matches[1]])) { $retloc[$type][$matches[1]]= $ndef.$matches[2]; } } } } } return $retloc; } //-------------------------------------------------------------------- function is_utf8($str) { /* * @see http://hsivonen.iki.fi/php-utf8/ validation.php */ //@TODO: always TRUE // if(strtolower(CHARSET) != "utf-8" || $str == "") { return TRUE; } return (preg_match('/^.{1}/us',$str,$ar) == 1); } } function lancheck_adminmenu() { include_lan(e_LANGUAGEDIR.e_LANGUAGE."/admin/lan_language.php"); global $action,$pref; if ($action == "") { $action = "tools"; } if($action == "modify"){ $action = "db"; } $var['main']['text'] = LAN_PREFS; $var['main']['link'] = e_ADMIN_ABS."language.php"; if(isset($pref['multilanguage']) && $pref['multilanguage']){ $var['db']['text'] = LANG_LAN_03; $var['db']['link'] = e_ADMIN_ABS."language.php?db"; } $var['tools']['text'] = ADLAN_CL_6; $var['tools']['link'] = e_ADMIN_ABS."language.php?tools"; e_admin_menu(ADLAN_132, $action, $var); } $ns -> tablerender(LAN_CHECK_PAGE_TITLE.' - '.LAN_CHECK_1, LAN_CHECK_26); require_once(e_ADMIN."footer.php");