Progress report is available here.
Tx: ";
$links_and_num .= $stat_data['tx_untran'];
$links_and_num .= (0 == $stat_data['tx_untran'] ? ' - full' : '');
$links_and_num .= ',
git: ';
$links_and_num .= $stat_data['git_untran'];
$links_and_num .= ($stat_data['num_of_all'] == $stat_data['git_untran'] ? ' - empty' : '');
return $links_and_num;
}
$tx_resources = array();
// get resources data from TX
$tx_resources = tx_call("resources");
// create separate array ($tx_resources_info) and add statistics to it from TX
$tx_resources_info = array();
foreach ($tx_resources as $one_resource) {
$one_tx_resource_info = array();
$tx_resource_name = $one_resource['slug'];
$category = $one_resource['categories'][0];
// limit resource type only on one
if ($category == $resource_type) {
// add statistic
$tx_stat_for_resource = tx_call("resource/$tx_resource_name/stats");
$tx_resource_name = str_replace('page-', '', $tx_resource_name); // unify resource names
$one_resource['tx_resource_name'] = $tx_resource_name;
$one_resource['statistic'] = $tx_stat_for_resource;
$tx_resources_info[] = $one_resource;
}
}
// create array ($report) with statistics from git
$report = array();
$otherLangs = get_other_langs();
$enFiles = array_merge(array('../_nav/langs/en.pot'), get_lang_references('*.pot')); // added navigation file
foreach ($otherLangs as $l) {
foreach ($enFiles as $f) {
$references = '';
$resource = _extract_resource($f);
$langF = _po_file_switch($f, $l);
if (strstr($f, '../_nav/langs/en.') !== FALSE) {
$langF = '../_nav/langs/' . $l . '.po' . (($l == 'en') ? 't' : '');
}
if (file_exists($langF)) {
$stat = _po_diff($l, $resource);
$num_of_fuzzy_or_missing = count($stat['fuzzy_or_missing']);
$num_of_untranslated = count($stat['notrans']);
} else { // file $langF doesn't exists
$stat = _po_diff('en', $resource);
$num_of_fuzzy_or_missing = 0;
$num_of_untranslated = count($stat['notrans']);
}
// unify resource names, navigation is a special exception
$resource_name = str_replace(array('../_nav/langs/en', 'en/', '.pot'), array('nav', '', ''), $f);
// create pt_BR from pt-br and alike to unify languages
$web_language_code = locale_hyphen_underscore($l, true);
$num_of_not_fully_trans = $num_of_fuzzy_or_missing + $num_of_untranslated;
$report[] = array(
'num_of_all_strings' => $stat['a'],
'resource_name' => $resource_name,
'web_language_code' => $web_language_code,
'num_of_not_fully_trans' => $num_of_not_fully_trans,
);
}
}
// core part: building the data
$tx_lang_completed_treshold = 90; // report new languages above this treshold from 0 to 100 (%)
$langs_and_res_names_done = FALSE;
$tx_all_languages = array();
$tx_all_langs_above_treshold = array();
$git_all_languages = array();
$tx_all_resource_names = array();
$git_all_resource_names = array();
$git_compare_resources = array();
$tx_git_difference = array();
$nonequal_num_of_all_strings = array();
foreach ($tx_resources_info as $tx_resource_info) {
$tx_resource_name = $tx_resource_info['tx_resource_name'];
if (!in_array($tx_resource_name, $tx_all_resource_names)) {
$tx_all_resource_names[] = $tx_resource_name;
}
foreach ($tx_resource_info['statistic'] as $tx_resource_language => $tx_resource_language_stat) {
$completed = sprintf("%d", $tx_resource_language_stat['completed']);
if (!in_array($tx_resource_language, $tx_all_languages)) {
$tx_all_languages[] = $tx_resource_language;
}
if ($tx_lang_completed_treshold <= $completed) {
if (!in_array($tx_resource_language, $tx_all_langs_above_treshold)) {
$tx_all_langs_above_treshold[] = $tx_resource_language;
}
}
foreach ($report as $git_resource_info) {
$git_resource_name = $git_resource_info['resource_name'];
$git_compare_resource_name = str_replace('/', '-', $git_resource_name);
$git_resource_language = $git_resource_info['web_language_code'];
if (!$langs_and_res_names_done) {
$git_all_languages[] = $git_resource_language;
$git_all_resource_names[] = $git_resource_name;
$git_compare_resources[] = $git_compare_resource_name;
}
// if names and languages match but skip English as a source language
if ($tx_resource_language == $git_resource_language && 'en' != $git_resource_language
&& $tx_resource_name == $git_compare_resource_name) {
$tx_resource_untrans_in_lang = $tx_resource_language_stat['untranslated_entities'];
$tx_resource_all_strings_in_lang = $tx_resource_untrans_in_lang + $tx_resource_language_stat['translated_entities'];
$git_resource_num_of_all_strings = $git_resource_info['num_of_all_strings'];
$git_resource_untrans_in_lang = $git_resource_info['num_of_not_fully_trans'];
// compare l10n level
if ($tx_resource_untrans_in_lang != $git_resource_untrans_in_lang) {
$tx_git_difference[$tx_resource_language][$git_resource_name]['tx_num_of_all_strings'] = $tx_resource_all_strings_in_lang;
$tx_git_difference[$tx_resource_language][$git_resource_name]['tx_untranslated'] = $tx_resource_untrans_in_lang;
$tx_git_difference[$tx_resource_language][$git_resource_name]['git_untranslated'] = $git_resource_untrans_in_lang;
}
// this bellow should normaly only happen inside of a tx sync window so remember it
if ($tx_resource_all_strings_in_lang != $git_resource_num_of_all_strings) {
if (!in_array($git_resource_name, $nonequal_num_of_all_strings)) {
$nonequal_num_of_all_strings[] = $git_resource_name;
}
}
}
}
if (!$langs_and_res_names_done) {
$git_all_languages = array_unique($git_all_languages);
$git_all_resource_names = array_unique($git_all_resource_names);
$git_compare_resources = array_unique($git_compare_resources);
$langs_and_res_names_done = TRUE;
}
}
};
// sorting data
sort($tx_all_resource_names, SORT_STRING);
sort($git_all_resource_names, SORT_STRING);
sort($git_compare_resources, SORT_STRING);
sort($tx_all_languages);
sort($tx_all_langs_above_treshold);
sort($git_all_languages);
sort($nonequal_num_of_all_strings, SORT_STRING);
$tx_only_resources = array_diff($tx_all_resource_names, $git_compare_resources);
$git_only_resources = array_diff($git_compare_resources, $tx_all_resource_names);
$tx_only_languages = array_diff($tx_all_langs_above_treshold, $git_all_languages);
$git_only_languages = array_diff($git_all_languages, $tx_all_languages);
// preparing text for languages not present yet in our git repositories
$tx_only_languages_details = '';
if (0 < count($tx_only_languages)) {
$tx_only_languages_details = "
Languages with at least one resource for $resource_type translated over treshold ";
$tx_only_languages_details .= "($tx_lang_completed_treshold %) but not present yet in our git:
";
$tx_only_languages_details .= '
Please add them to our git.
';
foreach ($tx_only_languages as $tx_only_language) {
$tx_language_details = tx_call("language/$tx_only_language", '');
$tx_only_languages_details .= '- ' . $tx_only_language . ': ';
$tx_only_languages_details .= '" . $tx_language_details['name'] . ",
";
}
$tx_only_languages_details .= '
';
}
// preparing error texts
if (0 < count($git_only_languages)) {
$error = "Some languages (" . implode(", ", $git_only_languages) . ") are present in our git";
$errors['git_only_languages'] .= "$error but they are bellow treshold ($tx_lang_completed_treshold %) in Transifex. Please report that.";
}
if (0 < count($tx_only_resources)) {
$error = "Some resources (" . implode(", ", $tx_only_resources) . ") are present only in Transifex";
$errors['tx_only_resources'] .= "$error but not in our git. Please report that.";
}
if (0 < count($git_only_resources)) {
$error = "Some resources (" . implode(", ", $git_only_resources) . ") are present only in our git";
$errors['git_only_resources'] .= "$error but not in Transifex. Please report that.";
}
if (0 < count($nonequal_num_of_all_strings)) {
$error = "Some resources (" . implode(", ", $nonequal_num_of_all_strings) . ") have different number of all strings";
$errors['nonequal_num_of_all_strings'] .= "$error between our git and Transifex. Please report that on the mailing list if it happens several days.";
}
// making a list of resources with Tx/git differences
ksort($tx_git_difference);
$all_languages_with_tx_git_diff = array();
$all_resources_with_tx_git_diff = array();
foreach ($tx_git_difference as $one_language_of_tx_git_difference => $resources_with_tx_git_difference) {
$all_languages_with_tx_git_diff[] = $one_language_of_tx_git_difference;
foreach ($resources_with_tx_git_difference as $one_resource_with_tx_git_difference => $details) {
$all_resources_with_tx_git_diff[] = $one_resource_with_tx_git_difference;
}
}
$all_resources_with_tx_git_diff = array_unique($all_resources_with_tx_git_diff);
sort($all_resources_with_tx_git_diff, SORT_STRING);
$num_of_resources_w_difference = count($all_resources_with_tx_git_diff);
$table_difference = '';
$num_for_switch_table_to_list = 15;
if (0 < $num_of_resources_w_difference && $num_for_switch_table_to_list > $num_of_resources_w_difference) {
// preparing a table represantation of Tx/git differences
$i = 0;
$table_rows = array();
$table_rows[] = "
" . PHP_EOL;
$table_rows[] = "" . PHP_EOL;
$first_row_pass = TRUE;
foreach ($tx_git_difference as $one_language => $one_language_array) {
$j = 0;
$row = array();
$first_col_pass = TRUE;
if ($first_row_pass || 0 == $i % 10) {
$array_chunks = array_chunk($all_resources_with_tx_git_diff, $col_repeat = 8, TRUE);
foreach ($array_chunks as $array_chunk) {
$row = array_merge($row, array(' '), $array_chunk);
}
$table_rows[] = "" . implode(" | ", $row) . " |
" . PHP_EOL; // add header row
$row = array();
}
foreach ($all_resources_with_tx_git_diff as $resource_with_tx_git_diff) {
if ($first_col_pass || 0 == $j % $col_repeat) { // left cell
$row[] = "" . $langs[locale_underscore_to_hyphen($one_language)] . " - $one_language
";
$first_col_pass = FALSE;
}
if (array_key_exists($resource_with_tx_git_diff, $one_language_array)) {
$stat_data = array();
$stat_data['num_of_all'] = $one_language_array[$resource_with_tx_git_diff]['tx_num_of_all_strings'];
$stat_data['tx_untran'] = $one_language_array[$resource_with_tx_git_diff]['tx_untranslated'];
$stat_data['git_untran'] = $one_language_array[$resource_with_tx_git_diff]['git_untranslated'];
$cell = "";
$cell .= build_links($resource_with_tx_git_diff, $one_language, $resource_type, $stat_data);
$cell .= "";
$row[] = $cell;
} else {
$row[] = ' '; // there is no differences
}
$j++;
}
$table_rows[] = "" . implode(" | ", $row) . " |
" . PHP_EOL;
if ($first_row_pass) {
$table_rows[] = "" . PHP_EOL;
$table_rows[] = "" . PHP_EOL;
$first_row_pass = FALSE;
}
$i++;
}
$table_rows[] = "" . PHP_EOL;
$table_rows[] = "
" . PHP_EOL;
$table_difference = implode($table_rows);
}
$list_of_lang_diff = '';
$list_of_resource_diff = '';
if (0 < $num_of_resources_w_difference) {
// preparing a list represantation of Tx/git differences by language
$list_of_lang_diff .= '
' . PHP_EOL;
foreach ($tx_git_difference as $one_language => $one_language_array) {
$list_of_lang_diff .= '- ' . $langs[locale_underscore_to_hyphen($one_language)];
$list_of_lang_diff .= ' - ' . $one_language . ': ' . PHP_EOL;
$one_language_resources = array_keys($one_language_array);
$miss_first = TRUE;
foreach ($one_language_resources as $one_language_resource) {
$stat_data = array();
$stat_data['num_of_all'] = $one_language_array[$one_language_resource]['tx_num_of_all_strings'];
$stat_data['tx_untran'] = $one_language_array[$one_language_resource]['tx_untranslated'];
$stat_data['git_untran'] = $one_language_array[$one_language_resource]['git_untranslated'];
$list_of_lang_diff .= ($miss_first ? '' :', ');
$list_of_lang_diff .= "$one_language_resource (";
$list_of_lang_diff .= build_links($one_language_resource, $one_language, $resource_type, $stat_data);
$list_of_lang_diff .= ')';
$miss_first = FALSE;
}
$list_of_lang_diff .= '
' . PHP_EOL;
}
$list_of_lang_diff .= '
' . PHP_EOL;
// preparing a list represantation of Tx/git differences by resources
$list_of_resource_diff .= '
' . PHP_EOL;
foreach ($all_resources_with_tx_git_diff as $resource_with_tx_git_diff) {
$list_of_resource_diff .= '- ' . $resource_with_tx_git_diff .': ' . PHP_EOL;
$miss_first = TRUE;
foreach ($tx_git_difference as $one_language => $one_language_array) {
if (isset($one_language_array[$resource_with_tx_git_diff])) {
$stat_data = array();
$stat_data['num_of_all'] = $one_language_array[$resource_with_tx_git_diff]['tx_num_of_all_strings'];
$stat_data['tx_untran'] = $one_language_array[$resource_with_tx_git_diff]['tx_untranslated'];
$stat_data['git_untran'] = $one_language_array[$resource_with_tx_git_diff]['git_untranslated'];
$list_of_resource_diff .= ($miss_first ? '' :', ');
$list_of_resource_diff .= '' . $langs[locale_underscore_to_hyphen($one_language)];
$list_of_resource_diff .= " - $one_language (";
$list_of_resource_diff .= build_links($resource_with_tx_git_diff, $one_language, $resource_type, $stat_data);
$list_of_resource_diff .= ')';
$miss_first = FALSE;
}
}
$list_of_resource_diff .= '
' . PHP_EOL;
}
$list_of_resource_diff .= '
' . PHP_EOL;
}
// print out any errors
if (0 < count($errors)) {
$error_text = '
';
foreach ($errors as $single_error) {
$error_text .= '- ' . $single_error . '
';
}
$error_text .= '
';
echo $error_text . PHP_EOL;
}
// print any languages present only in Transifex
echo $tx_only_languages_details . PHP_EOL;
// print any differences between Transifex and our git repository
echo '
Languages bellow have some differences between Transifex and our git repository.
';
echo '
To avoid furter alienation and confusion please synchronise them.
';
echo '
They differs on number of untranslated strings in resources:
';
if (0 < $num_of_resources_w_difference) {
// print table if there are only a few resources with differences otherwise print a list
if ($num_for_switch_table_to_list > $num_of_resources_w_difference) {
echo $table_difference . PHP_EOL;
} else {
echo $list_of_lang_diff . PHP_EOL;
echo '
Same list but arranged by resources:
';
echo $list_of_resource_diff . PHP_EOL;
}
}
?>
Source code for this website is
available on git.
' ?>