';
$languages = array();
$unique_lines_in_eng_constitution = array();
$number_of_unique_lines_in_eng_constitution = 0;
foreach ($otherLangs as $l) {
$stats['en']['files'] += 1;
$stats[$l]['files'] = 0;
$stats[$l]['strings'] = 0;
if ($l == 'en' || $restore_languages) {
$link_one_language = '%s';
} else {
$link_one_language = '
%s';
}
$s = sprintf('
' . $link_one_language . ' %s | ',
$langs[$l], $l);
$cols = '';
$lang_coloumn = '';
foreach ($enFiles as $f) {
if (strrpos($f, '.pot')) {
$gettext = true;
$resource = _extract_resource($f);
$langF = _po_file_switch($f, $l);
} else {
$gettext = false;
$resource = _extract_resource($f, '.en.lang');
$langF = _lang_file_switch($f, $l);
}
$enStringsCount[$f] = 0;
if ($f == '../_nav/langs/en.lang') {
$nav = true;
$langF = '../_nav/langs/' . $l . '.lang';
} else {
$nav = false;
}
$link = str_replace('index', '', $resource);
if ($nav) {
$dest_en = sprintf('%s/%s/%s', G_APP_ROOT, '_nav/langs', 'en.lang');
$dest_l = sprintf('%s/%s/%s', G_APP_ROOT, '_nav/langs', $l . '.lang');
} else {
$dest_en = sprintf('%s/%s/%s/%s', G_APP_ROOT, 'en', $link, 'index.php');
$dest_l = sprintf('%s/%s/%s/%s', G_APP_ROOT, $l, $link, 'index.php');
}
// if symlink e.g. does directly translated page exist?
if ((realpath($dest_l) == realpath($dest_en)) || $nav) {
$page_not_linked = '';
$old_page = '';
} else {
$page_not_linked = sprintf('old page still exists!', $l, $link);
$old_page = sprintf('by recycling old page', $l, $link);
}
if (file_exists($langF)) {
$stats[$l]['files'] += 1;
if ($gettext) {
$test = _po_diff($l, $resource);
} else {
$test = _lang_diff($f, $langF);
}
$num_of_untranslated_strings = count($test['notrans']);
$num_of_duplicated_strings = count($test['dup_str']);
if ($link == 'about/constitution') {
$constitution_results = aproximate_number_of_untranslated_constitution_lines(G_APP_ROOT, $l, $unique_lines_in_eng_constitution);
if ($l == 'en') {
$unique_lines_in_eng_constitution = $constitution_results['unique_lines_in_constitution'];
$number_of_unique_lines_in_eng_constitution = count($unique_lines_in_eng_constitution);
}
$test['a'] += $number_of_unique_lines_in_eng_constitution; // add aproximate number of lines from constitution to translate
$num_of_untranslated_strings += $constitution_results['aproximate_number_of_untranslated_lines'];
}
if ($link == 'about/license') {
require_once('../en/about/license/license.php');
$license_array = read_license_from_vcs($l);
$license_numbers = array_pop($license_array);
$test['a'] += $license_numbers["all"]; // add aproximate number of untranslated sentences from license
$num_of_untranslated_strings += $license_numbers["untran"]; // add number of all license sentences
}
if ($nav) {
$mga = array();
$local_f = @file_get_contents('../_nav/langs/' . $l . '.lang');
$mognas_f = @file_get_contents('http://nav.mageia.org/langs/' . $l . '.lang');
if ($local_f != $mognas_f) {
$page_not_linked = 'difference in svn 1 & 2';
}
} else if ($link == 'downloads/get') {
$mga = array(
'view download OK page' => 'downloads/get/index.php?q=Mageia-2-dual-CD.iso&d=1" style="display: block;',
'and non existing file too' => 'downloads/get/index.php?q=Non_existing_file&d=1" style="display: block;',
);
} else if ($link == '2') {
$mga = array(
'A' => '2/index.php',
'B' => '2/download_index.php',
'C' => '2/for-pc/index.php',
'D' => '2/for-server/index.php',
);
} else if ($link == '3') {
$mga = array(
'A' => '3/index.php',
'B' => '3/download_index.php',
'C' => '3/for-pc/index.php',
'D' => '3/for-server/index.php',
);
} else if ($link == '4') {
$mga = array(
'A' => '4/index.php',
'B' => '4/download_index.php',
);
} else if ($link == 'documentation') {
$mga = array(
'doc' => 'doc/index.php',
'archive' => 'doc/archive.php',
);
} else {
$mga = array(
'view page' => $link,
);
}
$link = '';
foreach ($mga as $k => $v) {
$link .= sprintf('
%s', $l, $v, $k);
}
$link .= $page_not_linked . '
';
if (count($test['missing']) === 0
&& $num_of_untranslated_strings === 0) {
$extra = null;
if (count($test['extra']) > 0) {
$extra = ' ' . sprintf($diff_link, $f, $l) . '+' . count($test['extra']) . '';
}
if ($num_of_duplicated_strings > 0) {
$extra .= ' ' . sprintf($diff_link, $f, $l) . 'dup: ' . $num_of_duplicated_strings . '';
}
$cols .= sprintf('OK%s%s | ',
$langF, $extra, $link);
$done = $test['a'];
} else {
// special case, en
if ($l == 'en') {
$cols .= '' . $num_of_untranslated_strings . ' strings | ';
$enStringsCount[$f] += $test['a'];
$done = $test['a'];
// regular case
} else {
$cols .= sprintf('' . $diff_link,
$f, $l);
if (count($test['missing']) > 0) {
$cols .= count($test['missing']) . ' missing ';
}
if ($num_of_untranslated_strings > 0) {
$cols .= $num_of_untranslated_strings . ' untranslated ';
}
if (count($test['extra']) > 0) {
$cols .= count($test['extra']) . ' extra ';
}
if ($num_of_duplicated_strings > 0) {
$cols .= $num_of_duplicated_strings . ' duplicate';
$cols .= ($num_of_duplicated_strings > 1 ? 's' : '');
}
$cols .= '';
$cols .= $link . ' | ';
$done = $test['a'] - $num_of_untranslated_strings - count($test['missing']);
}
}
$stats[$l]['strings'] += $done;
} else {
$cols .= sprintf('add translation%s | ',
$f, $l, $old_page
);
}
$num_clmns_to_repeat = 9;
$num_of_col++;
if ($num_of_col % $num_clmns_to_repeat == 0 && $num_of_col <= count($enFiles) - ($num_clmns_to_repeat / 3)) {
if ($l == 'en') {
$cols .= $lang_coloumn = 'Language | ';
} else {
$cols .= $lang_coloumn = sprintf('' . $link_one_language . ' %s | ', $langs[$l], $l);
}
}
}
$cols .= $lang_coloumn; // last coloumn
$num_of_col = 0; // reset counter of coloumns
$progress = floor($stats[$l]['strings'] / $stats['en']['strings'] * 100);
// special case, en
if ($l == 'en') {
$s .= sprintf('%d strings | ', $stats[$l]['strings']);
// regular case
} else {
$s .= sprintf(
'%d%% %d / %d | ',
$progress,
$stats[$l]['strings'],
$stats['en']['strings']
);
}
$s .= $cols;
$s .= '
---|
' . PHP_EOL;
$languages[$stats[$l]['strings'] . '-' . $l] = $s;
}
$en_language = array_shift($languages); // shift English for proper sorting
krsort($languages, SORT_NUMERIC);
// add language coloumn repeating
$lang_line = array();
$num_of_h_col = 0;
$add_last_coloumn = FALSE;
$resources = ($restore_resources ? ' ' : count($enFiles) . ' resources');
foreach ($enFiles as $lang_chunk) {
$num_of_h_col++;
if ($restore_resources) {
$lang_line[] = str_replace('en/', '', $lang_chunk);
} else {
$lang_line[] = '
' . str_replace('en/', '', $lang_chunk) . '';
}
if ($num_of_h_col % $num_clmns_to_repeat == 0 && $num_of_h_col <= count($enFiles) - ($num_clmns_to_repeat / 3)) {
$lang_line[] = $resources;
$add_last_coloumn = TRUE;
}
}
if ($add_last_coloumn) {
$lang_line[] = $resources;// last h coloumn
}
$thfiles = '
' . implode(' | ', $lang_line) . ' | ' . PHP_EOL;
if ($restore_languages) {
echo '
Restore all languages.
';
$count = ' ';
} else {
$count = count($otherLangs) . ' languages';
}
if ($restore_resources) {
echo '
Restore all resources.
';
}
$chunks = array_chunk($languages, $num_lines_to_repeat = 8); // add header repeating
$table_body = array();
foreach ($chunks as $chunk) {
$table_body = array_merge($table_body, $chunk, array(count($chunk) > ($num_lines_to_repeat / 2) ? '
' . $count . ' | ' . $resources . ' | ' . $thfiles : ''));
}
array_unshift($table_body, $en_language); // unshift English back
$s = implode($table_body);
echo <<
{$count} |
Progress |
{$thfiles}
{$s}
S;
?>
---|