diff options
author | Filip Komar <filip@mageia.org> | 2014-05-01 15:51:34 +0000 |
---|---|---|
committer | Filip Komar <filip@mageia.org> | 2014-05-01 15:51:34 +0000 |
commit | 8faab456a92c1eb1ed2592c9d981c6eeb3f06f13 (patch) | |
tree | 8b09a2b02ffae1e2726e780158c2b045c07ca1d4 /langs/report_test.php | |
parent | 7f84afb87b23e966ae2e0063888602275cab9876 (diff) | |
download | www-8faab456a92c1eb1ed2592c9d981c6eeb3f06f13.tar www-8faab456a92c1eb1ed2592c9d981c6eeb3f06f13.tar.gz www-8faab456a92c1eb1ed2592c9d981c6eeb3f06f13.tar.bz2 www-8faab456a92c1eb1ed2592c9d981c6eeb3f06f13.tar.xz www-8faab456a92c1eb1ed2592c9d981c6eeb3f06f13.zip |
workaround for timeouts of report
Diffstat (limited to 'langs/report_test.php')
-rw-r--r-- | langs/report_test.php | 483 |
1 files changed, 483 insertions, 0 deletions
diff --git a/langs/report_test.php b/langs/report_test.php new file mode 100644 index 000000000..66ec7da4c --- /dev/null +++ b/langs/report_test.php @@ -0,0 +1,483 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="robots" content="noindex,nofollow,nosnippet"> + <title>www.mageia.org translation report</title> + <style> + html, body { margin: 0; padding: 0; font-family: Verdana, "Trebuchet MS", "Lucida Grande", "Lucida Sans", Verdana, Tahoma, Arial, sans-serif; } + #page { padding: 1em; position: absolute; top: 128px; } + th { text-align: left; } + .ok a { + text-decoration: none; + color: inherit; + } + .ok { color: darkgreen; background: lightgreen; } + .ok, .strings, .missing { text-align: center; } + .number { text-align: right; } + .strings { background: orange; } + .strings, .missing, .small { font-size: 80%; } + td, th { vertical-align: top; font-family: Arial; font-size: 80%; padding: 0.3em; } + td { vertical-align: middle; } + .action { font-size: smaller; display: block; text-align: center; + text-decoration: none; padding: 0.3em 0.5em; border-radius: 3px; + background: rgba(0, 0, 0, 0.1); margin: 0.5em 0; } + .partial { display: inline; margin-left: 0.3em; margin-top: 0.3em; } + .addlang { color: #333; } + </style> +</head> +<body class="contribute"> + <header id="mgnavt"> + <h1><a href="//www.mageia.org/">www.mageia.org</a> translation report</h1> + <ul> + <li>Please check <a href="https://wiki.mageia.org/en/Internationalisation_Team_(i18n)#Website_translation">localization Wiki page</a> for special cases for navigation and some web pages like <a href="https://wiki.mageia.org/en/Internationalisation_Team_%28i18n%29#Special_cases_of_web_pages">downloads/get, constitution, license...</a></li> + </ul> + </header> + <div id="page"> + <?php + /** + */ + function time_debug($name) { + static $start_of_microtime = NULL; + if($start_of_microtime === NULL) { + $start_of_microtime = microtime(TRUE); + + return array($name, number_format(0, 3), number_format(0, 3)); + } + static $previus_microtime = NULL; + if($previus_microtime === NULL) { + $previus_microtime = $start_of_microtime; + } + $current_microtime = microtime(true); + + $array = array($name, number_format($current_microtime - $previus_microtime, 3), number_format($current_microtime - $start_of_microtime, 3)); + $previus_microtime = $current_microtime; + + return $array; + } + $times[] = time_debug('start_time'); + include 'lib.php'; + $times[] = time_debug('lib.php'); + $one_language = isset($_GET['l']) ? strip_tags(trim($_GET['l'])) : null; + $one_resource = isset($_GET['r']) ? strip_tags(trim($_GET['r'])) : null; + + $restore_languages = FALSE; + $restore_resources = FALSE; + + if (isset($one_resource) && $one_resource != 'all') { + $enFiles = array($one_resource); + $restore_resources = TRUE; + } else { + $enFiles = array_merge(array('../_nav/langs/en.pot'), get_lang_references('*.lang'), get_lang_references('*.pot')); // added navigation file +/* START OF A WORKAROUND FOR TIMEOUTS */ + foreach($enFiles as $enFile) { + if($enFile != 'en/about/license.pot' && $enFile != '../_nav/langs/en.pot') { + $enFiles_tmp[] = $enFile; + } + } + $enFiles = $enFiles_tmp; +/* END OF A WORKAROUND FOR TIMEOUTS */ + sort($enFiles); + } + $num_of_enFiles = count($enFiles); + + if (isset($one_language) && $one_language != 'all') { + $otherLangs = array('en', $one_language); + $restore_languages = TRUE; + } else { + $otherLangs = get_other_langs(); + } + $times[] = time_debug('get_other_langs'); + + $enStringsCount = array(); + $report = array(); + $stats = array(); + $stats['en']['files'] = 0; + $num_of_col = 0; + + $diff_link = '<a href="diff.php?s=%s&l=%s" title="see detailed diff">'; + + $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 = '<a href="?l=' . $l . '" title="see this language only">%s</a>'; + } + + $s = sprintf('<tr><th>' . $link_one_language . '<br><span style="font-weight: normal; font-size: smaller;">%s</span></th>', + $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 (false !== strstr($f, '../_nav/langs/en.')) { + $nav = true; + $langF = '../_nav/langs/' . $l . '.po' . (($l == 'en') ? 't' : ''); + } else { + $nav = false; + } + + $link = str_replace('index', '', $resource); + if ($nav) { + $dest_en = sprintf('%s/%s/%s', G_APP_ROOT, '_nav/langs', 'en.pot'); + $dest_l = sprintf('%s/%s/%s', G_APP_ROOT, '_nav/langs', $l . '.po'); + } 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'); + } + + $times[] = time_debug('pre realpath ' . $f); + // 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('<a href="/%s/%s">old page</a> still exists!', $l, $link); + $old_page = sprintf('by recycling <a href="/%s/%s">old page</a>', $l, $link); + } + $times[] = time_debug('post realpath'); + + $add_translation = sprintf('<td class="missing"><a href="missing.php?s=%s&l=%s" class="action addlang">add translation</a>%s</td>', + $f, $l, $old_page + ); + + if (file_exists($langF)) { + + $times[] = time_debug('file_exists'); + $stats[$l]['files'] += 1; + + if ($gettext) { + $test = _po_diff($l, $resource); + $num_of_missing_strings = 0; + $num_of_fuzzy_or_missing_strings = count($test['fuzzy_or_missing']); + } else { + $test = _lang_diff($f, $langF); + $num_of_missing_strings = count($test['missing']); + $num_of_fuzzy_or_missing_strings = 0; + } + $times[] = time_debug('_diff ' . $l . ' '. $f); + $num_of_untranslated_strings = count($test['notrans']); + $num_of_duplicated_strings = count($test['dup_str']); + $num_of_extra_strings = count($test['extra']); + + 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']; + } + $times[] = time_debug('aproximate_number_of_untranslated_constitution_lines'); + if ($link == 'about/license') { + require_once('../en/about/license/license.php'); + $times[] = time_debug('require_once ' . $l); + $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 + } + $times[] = time_debug('read_license_from_vcs ' . $l); + + if ($nav) { + $mga = array(); + $local_f = @file_get_contents('../_nav/langs/' . $l . '.po'); + $times[] = time_debug('local_f ' . $l); + $mognas_f = @file_get_contents('http://nav.mageia.org/langs/' . $l . '.po'); + $times[] = time_debug('mognas_f ' . $l); + if ($local_f != $mognas_f) { + $page_not_linked = 'difference in svn <a class="action partial" href="//svnweb.mageia.org/web/www/trunk/_nav/langs/">1</a> & <a class="action partial" href="//svnweb.mageia.org/web/nav/langs/">2</a>'; + } + } else if ($link == 'downloads/get') { + $mga = array( + 'A' => 'downloads/get/index.php?q=Mageia-2-dual-CD.iso&d=1', // " style="display: block; + 'B' => 'downloads/get/index.php?q=Non_existing_file&d=1', + ); + } 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 == 'cauldron') { + $mga = array( + 'view page' => '5/download_index.php', + ); + } else if ($link == 'documentation') { + $mga = array( + 'doc' => 'doc/index.php', + 'archive' => 'doc/archive.php', + ); + } else { + $mga = array( + 'view page' => $link, + ); + } + $link = '<div>'; + foreach ($mga as $k => $v) { + $link .= sprintf('<a href="/%s/%s" class="action partial">%s</a>', $l, $v, $k); + } + $link .= $page_not_linked . '</div>'; + + if ($num_of_missing_strings === 0 + && $num_of_fuzzy_or_missing_strings === 0 + && $num_of_untranslated_strings === 0) { + + $extra = null; + if ($num_of_extra_strings > 0) { + $extra = ' <span class="small">' . sprintf($diff_link, $f, $l) . '+' . $num_of_extra_strings . '</a></span>'; + } + if ($num_of_duplicated_strings > 0) { + $extra .= ' <span class="small">' . sprintf($diff_link, $f, $l) . 'dup: ' . $num_of_duplicated_strings . '</a></span>'; + } + + $cols .= sprintf('<td class="ok"><a href="%s" title="get a copy of the file">OK</a>%s%s</td>', + $langF, $extra, $link); + + $done = $test['a']; + } else { + // special case, en + if ($l == 'en') { + $cols .= '<td class="number">' . $num_of_untranslated_strings . ' strings</td>'; + $enStringsCount[$f] += $test['a']; + $done = $test['a']; + + // regular case + } else { + + if(($num_of_missing_strings + $num_of_fuzzy_or_missing_strings + $num_of_untranslated_strings) < $test['a']) { + $cols .= sprintf('<td class="strings">' . $diff_link, $f, $l); + + if ($num_of_missing_strings > 0) { + $cols .= $num_of_missing_strings . ' missing<br>'; + } + if ($num_of_fuzzy_or_missing_strings > 0) { + $cols .= $num_of_fuzzy_or_missing_strings . ' fuzzy or missing<br>'; + } + if ($num_of_untranslated_strings > 0) { + $cols .= $num_of_untranslated_strings . ' untranslated<br>'; + } + if ($num_of_extra_strings > 0) { + $cols .= $num_of_extra_strings . ' extra<br>'; + } + if ($num_of_duplicated_strings > 0) { + $cols .= $num_of_duplicated_strings . ' duplicate'; + $cols .= ($num_of_duplicated_strings > 1 ? 's' : ''); + } + $cols .= '</a>'; + $cols .= $link . '</td>'; + } else { + $cols .= $add_translation; + } + $done = $test['a'] - $num_of_untranslated_strings - $num_of_missing_strings - $num_of_fuzzy_or_missing_strings; + } + } + $stats[$l]['strings'] += $done; + + } else { + $cols .= $add_translation; + } + $num_clmns_to_repeat = 9; + $num_of_col++; + if ($num_of_col % $num_clmns_to_repeat == 0 && $num_of_col <= $num_of_enFiles - ($num_clmns_to_repeat / 3)) { + if ($l == 'en') { + $cols .= $lang_coloumn = '<td style="font-weight: bold;">Language</td>'; + } else { + $cols .= $lang_coloumn = sprintf('<td style="font-weight: bold; vertical-align: top;">' . $link_one_language . '<br><span style="font-weight: normal; font-size: smaller;">%s</span></td>', $langs[$l], $l); + } + } + } + $cols .= $lang_coloumn; // last coloumn + $num_of_col = 0; // reset counter of coloumns + + $times[] = time_debug('progress'); + $progress = floor($stats[$l]['strings'] / $stats['en']['strings'] * 100); + // special case, en + if ($l == 'en') { + $s .= sprintf('<td class="number">%d strings</td>', $stats[$l]['strings']); + // regular case + } else { + $s .= sprintf( + '<td class="number">%d%%<br><span style="font-size: smaller;">%d / %d</span></td>', + $progress, + $stats[$l]['strings'], + $stats['en']['strings'] + ); + } + $s .= $cols; + $s .= '</tr>' . PHP_EOL; + $languages[$stats[$l]['strings'] . '-' . $l] = $s; + } + $en_language = array_shift($languages); // shift English for proper sorting + krsort($languages, SORT_NUMERIC); + $times[] = time_debug('krsort'); + + // add language coloumn repeating + $lang_line = array(); + $num_of_h_col = 0; + $add_last_coloumn = FALSE; + $resources = ($restore_resources ? ' ' : $num_of_enFiles . ' resources'); + foreach ($enFiles as $lang_chunk) { + $num_of_h_col++; + if ($restore_resources) { + $lang_line[] = str_replace('en/', '', $lang_chunk); + } else { + $lang_line[] = '<a href="?r=' . $lang_chunk . '" title="see only this resource">' . str_replace('en/', '', $lang_chunk) . '</a>'; + } + if ($num_of_h_col % $num_clmns_to_repeat == 0 && $num_of_h_col <= $num_of_enFiles - ($num_clmns_to_repeat / 3)) { + $lang_line[] = $resources; + $add_last_coloumn = TRUE; + } + } + if ($add_last_coloumn) { + $lang_line[] = $resources;// last h coloumn + } + + $thfiles = '<th>' . implode('</th><th>', $lang_line) . '</th>' . PHP_EOL; + if ($restore_languages) { + echo '<p>Restore <a href="?l=all" title="see all languages">all languages</a>.</p>'; + $count = ' '; + } else { + $count = count($otherLangs) . ' languages'; + } + if ($restore_resources) { + echo '<p>Restore <a href="?r=all" title="see all resources">all resources</a>.</p>'; + } + $chunks = array_chunk($languages, $num_lines_to_repeat = 8); // add header repeating + $table_body = array(); + $times[] = time_debug('table_body'); + foreach ($chunks as $chunk) { + $table_body = array_merge($table_body, $chunk, array(count($chunk) > ($num_lines_to_repeat / 2) ? '<tr><th>' . $count . '</th><th>' . $resources . '</th>' . $thfiles : '')); + } + array_unshift($table_body, $en_language); // unshift English back + $s = implode($table_body); + + + echo <<<S +<table border="1"> +<thead><tr> + <th>{$count}</th> + <th>Progress</th> + {$thfiles} +</tr></thead> +<tbody> +{$s} +</tbody> +</table> + +<hr> +S; + +/* START OF DEBUG LINES */ +$times[] = time_debug('end_time'); + +$sum = 0; +$read_license_from_vcs_ = array(); +$mognas_f_ = array(); +$_diff_ = array(); +foreach ($times as $time) { + if($time[1] >= 0.01) { + $snails[] = array($time[0], $time[1]); + $sum += $time[1]; + $pos = strpos($time[0], 'read_license_from_vcs'); + if ($pos !== false) { + $read_license_from_vcs_[] = array($time[0], $time[1]); + } + $pos = strpos($time[0], 'mognas_f'); + if ($pos !== false) { + $mognas_f_[] = array($time[0], $time[1]); + } + $pos = strpos($time[0], '_diff'); + if ($pos !== false) { + $_diff_[] = array($time[0], $time[1]); + } + } + if ($time[0] == 'end_time') { + $end = $time[2]; + } +} + +$snails_time = 0; +$read_license_from_vcs_time = array(); +$mognas_f_time = array(); +$_diff_time = array(); +foreach ($read_license_from_vcs_ as $part) { + $read_license_from_vcs_time[] = $part[1]; +} +$snails_time += $read_license_from_vcs_time_sum = array_sum($read_license_from_vcs_time); + +foreach ($mognas_f_ as $part) { + $mognas_f_time[] = $part[1]; +} +$snails_time += $mognas_f_time_sum = array_sum($mognas_f_time); + +foreach ($_diff_ as $part) { + $_diff_time[] = $part[1]; +} +$snails_time += $_diff_time_sum = array_sum($_diff_time); + +// read_license_from_vcs, mognas_f, _diff + +//print_r($read_license_from_vcs_) . '</br>' . PHP_EOL; +//print_r($mognas_f_) . '</br>' . PHP_EOL; +//print_r($_diff_) . '</br>' . PHP_EOL; +echo '<pre>' . PHP_EOL; + +echo '</br>' .'rlv: '; +print_r($read_license_from_vcs_time_sum) . '</br>' . PHP_EOL; +echo '</br>' .'mog: '; +print_r($mognas_f_time_sum) . '</br>' . PHP_EOL; +echo '</br>' .'dif: '; +print_r($_diff_time_sum) . '</br>' . PHP_EOL; +echo '</br>' .'Sst: '; +print_r($snails_time) . '</br>' . PHP_EOL; +echo '</br>' .'sum: '; +print_r($sum) . '</br>' . PHP_EOL; +echo '</br>' .'end: '; +print_r($end) . '</br>' . PHP_EOL; +echo '</br>' .'rel: ' . number_format(100 * $sum/$end, 1) . ' %</br>' . PHP_EOL; +/*echo '</br>' .'snails: ' . PHP_EOL; +print_r($snails) . PHP_EOL; +echo 'times: ' . PHP_EOL; +print_r($times) . PHP_EOL; /**/ +echo '</pre>' . PHP_EOL; +/* END OF DEBUG LINES */ +?> + </div> + <script src="/_nav/js/source.js"></script> +</body> +</html>
\ No newline at end of file |