* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ echo ""; echo ""; echo ""; echo ""; echo "If you call this file with the argument \"?unused=true\" it searches for the translation strings that exist in en_US but are never used.
"; echo "IMPORTANT: that can take quite a lot of time (up to 10 minutes), you need to tune the max_execution_time on your php.ini accordingly.
"; echo "Happy translating :)
"; // STEP 1 - Search duplicates keys // directory containing the php and lang files $htdocs = "../../htdocs/"; // directory containing the english lang files $workdir = $htdocs."langs/en_US/"; $files = scandir($workdir); if (empty($files)) { echo "Can't scan workdir = ".$workdir; exit; } $exludefiles = array('.','..','README'); $files = array_diff($files,$exludefiles); $langstrings_3d = array(); $langstrings_full = array(); foreach ($files AS $file) { $path_file = pathinfo($file); // we're only interested in .lang files if ($path_file['extension']=='lang') { $content = file($workdir.$file); foreach ($content AS $line => $row) { // don't want comment lines if (substr($row,0,1) !== '#') { // don't want lines without the separator (why should those even be here, anyway...) if (strpos($row,'=')!==false) { $row_array = explode('=',$row); // $row_array[0] = key $langstrings_3d[$path_file['basename']][$line+1]=$row_array[0]; $langstrings_3dtrans[$path_file['basename']][$line+1]=$row_array[1]; $langstrings_full[]=$row_array[0]; $langstrings_dist[$row_array[0]]=$row_array[0]; } } } } } foreach ($langstrings_3d AS $filename => $file) { foreach ($file AS $linenum => $value) { $keys = array_keys($langstrings_full, $value); if (count($keys)>1) { foreach ($keys AS $key) { $dups[$value][$filename][$linenum] = trim($langstrings_3dtrans[$filename][$linenum]); } } } } echo "

Duplicate strings in lang files in $workdir - ".count($dups)." found

"; echo " "; echo ""; echo ""; $count = 0; foreach ($dups as $string => $pages) { $count++; echo ""; echo ""; echo ""; echo "\n"; } echo ""; echo "
#StringFile and lines
$count$string"; foreach ($pages AS $page => $lines ) { echo "$page "; foreach ($lines as $line => $translatedvalue) { //echo "($line - ".(substr($translatedvalue,0,20)).") "; echo "($line - ".htmlentities($translatedvalue).") "; } echo "
"; } echo "
"; // STEP 2 - Search key not used if (! empty($_REQUEST['unused']) && $_REQUEST['unused'] == 'true') { foreach ($langstrings_dist AS $value) { $search = '\'trans("'.$value.'")\''; $string = 'grep -R -m 1 -F --exclude=includes/* --include=*.php '.$search.' '.$htdocs.'*'; exec($string,$output); if (empty($output)) { $unused[$value] = true; echo $value.'
'; } } echo "

Strings in en_US that are never used

"; echo "
";
	print_r($unused);
	echo "
"; } echo "\n"; echo ""; echo "";