/** * Compare reference and localized raw file * * @param array $website Website data * @param string $locale Locale to analyze * @param string $filename File to analyze * * @return array Results from comparison */ public static function compareRawFiles($website, $locale, $filename) { $results = []; // Store reference file hash and last update date $reference_locale = Project::getReferenceLocale($website); $reference_filename = Project::getLocalFilePath($website, $reference_locale, $filename); if (file_exists($reference_filename)) { $reference_content = sha1_file($reference_filename); $results['reference_exists'] = true; $results['reference_url'] = Project::getPublicFilePath($website, $reference_locale, $filename); $results['reference_lastupdate'] = Utils::getSVNCommitTimestamp($reference_filename); } else { $results['reference_exists'] = false; $results['cmp_result'] = 'missing_reference'; } // Generate locale file hash and last update date $locale_filename = Project::getLocalFilePath($website, $locale, $filename); if (file_exists($locale_filename)) { $locale_content = sha1_file($locale_filename); $results['locale_exists'] = true; $results['locale_url'] = Project::getPublicFilePath($website, $locale, $filename); $results['locale_lastupdate'] = Utils::getSVNCommitTimestamp($locale_filename); if ($results['reference_exists']) { if ($locale_content == $reference_content) { $results['cmp_result'] = 'untranslated'; } elseif ($results['reference_lastupdate'] > $results['locale_lastupdate']) { // I check dates only if content is not identical $results['cmp_result'] = 'outdated'; } else { $results['cmp_result'] = 'ok'; } } } else { $results['locale_exists'] = false; $results['cmp_result'] = 'missing_locale'; } return $results; }
if (Project::isObsoleteFile($current_website, $current_filename, $current_locale)) { continue; } // File doesn't exist if (!file_exists(Project::getLocalFilePath($current_website, $current_locale, $current_filename))) { continue; } $supported_locale = true; $bugzilla_link = Bugzilla::getNewBugLink($current_locale, $bugzilla_locale, 'upload', [$current_filename]); // Load reference strings $reference_filename = Project::getLocalFilePath($current_website, $reference_locale, $current_filename); $reference_url = Project::getPublicFilePath($current_website, $reference_locale, $current_filename); $reference_data = LangManager::loadSource($current_website, $reference_locale, $current_filename); // Extract data from locale $locale_filename = Project::getLocalFilePath($current_website, $current_locale, $current_filename); $locale_url = Project::getPublicFilePath($current_website, $current_locale, $current_filename); $locale_analysis = LangManager::analyzeLangFile($current_website, $current_locale, $current_filename, $reference_data); if (!in_array($current_filename, $no_active_tag) && $website_name == 'www.mozilla.org') { $status = $locale_analysis['activated'] ? ' file_activated' : ' file_notactivated'; } else { $status = ' file_activated'; } // check if the lang file is in utf8 if (Utils::isUTF8($locale_filename) == false) { $status .= ' file_notutf8'; } $count_identical = count($locale_analysis['Identical']); $count_missing = count($locale_analysis['Missing']); $count_errors = LangManager::countErrors($locale_analysis['errors']); if ($count_identical + $count_missing + $count_errors == 0) { // File is complete