//**********************************************************************//
/* START parole che rimangono uguali nelle varie lingue */
//**********************************************************************//
$EQUALS_EXCLUSION = array(//minuscoli e senza spazi in cima e in fondo
"fax",
"email",
"e-mail",
"dvd",
"check in",
"check-in",
"check out",
"check-out",
"download",
" buchen",
"tennis",
"solarium",
"hotel",
"bed & breakfast",
"barbecue",
"villa",
"in",
"info",
"golf",
"internet wi-fi",
"password",
"newsletter",
);
$EREG_CLEANER = "/(am|pm|[^a-z])*/ims";//i caratteri matchati da questa espressione vengono tolti, se la stringa è vuota non viene considerata per i duplicati (toglie i numeri e am/pm)
//**********************************************************************//
/* END parole che rimangono uguali nelle varie lingue */
//**********************************************************************//
//**********************************************************************//
/* START chiavi di $TXT da ignorare */
//**********************************************************************//
$TXT_IGNORE = array(
"post_prenotada",//campo della mod_disponibilità, valorizzato solo in tedesco
);
//**********************************************************************//
/* END chiavi di $TXT da ignorare */
//**********************************************************************//
switch(count($LANG)){
//numero di versioni diverse che ci devono essere per ogni testo prima che sia considerato un errore e quindi messo nella lista dei testi da tradurre
case 1:
$TOLLERANZA = 1;
break;
case 2:
$TOLLERANZA = 2;
break;
default:
$TOLLERANZA = 3;
break;
}
$LC = array();//lang check
$TXTUTTI = array(); //tutte le chiavi lingua
$ERRORS = array();
$EQUALS = array();
//**********************************************************************//
/* START array con tutti i testi definiti */
//**********************************************************************//
foreach($LANG as $k=>$l){
$LC[$k] = (array)extractTexts($k);
$TXTUTTI = array_merge($TXTUTTI, (array)array_keys($LC[$k]));
}
$TXTUTTI = array_unique($TXTUTTI);
//**********************************************************************//
/* END array con tutti i testi definiti */
//**********************************************************************//
foreach($TXT_IGNORE as $k) if(($kk = array_search($k, $TXTUTTI)) !== false) unset($TXTUTTI[$kk]);
//**********************************************************************//
/* START controllo testi */
//**********************************************************************//
foreach($LANG as $k=>$l){
foreach($TXTUTTI as $t){
if(!isset($LC[$k][$t])) $ERRORS[$k][$t] = "non è settato";
else if($LC[$k][$t] === "") $ERRORS[$k][$t] = "è vuoto";
}
}
//**********************************************************************//
/* END controllo testi */
//**********************************************************************//
//**********************************************************************//
/* START controllo versioni duplicate */
//**********************************************************************//
foreach($TXTUTTI as $t){
if(!isset($ERRORS[$k][$t])){
$versioni = array();
$uguali = array();
foreach($LANG as $k=>$l){
$versioni[strtolower(trim($LC[$k][$t]))]++;
}
if(count(array_keys($versioni)) < count($LANG)){
//trovo la versione che ha più ripezioni
arsort($versioni, SORT_NUMERIC);
$piuripetuto = array_shift(array_keys($versioni));
if(in_array($piuripetuto, $EQUALS_EXCLUSION)) continue;
if(preg_replace($EREG_CLEANER, "", $piuripetuto) == '') continue;
foreach($LANG as $k=>$l) if(strtolower(trim($LC[$k][$t])) == $piuripetuto) $uguali[] = $k;
if(count(array_keys($versioni)) < $TOLLERANZA){
foreach($LANG as $k=>$l){//se è diverso solo in due lingue lo mando a tradurre
$ERRORS[$k][$t] = $uguali;
}
}
else $EQUALS[$t] = $uguali;
}
}
}
//**********************************************************************//
/* END controllo versioni duplicate */
//**********************************************************************//
?>
risultato controllo dei testi presenti nei file delle cartelle _pagine e _includes (e sottocartelle)
//**********************************************************************//
/* START stampo per traduzioni */
//**********************************************************************//
foreach($LANG as $k=>$l){
if($ERRORS[$k]){
echo " Da tradurre in $l (". count($ERRORS[$k]) . "):
";
echo "";
foreach($ERRORS[$k] as $t=>$e){
echo '$TXT["'.$t.'"] = "'.indi_htmlentities($LC["ita"][$t], $CONF['mcharset']).'";'."\n";
if(!isset($TABLE[$t])) $TABLE[$t] = $e;
}
echo '
';
}
else echo " Nessun testo da tradurre in $l
";
}
//**********************************************************************//
/* END stampo per traduzioni */
//**********************************************************************//
?>
if($TABLE) table("Riepilogo testi da tradurre (testi vuoti o con meno di $TOLLERANZA versioni per testo)", $TABLE);
echo '
';
if($EQUALS) table("Controllare questi testi uguali in almeno 2 lingue diverse", $EQUALS);
function table($titolo, $righe){
global $LANG, $LC;
echo "$titolo
";
echo '';
echo '';
echo "| $l | ";
foreach($LANG as $k=>$l) echo "$l | ";
echo '
';
$redstyle = ' style="color:red"';
foreach($righe as $t=>$e){
$celle = "$t | ";
foreach($LANG as $k=>$l){
$ok = false;
if(is_array($e)){//array equals (per i duplicati);
$ok = !in_array($k, $e);
$testo = '"'.indi_htmlentities($LC[$k][$t], $CONF['mcharset']).'"';
}
else if($LC[$k][$t] === "") $testo = "- vuoto -";
else if(!isset($LC[$k][$t])) $testo = "- non settato -";
else{
$testo = '"'.indi_htmlentities($LC[$k][$t], $CONF['mcharset']).'"';
$ok = true;
};
$celle .= " $testo | ";
}
echo "$celle
";
}
echo "
";
}
function dirToArray($dir, $exclude_subdirs = false){
$d = dir($dir);
while($value = $d->read()){
if($value != "." && $value != ".."){
if(!is_dir($dir."/".$value)) $return[] = $dir."/".$value;
else if(!$exclude_subdirs) $return = array_merge($return, dirToArray($dir."/".$value));
}
}
return $return;
}
function extractTexts($lang){
$return = (array)extractTxtFile("_includes/lang_$lang.inc.php");
$pages_files = dirToArray("_pagine");
$pages_files = array_merge((array)$pages_files, (array)dirToArray("_includes"));
// $pages_files = array_merge((array)$pages_files, (array)dirToArray("_include", 1));
// $pages_files = array_merge((array)$pages_files, (array)dirToArray("_template", 1));
foreach($pages_files as $f){
$return = array_merge($return, (array)extractTextsFileWithXxxMerge($f, $lang));
}
//quello che è in _includes/lang_$lang.inc.php sovrascrive il resto
$lang_file = "_includes/lang_$lang.inc.php";
if(is_file($lang_file)) $return = array_merge($return, (array)extractTxtFile($lang_file, $lang_file));
return $return;
}
function extractTextsFileWithXxxMerge($file, $key){
if(is_file($file)){
$TXT = extractTxtFile($file);
return array_merge((array)$TXT["xxx"], (array)$TXT[$key]);
}
}
function extractTxtFile($file){
if(is_file($file)){
preg_match_all('/\$TXT(\[[^\]]*?\])+\s*=\s*("|\').*?(?";
eval($e);
}
return $TXT;
}
}
?>