aboutsummaryrefslogtreecommitdiffstats
path: root/langs/report.php
diff options
context:
space:
mode:
authorfilip <filip.komar@gmail.com>2014-08-01 12:36:54 +0200
committerfilip <filip.komar@gmail.com>2014-08-01 12:36:54 +0200
commitd1acf6da39fcb3ac2af8c2eca8ed961b0f362f56 (patch)
tree2c6abf34182015f2c304afb937acc643db8f2db7 /langs/report.php
parenta21072679f69575212cd92aad138f4e5f230f24c (diff)
downloadwww-d1acf6da39fcb3ac2af8c2eca8ed961b0f362f56.tar
www-d1acf6da39fcb3ac2af8c2eca8ed961b0f362f56.tar.gz
www-d1acf6da39fcb3ac2af8c2eca8ed961b0f362f56.tar.bz2
www-d1acf6da39fcb3ac2af8c2eca8ed961b0f362f56.tar.xz
www-d1acf6da39fcb3ac2af8c2eca8ed961b0f362f56.zip
refactoring of www.mageia.org production translation report for better usability
Diffstat (limited to 'langs/report.php')
-rw-r--r--langs/report.php561
1 files changed, 306 insertions, 255 deletions
diff --git a/langs/report.php b/langs/report.php
index 99dffe6ed..c0a3d1f40 100644
--- a/langs/report.php
+++ b/langs/report.php
@@ -5,25 +5,26 @@
<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; }
+ html, body { margin: 0; padding: 0; font-family: Verdana, "Trebuchet MS", "Lucida Grande", "Lucida Sans", Verdana, Tahoma, Arial, sans-serif; }
+ table, th, td {
+ border:1px solid gray;
+ border-collapse:collapse;
+ }
+ th { text-align: left; }
+ td, th { font-size: 80%; padding: 0.3em; }
+ td a div, td.progress div { float: left; }
+ #page { padding: 1em; position: absolute; top: 128px; }
+ .done, .partial, .add { }
+ .done { color: darkgreen; background: lightgreen; }
+ .partial { color: darkslategray; background: orange; }
+ .add { color: black; background: lightgrey; }
+ .done a, .partial a, .add a { color: inherit; padding-right: 0.5em; }
+ .view_page { background: rgba(0, 0, 0, 0.1); border-radius: 3px; padding: 0em 0.5em; margin: 0.3em; }
+ .bold { font-weight: bold; }
+ .minor { font-weight: normal; font-size: smaller; }
+ .progress { text-align: right; }
+ .percent { width: 45px; }
+ .stat { font-size: smaller; }
</style>
</head>
<body class="contribute">
@@ -35,324 +36,373 @@
</header>
<div id="page">
<?php
- /**
+ define('HLANG', TRUE);
+
+ /*
+ * from http://www.php.net/manual/en/function.array-search.php#91365
+ *
+ * copyright (c) the PHP Documentation
+ * covered by the Creative Commons Attribution 3.0 License (http://creativecommons.org/licenses/by/3.0/legalcode)
*/
- define('HLANG', true);
+ function recursive_array_search($needle, $haystack)
+ {
+ foreach ($haystack as $key => $value) {
+ $current_key = $key;
+ if ($needle === $value OR (is_array($value) && recursive_array_search($needle, $value) !== FALSE)) {
+ return $current_key;
+ }
+ }
+ return FALSE;
+ }
+
include 'lib.php';
- $one_language = isset($_GET['l']) ? strip_tags(trim($_GET['l'])) : null;
- $one_resource = isset($_GET['r']) ? strip_tags(trim($_GET['r'])) : null;
+ $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;
+ $one_language_all_resources = FALSE;
+ $all_languages_only_one_resource = FALSE;
if (isset($one_language) && $one_language != 'all') {
+ $one_language_all_resources = TRUE;
$otherLangs = array('en', $one_language);
- $restore_languages = TRUE;
} else {
$otherLangs = get_other_langs();
}
if (isset($one_resource) && $one_resource != 'all') {
- $enFiles = array($one_resource);
- $restore_resources = TRUE;
+ $all_languages_only_one_resource = TRUE;
+ $enFiles = array($one_resource);
} else {
- $enFiles = array_merge(array('../_nav/langs/en.pot'), get_lang_references('*.lang'), get_lang_references('*.pot')); // added navigation file
- sort($enFiles);
+ $enFiles = array_merge(array('../_nav/langs/en.pot'), get_lang_references('*.pot')); // added navigation file
}
$num_of_enFiles = count($enFiles);
- $enStringsCount = array();
- $report = array();
- $stats = array();
- $stats['en']['files'] = 0;
- $num_of_col = 0;
- $diff_link = '<a href="diff.php?s=%s&amp;l=%s" title="see detailed diff">';
+ $report = array();
+ $ok_link = '<div class="done">%s <a href="%s" title="get a copy of the file">file</a></div>';
+ $diff_link = '<div class="partial">%s<a href="diff.php?s=%s&amp;l=%s" title="see detailed diff">';
+ $add_trans = '<div class="add"><a href="missing.php?s=%s&amp;l=%s" class="view_page">add translation</a>%s</div>';
- $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) {
+ $references = '';
+ $page_not_linked = '';
+ $old_page = '';
+ $resource = _extract_resource($f);
+ $resource_filename = str_replace('index', '', $resource);
+ $mga = array('view page' => $resource_filename);
+ $langF = _po_file_switch($f, $l);
+ if (strstr($f, '../_nav/langs/en.') !== FALSE) {
+ $nav = TRUE;
$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');
+ $langF = '../_nav/langs/' . $l . '.po' . (($l == 'en') ? 't' : '');
} 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');
+ $nav = FALSE;
+ $dest_en = sprintf('%s/%s/%s/%s', G_APP_ROOT, 'en', $resource_filename, 'index.php');
+ $dest_l = sprintf('%s/%s/%s/%s', G_APP_ROOT, $l, $resource_filename, '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('<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);
+ if ((realpath($dest_l) != realpath($dest_en)) && !$nav) {
+ $page_not_linked = sprintf('<a href="/%s/%s">old page</a> still exists!', $l, $resource_filename);
+ $old_page = sprintf(' by recycling <a href="/%s/%s">old page</a>', $l, $resource_filename);
}
-
- $add_translation = sprintf('<td class="missing"><a href="missing.php?s=%s&amp;l=%s" class="action addlang">add translation</a>%s</td>',
- $f, $l, $old_page
- );
+ $add_new_translation = sprintf($add_trans, $f, $l, $old_page);
if (file_exists($langF)) {
-
- $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;
- }
+ $test = _po_diff($l, $resource);
+ $num_of_fuzzy_or_missing_strings = count($test['fuzzy_or_missing']);
$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'];
- }
- if ($link == 'about/license') {
- require_once('../en/about/license/license.php');
- $license_numbers = load_license_numbers($l, true); // reading cache
- $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();
- } else if ($link == 'downloads/get') {
+ $mga = array('see navigation' => '');
+ } else if ($resource_filename == 'downloads/get') {
$mga = array(
- 'A' => 'downloads/get/index.php?q=Mageia-2-dual-CD.iso&amp;d=1', // " style="display: block;
+ 'view page A' => 'downloads/get/index.php?q=Mageia-2-dual-CD.iso&amp;d=1',
'B' => 'downloads/get/index.php?q=Non_existing_file&amp;d=1',
);
- } else if ($link == '2') {
+ } else if ($resource_filename == '2') {
$mga = array(
- 'A' => '2/index.php',
+ 'view page 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') {
+ } else if ($resource_filename == '3') {
$mga = array(
- 'A' => '3/index.php',
+ 'view page 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') {
+ } else if ($resource_filename == '4') {
$mga = array(
- 'A' => '4/index.php',
+ 'view page 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') {
+ } else if ($resource_filename == 'cauldron') {
+ $mga = array('view page' => '5/download_index.php');
+ } else if ($resource_filename == 'documentation') {
$mga = array(
- 'doc' => 'doc/index.php',
+ 'view page doc' => 'doc/index.php',
'archive' => 'doc/archive.php',
);
- } else {
- $mga = array(
- 'view page' => $link,
- );
+ } else if ($resource_filename == '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'];
+ } else if ($resource_filename == 'about/license') {
+ require_once('../en/about/license/license.php');
+ $license_numbers = load_license_numbers($l, TRUE);
+ if ($l == 'en') {
+ $number_of_unique_lines_in_eng_license = $license_numbers["all"];
+ }
+ $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
}
- $link = '<div>';
+ $link = '';
foreach ($mga as $k => $v) {
- $link .= sprintf('<a href="/%s/%s" class="action partial">%s</a>', $l, $v, $k);
+ $link .= sprintf('<a href="/%s/%s" class="view_page">%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);
+ $link .= $page_not_linked; // . '</div>';
- $done = $test['a'];
+ if ($num_of_fuzzy_or_missing_strings === 0 && $num_of_untranslated_strings === 0) {
+ $references .= sprintf($ok_link, $link, $langF);
} 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 . '&nbsp;missing<br>';
- }
- if ($num_of_fuzzy_or_missing_strings > 0) {
- $cols .= $num_of_fuzzy_or_missing_strings . '&nbsp;fuzzy or missing<br>';
- }
- if ($num_of_untranslated_strings > 0) {
- $cols .= $num_of_untranslated_strings . '&nbsp;untranslated<br>';
- }
- if ($num_of_extra_strings > 0) {
- $cols .= $num_of_extra_strings . '&nbsp;extra<br>';
- }
- if ($num_of_duplicated_strings > 0) {
- $cols .= $num_of_duplicated_strings . '&nbsp;duplicate';
- $cols .= ($num_of_duplicated_strings > 1 ? 's' : '');
- }
- $cols .= '</a>';
- $cols .= $link . '</td>';
- } else {
- $cols .= $add_translation;
+ if(($num_of_fuzzy_or_missing_strings + $num_of_untranslated_strings) < $test['a']) {
+ $references .= sprintf($diff_link, $link, $f, $l);
+ $fuzzy = FALSE;
+ if ($num_of_fuzzy_or_missing_strings > 0) {
+ $references .= $num_of_fuzzy_or_missing_strings . '&nbsp;fuzzy or missing';
+ $fuzzy = TRUE;
+ }
+ if ($num_of_untranslated_strings > 0) {
+ $references .= ($fuzzy ? ', ' : '') . $num_of_untranslated_strings . '&nbsp;untranslated';
}
- $done = $test['a'] - $num_of_untranslated_strings - $num_of_missing_strings - $num_of_fuzzy_or_missing_strings;
+ $references .= '</a></div>';
+ } else {
+ $references .= $add_new_translation;
}
}
- $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);
+ } else { // file $langF doesn't exists
+ $references .= $add_new_translation;
+ $test = _po_diff('en', $resource);
+ $num_of_fuzzy_or_missing_strings = 0;
+ $num_of_untranslated_strings = count($test['notrans']);
+ if ($resource_filename == 'about/constitution') { // add aproximate number of all lines from constitution
+ $test['a'] += $number_of_unique_lines_in_eng_constitution;
+ $num_of_untranslated_strings += $number_of_unique_lines_in_eng_constitution;
+ }
+ if ($resource_filename == 'about/license') { // add number of all license sentences
+ $test['a'] += $number_of_unique_lines_in_eng_license;
+ $num_of_untranslated_strings += $number_of_unique_lines_in_eng_license;
}
}
- }
- $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('<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']
+ $report[] = array(
+ 'language' => $l,
+ 'resource_filename' => $f,
+ 'num_of_all_strings' => $test['a'],
+ 'num_of_fuzzy_or_missing_strings' => $num_of_fuzzy_or_missing_strings,
+ 'num_of_untranslated_strings' => $num_of_untranslated_strings,
+ 'references' => $references,
);
}
- $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);
- // add language coloumn repeating
- $lang_line = array();
- $num_of_h_col = 0;
- $add_last_coloumn = FALSE;
- $resources = ($restore_resources ? '&nbsp;' : $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>';
+ $total_num_of_strings = 0; // total of all source strings
+ $language_summary = array();
+ $resource_summary = array();
+ foreach ($report as $resource_data) {
+ if ($resource_data['language'] == 'en') {
+ $total_num_of_strings += $resource_data['num_of_all_strings'];
}
- 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;
+ // don't add if there is a need to store languages only for one resource
+ if(!$all_languages_only_one_resource || $resource_data['resource_filename'] == $one_resource) {
+ $key_exists = recursive_array_search($resource_data['language'], $language_summary); // is language already in the $language_summary array?
+ if($resource_data['resource_filename'] == $one_resource) {
+ $temp_var[0]['language'] = $resource_data['language'];
+ $temp_var[0]['num_of_all_strings'] = $resource_data['num_of_all_strings'];
+ $temp_var[0]['num_of_fuzzy_or_missing_strings'] = $resource_data['num_of_fuzzy_or_missing_strings'];
+ $temp_var[0]['num_of_untranslated_strings'] = $resource_data['num_of_untranslated_strings'];
+ $temp_var[0]['references'] = $resource_data['references'];
+ $language_summary[] = $temp_var[0];
+ unset($temp_var[0]); // clear var
+ } else {
+ if ($key_exists !== FALSE) {
+ $language_summary[$key_exists]['num_of_all_strings'] += $resource_data['num_of_all_strings'];
+ $language_summary[$key_exists]['num_of_fuzzy_or_missing_strings'] += $resource_data['num_of_fuzzy_or_missing_strings'];
+ $language_summary[$key_exists]['num_of_untranslated_strings'] += $resource_data['num_of_untranslated_strings'];
+ } else {
+ if($key_exists === FALSE) {
+ $key_exists = count($language_summary);
+ }
+ $language_summary[$key_exists]['language'] = $resource_data['language'];
+ $language_summary[$key_exists]['num_of_all_strings'] = $resource_data['num_of_all_strings'];
+ $language_summary[$key_exists]['num_of_fuzzy_or_missing_strings'] = $resource_data['num_of_fuzzy_or_missing_strings'];
+ $language_summary[$key_exists]['num_of_untranslated_strings'] = $resource_data['num_of_untranslated_strings'];
+ $language_summary[$key_exists]['references'] = $resource_data['references'];
+ }
+ }
+ }
+
+ // don't add if there is a need to store resources only for one language
+ if(!$one_language_all_resources || ($resource_data['language'] == $one_language || $resource_data['language'] == 'en')) {
+ $key_exists = recursive_array_search($resource_data['resource_filename'], $resource_summary); // is resource already in the $resource_summary array?
+ if($resource_data['language'] == 'en') {
+ $temp_var[0]['resource_filename'] = $resource_data['resource_filename'];
+ $temp_var[0]['num_of_all_strings'] = $resource_data['num_of_all_strings'];
+ $temp_var[0]['num_of_fuzzy_or_missing_strings'] = $resource_data['num_of_fuzzy_or_missing_strings'];
+ $temp_var[0]['num_of_untranslated_strings'] = $resource_data['num_of_untranslated_strings'];
+ $temp_var[0]['references'] = $resource_data['references'];
+ $resource_summary[] = $temp_var[0];
+ unset($temp_var[0]); // clear var
+ } else {
+ if($one_language_all_resources) {
+ if($key_exists === FALSE) {
+ $key_exists = count($resource_summary);
+ }
+ $resource_summary[$key_exists]['num_of_fuzzy_or_missing_strings'] = $resource_data['num_of_fuzzy_or_missing_strings'];
+ $resource_summary[$key_exists]['num_of_untranslated_strings'] = $resource_data['num_of_untranslated_strings'];
+ $resource_summary[$key_exists]['references'] = $resource_data['references'];
+ } else if ($key_exists !== FALSE) {
+ $resource_summary[$key_exists]['num_of_all_strings'] += $resource_data['num_of_all_strings'];
+ $resource_summary[$key_exists]['num_of_fuzzy_or_missing_strings'] += $resource_data['num_of_fuzzy_or_missing_strings'];
+ $resource_summary[$key_exists]['num_of_untranslated_strings'] += $resource_data['num_of_untranslated_strings'];
+ }
+ }
}
}
- if ($add_last_coloumn) {
- $lang_line[] = $resources;// last h coloumn
+ foreach ($language_summary as &$single_language_summary) {
+ $single_language_summary['num_of_translated_strings'] =
+ $single_language_summary['num_of_all_strings'] -
+ $single_language_summary['num_of_fuzzy_or_missing_strings'] -
+ $single_language_summary['num_of_untranslated_strings'];
}
-
- $thfiles = '<th>' . implode('</th><th>', $lang_line) . '</th>' . PHP_EOL;
- if (!$restore_languages && !$restore_resources) {
- $count = '&nbsp;';
+ unset($single_language_summary); // foreach by reference
+ foreach ($resource_summary as &$single_resource_summary) {
+ $single_resource_summary['num_of_translated_strings'] =
+ $single_resource_summary['num_of_all_strings'] -
+ $single_resource_summary['num_of_fuzzy_or_missing_strings'] -
+ $single_resource_summary['num_of_untranslated_strings'];
}
- if ($restore_languages) {
- echo '<p>Restore <a href="?l=all" title="see all languages">all languages</a>.</p>';
- $count = '&nbsp;';
- } else {
- $count = count($otherLangs) . ' languages';
+ unset($single_resource_summary); // foreach by reference
+
+ if ($one_language_all_resources) {
+ $report_text = '<p>Restore <a href="?l=all" title="see all languages">all languages</a>.</p>';
+ $count = 'One language: ' . $langs[$one_language];
+ $summary_text = 'Summary for each of ' . $num_of_enFiles . ' resources';
+ $display_array = $resource_summary;
+ $progress = 'References</th><th>Progress';
+ $stats_width = '55px';
+ } else if ($all_languages_only_one_resource) {
+ $report_text = '<p>Restore <a href="?r=all" title="see all resources">all resources</a>.</p>';
+ $count = 'Together ' . count($otherLangs) . ' languages';
+ $summary_text = 'Summary for resource: ' . $one_resource;
+ $eng_language = array_shift($language_summary); // shift English for proper sorting
+ $display_array = $language_summary;
+ $stats_width = '60px';
+ $progress = 'References</th><th>Progress';
+ } else { // all languages, all resources
+ $report_text = ''; // <p>Overview of all languages.</p>
+ $count = 'Together ' . count($otherLangs) . ' languages';
+ $summary_text = 'Summary for all ' . $num_of_enFiles . ' resources';
+ $eng_language = array_shift($language_summary); // shift English for proper sorting
+ $display_array = $language_summary;
+ $sum_for_stat = $total_num_of_strings;
+ $stats_width = '70px';
+ $references = '';
+ $progress = 'Progress';
}
- if ($restore_resources) {
- echo '<p>Restore <a href="?r=all" title="see all resources">all resources</a>.</p>';
+
+ // build helper arrays
+ foreach ($display_array as $key => $row) {
+ if ($one_language_all_resources) {
+ $first_helper[$key] = $row['num_of_translated_strings'] / $row['num_of_all_strings'];
+ $second_helper[$key] = $row['num_of_fuzzy_or_missing_strings'] / $row['num_of_all_strings'];
+ $third_helper[$key] = $row['resource_filename'];
+ } else if ($all_languages_only_one_resource) {
+ $first_helper[$key] = $row['num_of_translated_strings'] / $row['num_of_all_strings'];
+ $second_helper[$key] = $row['num_of_fuzzy_or_missing_strings'] / $row['num_of_all_strings'];
+ $third_helper[$key] = $row['language'];
+ } else { // all languages, all resources
+ $first_helper[$key] = $row['num_of_translated_strings'] / $total_num_of_strings;
+ $second_helper[$key] = $row['num_of_fuzzy_or_missing_strings'] / $total_num_of_strings;
+ $third_helper[$key] = $row['language'];
+ }
}
- $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) ? '<tr><th>' . $count . '</th><th>' . $resources . '</th>' . $thfiles : ''));
+ array_multisort($first_helper, SORT_DESC, $second_helper, $third_helper, $display_array); // , SORT_STRING
+// array_unshift($language_summary, $eng_language); // unshift English back
+ $table_lines = array();
+ $progress_width = 350;
+ foreach ($display_array as $one_member) {
+ $translation_status = 'translated: ' . $one_member['num_of_translated_strings'];
+ $translation_status .= ', fuzzy or missing: ' . $one_member['num_of_fuzzy_or_missing_strings'];
+ if ($one_language_all_resources) {
+ $first_clmn = $one_member['resource_filename'];
+ $link_one = '<a href="?r=' . $first_clmn . '" title="%s">';
+ if ($first_clmn == '../_nav/langs/en.pot') {
+ $frst_clmn_t = '_nav/langs/en.pot';
+ } else {
+ $frst_clmn_t = str_replace('en/', '', $first_clmn);
+ }
+ $first_clm_text = sprintf('<span class="bold">' . $link_one . '%s</a></span>', 'see this resource only', $frst_clmn_t);
+ $single_stat = $one_member['num_of_translated_strings'];
+ $sum_for_stat = $one_member['num_of_all_strings'];
+ $references = '<td>' . $one_member['references'] . '</td>';
+ } else if ($all_languages_only_one_resource) {
+ $first_clmn = $one_member['language'];
+ $link_one = '<a href="?l=' . $first_clmn . '" title="%s">';
+ $first_clm_text = sprintf('<span class="bold">' . $link_one . '%s</a></span>, ', 'see this language only', $langs[$first_clmn]);
+ $single_stat = $one_member['num_of_translated_strings'];
+ $sum_for_stat = $one_member['num_of_all_strings'];
+ $references = '<td>' . $one_member['references'] . '</td>';
+ } else { // all languages, all resources
+ $first_clmn = $one_member['language'];
+ $link_one = '<a href="?l=' . $first_clmn . '" title="%s">';
+ $first_clm_text = sprintf('<span class="bold">' . $link_one . '%s</a></span>, ', 'see this language only', $langs[$first_clmn]);
+ $first_clm_text .= sprintf('<span class="minor">%s</span>', $first_clmn);
+ $single_stat = $one_member['num_of_translated_strings'];
+ }
+ $progress_tran_float = $one_member['num_of_translated_strings'] / $sum_for_stat;
+ $progress_trans = floor($progress_tran_float * 100);
+ $progress_tran_round = floor($progress_tran_float * $progress_width);
+ $progress_fom_float = $one_member['num_of_fuzzy_or_missing_strings'] / $sum_for_stat;
+ $progress_fom_round = round($progress_fom_float * $progress_width);
+ $progress_untrans = $progress_width - $progress_tran_round - $progress_fom_round;
+
+
+ $row = '<tr><td>' . $first_clm_text . '</td>';
+ $row .= $references;
+ $row .= '<td class="progress"><div class="percent">' . $progress_trans . ' %</div>';
+ $row .= '<div class="stat" style="width: ' . $stats_width . ';"> (' . $single_stat . ' / ' . $sum_for_stat . ')</div></td>';
+ $row .= sprintf('<td>' . $link_one, $translation_status);
+ $row .= '<div style="width: ' . $progress_tran_round . 'px; background-color: LightGreen;">&nbsp;</div>' . PHP_EOL;
+ $row .= '<div style="width: ' . $progress_fom_round . 'px; background-color: Orange;">&nbsp;</div>' . PHP_EOL;
+ $row .= '<div style="width: ' . $progress_untrans . 'px; background-color: OrangeRed;">&nbsp;</div>' . PHP_EOL;
+ $row .= '</a></td></tr>' . PHP_EOL;
+ $table_lines[] = $row;
}
- array_unshift($table_body, $en_language); // unshift English back
- $s = implode($table_body);
+ $table_rows = implode('', $table_lines);
+ echo $report_text;
echo <<<S
-<table border="1">
+<table>
<thead><tr>
<th>{$count}</th>
- <th>Progress</th>
- {$thfiles}
+ <th>{$progress}</th>
+ <th>{$summary_text}</th>
</tr></thead>
<tbody>
-{$s}
+{$table_rows}
</tbody>
</table>
@@ -366,6 +416,7 @@ S;
// regenerating cache
// TODO move it to the cron
+require_once('../en/about/license/license.php');
foreach ($otherLangs as $lang) {
load_license_numbers($lang);
} \ No newline at end of file