diff options
Diffstat (limited to 'langs/lib.php')
-rw-r--r-- | langs/lib.php | 271 |
1 files changed, 0 insertions, 271 deletions
diff --git a/langs/lib.php b/langs/lib.php deleted file mode 100644 index b238cdd4c..000000000 --- a/langs/lib.php +++ /dev/null @@ -1,271 +0,0 @@ -<?php -/** -*/ - -if (isset($_SERVER['APP_MODE']) && $_SERVER['APP_MODE'] !== 'prod') { - ini_set('error_reporting', E_ALL); - ini_set('show_errors', true); - ini_set('display_errors', true); -} else { - ini_set('error_reporting', FALSE); - ini_set('show_errors', FALSE); - ini_set('display_errors', FALSE); - ini_set('log_errors', FALSE); -} - -include '../langs.php'; - -/** - * Diff two .lang files, to get: - * - strings count of each - * - missing strings (in $a, not in $b) - * - extra strings (in $b, not in $a) - * - untranslated strings (same in $a and $b, or empty in $b) - * - duplicate strings in $b - * - * @param string $a file name - * @param string $b file name - * - * @return array -*/ -function _lang_diff($a, $b) -{ - $fa = i18n::_lang_return($a); - $fb = i18n::_lang_return($b, true); // option to return duplicates - $duplicates = (isset($fb['duplicates']) ? array_pop($fb) : null); - -/* $ret = array( - 'aCount' => count($fa), - 'bCount' => count($fb), - 'diff' => count($fa) - count($fb), - ); unused var */ - $missing = array(); - $notrans = array(); - - $ka = array_keys($fa); - $kb = array_keys($fb); - - $missing = array_diff($ka, $kb); - $extra = array_diff($kb, $ka); - - // search for untranslated strings - foreach ($fa as $k => $v) { - if (array_key_exists($k, $fb)) { - if ($v == $fb[$k] || '' == $fb[$k]) { - $notrans[] = $k; - } - } - } - - return array( - 'a_name' => $a, - 'b_name' => $b, - 'a' => count($fa), - 'b' => count($fb), - 'missing' => $missing, - 'notrans' => $notrans, - 'extra' => $extra, - 'dup_str' => $duplicates, - ); -} - -/** - * Diff pot and po files, to get: - * - source (pot) strings count - * - missing strings in target - * - untranslated strings in target - * - empty array for extra and duplicate strings for backward compatibility - * - * @param string $locale locale name ('sl') - * @param string $resource file name ('about/license') - * - * @return array -*/ -function _po_diff($locale, $resource) -{ - $source_l = read_translation_file('en', $resource); - $target_l = read_translation_file($locale, $resource); - - $pot_strings = array(); - $untrans = array(); - $fuzzy_or_missing = array(); - - foreach ($source_l as $escaped_string => $subarray) { - if (!empty($subarray["msgid"])) { // filter out header - $pot_strings[$escaped_string] = $subarray["msgid"]; - } - } - - foreach ($target_l as $escaped_string => $subarray) { - if (!empty($subarray["msgid"])) { // filter out header - $po_strings[$escaped_string] = $subarray["msgstr"][0]; - } - } - - foreach ($pot_strings as $escaped_string => $translated_string) { - if (isset($po_strings[$escaped_string])) { - if (empty($po_strings[$escaped_string])) { - $untrans[] = $escaped_string; - } - } else { - $fuzzy_or_missing[] = $escaped_string; - } - } - - return array( - 'a' => count($pot_strings), // # of original strings -// 'b' => count($po_strings), // # of target strings - 'fuzzy_or_missing' => $fuzzy_or_missing, - 'notrans' => $untrans, - 'extra' => array(), - 'dup_str' => array(), - ); -} - -/*function _lang_diff_stats($a, $b) -{ - $diff = _lang_diff($a, $b); - - $diff['missing'] = count($diff['missing']); - $diff['notrans'] = count($diff['notrans']); - $diff['extra'] = count($diff['extra']); - $diff['ok'] = (($diff['b'] - $diff['a']) == 0) ? true : false; - $diff['correct'] = $diff['b'] - $diff['notrans'] - $diff['missing']; - - return $diff; -} /**/ - -if ( ! function_exists('glob_recursive')) -{ - // Does not support flag GLOB_BRACE - - function glob_recursive($pattern, $flags = 0) - { - $files = glob($pattern, $flags); - -// removing dirs from $files as they are not files ;) - $files_wo_dirs = array(); - foreach ($files as $single_file) { - $single_file_as_string = str_split($single_file); - $last_sign = array_pop($single_file_as_string); - if($last_sign != '/') { - $files_wo_dirs[] = $single_file; - }; - } - $files = $files_wo_dirs; - - foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) - { - $files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags)); - } - - return $files; - } -} - -/** - * Create 'sl/about/license.sl.lang' - * from 'en/about/license.en.lang' - * or ../_nav/langs/sl.lang - * from ../_nav/langs/en.lang - * - * @param string $s file name with path - * @param string $l locale name - * - * @return string -*/ -function _lang_file_switch($s, $l) -{ - $s = str_replace('en.lang', $l . '.lang', $s); - return str_replace('en/', $l . '/', $s); -} - -/** - * Create 'sl/about/license.po' - * from 'en/about/license.pot' - * or ../_nav/langs/sl.po - * from ../_nav/langs/en.pot - * - * @param string $s file name with path - * @param string $l locale name - * - * @return string -*/ -function _po_file_switch($s, $l) -{ - if($l != 'en') { - $s = str_replace('.pot', '.po', $s); - } - $s = str_replace('/en.', '/' . $l . '.', $s); - return str_replace('en/', $l . '/', $s); -} - -/** - * Create 'about/license' - * from 'en/about/license.pot' or 'en/about/license.en.lang' - * - * @param string $source_file file name with path - * @param string $extension file extension to remove - * - * @return string -*/ -function _extract_resource($source_file, $extension = '.pot') -{ - $resource = str_replace($extension, '', $source_file); - return str_replace('en/', '', $resource); -} - -function get_lang_references($pattern = '*') -{ - return glob_recursive('en/' . $pattern, GLOB_MARK); -} - -function get_other_langs() -{ - $ls = glob('*'); - $re = array(); - foreach ($ls as $l) { - if (!is_dir($l)) continue; - if ($l == 'en') continue; - $re[] = $l; - } - array_unshift($re, 'en'); - return $re; -} - -function aproximate_number_of_untranslated_constitution_lines($app_root, $lang, $unique_lines_in_eng_constitution = array()) -{ - $constitution_readable = FALSE; - $dest_constitution = sprintf('%s/%s/%s/%s_%s.md', $app_root, $lang, 'about/constitution', 'mageia.org_statutes', $lang); - $number_of_unique_lines_in_eng_constitution = count($unique_lines_in_eng_constitution); - $aproximate_number_of_untranslated_lines = 0; - if(is_readable($dest_constitution)) { - $unique_lines_in_constitution = array_unique(file($dest_constitution)); - $number_of_unique_lines_in_constitution = count($unique_lines_in_constitution); - $constitution_readable = TRUE; - if ($lang == 'en') { - $aproximate_number_of_untranslated_lines = $number_of_unique_lines_in_constitution; - $untranslated_lines_in_constitution = array(); - } else { - $untranslated_lines_in_constitution = array_intersect($unique_lines_in_eng_constitution, $unique_lines_in_constitution); - $number_of_nonunique_lines_lang_constitution = count($untranslated_lines_in_constitution); - $ratio = $number_of_nonunique_lines_lang_constitution / $number_of_unique_lines_in_eng_constitution; - $limit_ratio = 0.15; // limit ratio of "allowed" untranslated lines - if ($ratio > $limit_ratio) { - // add aproximate number of untranslated constitution lines - $aproximate_number_of_untranslated_lines = $number_of_nonunique_lines_lang_constitution - round($limit_ratio * $number_of_unique_lines_in_eng_constitution); - } - } - } else { - $unique_lines_in_constitution = $unique_lines_in_eng_constitution; - $aproximate_number_of_untranslated_lines = $number_of_unique_lines_in_eng_constitution; - $untranslated_lines_in_constitution = $unique_lines_in_eng_constitution; - } - - return array( - 'unique_lines_in_constitution' => $unique_lines_in_constitution, - 'constitution_readable' => $constitution_readable, - 'untranslated_lines_in_constitution' => $untranslated_lines_in_constitution, - 'aproximate_number_of_untranslated_lines' => $aproximate_number_of_untranslated_lines, - ); -} |