Example #1
0
 /**
  * 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;
 }
<?php

namespace Transvision;

$source = Utils::getRepoStrings(Project::getReferenceLocale($repo), $repo);
$target = Utils::getRepoStrings($locale, $repo);
// Set up channel selector, ignore mozilla.org
$channels = Project::getSupportedRepositories();
unset($channels['mozilla_org']);
$channel_selector = Utils::getHtmlSelectOptions($channels, $repo, true);
// Build the target locale switcher
$target_locales_list = Utils::getHtmlSelectOptions(Project::getRepositoryLocales($repo), $locale);
$source = array_map(['Transvision\\AnalyseStrings', 'cleanUpEntities'], $source);
$target = array_map(['Transvision\\AnalyseStrings', 'cleanUpEntities'], $target);
// We need to ignore some strings because of false positives
$ignored_strings = ['mail/chrome/messenger/aboutRights.dtd:rights.webservices-term4', 'suite/chrome/branding/aboutRights.dtd:rights.webservices-term4', 'toolkit/chrome/global/aboutRights.dtd:rights.webservices-term5'];
$var_errors = AnalyseStrings::differences($source, $target, $repo, $ignored_strings);
$error_count = count($var_errors);
// Add component filter
if (in_array($repo, $desktop_repos)) {
    // Build logic to filter components
    $javascript_include = ['component_filter.js'];
    $components = Project::getComponents(array_flip($var_errors));
    $filter_block = '';
    foreach ($components as $value) {
        $filter_block .= " <a href='#{$value}' id='{$value}' class='filter'>{$value}</a>";
    }
}
// RTL support
$direction1 = RTLSupport::getDirection($source_locale);
$direction2 = RTLSupport::getDirection($locale);
Example #3
0
// Error management
if (isset($error)) {
    if ($error == 1) {
        print "<p>No entity asked for, goodbye.</p>";
    } elseif ($error == 2) {
        print "<p>Entity does not exist for this repo, goodbye.</p>";
    }
    return;
}
// We have no error, display results
$page_descr = $entity;
// Promote API view
include VIEWS . 'templates/api_promotion.php';
?>

<table>
    <tr>
        <th>Locale</th>
        <th>Translation</th>
        <th>&nbsp;</th>
    </tr>
    <?php 
$reference_locale = Project::getReferenceLocale($repo);
foreach ($translations as $locale => $translation) {
    $rtl_support = RTLSupport::isRTL($locale) ? 'dir="rtl"' : '';
    $search_link = "/?sourcelocale={$reference_locale}&locale={$locale}&repo={$repo}&search_type=entities&recherche={$entity}&perfect_match=perfect_match";
    echo "<tr id='{$locale}''>\n" . "  <th><a href='#{$locale}'>{$locale}</a></th>\n" . "  <td lang='#{$locale}' {$rtl_support} >" . Utils::secureText($translation) . "</td>\n" . "  <td><a class='onestring_search' href='{$search_link}' title='Search for the entity in this locale'>�</a></td>\n" . "</tr>\n";
}
?>
</table>
<?php 
}
foreach ($displayed_sites as $site_index => $current_website) {
    $websitename = Project::getWebsiteName($current_website);
    $website_data_source = Project::getWebsiteDataType($current_website);
    if ($website_data_source == 'lang') {
        $table_headers = "<th>Filename</th><th>URL</th><th>Status</th><th>Translations</th><th>Strings</th><th>Words</th>";
    } else {
        $table_headers = "<th>Filename</th>\n<th>Status</th>\n\n";
    }
    $html_output .= "\n\t<h2 id='{$websitename}'><a href='#{$websitename}'>{$websitename}</a></h2>\n";
    $html_output .= "\t<table class='listpages'>\n        <thead>\n            <tr>{$table_headers}</tr>\n        </thead>\n        <tbody>\n";
    // Totals to display in the table footer
    $total_strings = $total_words = $total_files = 0;
    foreach (Project::getWebsiteFiles($current_website) as $current_filename) {
        if ($website_data_source == 'lang') {
            $reference_locale = Project::getReferenceLocale($current_website);
            $reference_data = LangManager::loadSource($current_website, $reference_locale, $current_filename);
            $get_words = function ($item) {
                return str_word_count(strip_tags($item));
            };
            $nb_words = array_sum(array_map($get_words, $reference_data['strings']));
            $nb_strings = count($reference_data['strings']);
            $total_strings += $nb_strings;
            $total_words += $nb_words;
            $total_files++;
            $html_output .= "<tr>\n";
            // Check if the file is obsolete for all locales
            if (Project::isObsoleteFile($current_website, $current_filename, 'all')) {
                $html_output .= "  <td class='obsolete' title='Obsolete file'>{$current_filename}</td>\n";
            } else {
                $html_output .= "  <td>{$current_filename}</td>\n";
<?php

namespace Transvision;

$missing_repos = $available_repos = $results = '';
$missing_repos_count = $repos_count = 0;
$strings = ['en-US' => [], $locale => []];
foreach ($repos as $repo) {
    if (isset($_GET[$repo])) {
        $cache_file_english = Utils::getRepoStrings(Project::getReferenceLocale($repo), $repo);
        if ($cache_file_english) {
            $cache_file_locale = Utils::getRepoStrings($locale, $repo);
            if ($repo == 'mozilla_org') {
                $cache_file_locale = array_map(function ($e) {
                    return trim(rtrim($e, '{ok}'));
                }, $cache_file_locale);
            }
            // If a repo is missing, we don't have additional keys
            if ($cache_file_locale) {
                $strings['en-US'] = array_merge($strings['en-US'], $cache_file_english);
                $strings[$locale] = array_merge($strings[$locale], $cache_file_locale);
                $repos_count++;
                $available_repos .= '<br>' . $repos_nice_names[$repo] . ' (' . $locale . ')';
                unset($cache_file_locale);
            } else {
                $missing_repos_count++;
                $missing_repos .= '<br>' . $repos_nice_names[$repo] . ' (' . $locale . ')';
            }
            unset($cache_file_english);
        }
    }
 /**
  * Load file, remove empty lines and return an array of strings
  *
  * @param array  $website  Website data
  * @param string $locale   Locale to analyze
  * @param string $filename File to analyze
  *
  * @return array Data parsed from lang file
  */
 public static function loadSource($website, $locale, $filename)
 {
     $is_reference_language = $locale == Project::getReferenceLocale($website);
     $path = Project::getLocalFilePath($website, $locale, $filename);
     return DotLangParser::parseFile($path, $is_reference_language);
 }
Example #7
0
namespace Transvision;

// Redirect old JSON API calls to new API
if (isset($_GET['json'])) {
    // Define sane fallback values to redirect old API calls to new API calls
    $get_value = function ($value, $fallback) {
        if (isset($_GET[$value])) {
            // 'strings_entities' search is now called 'all' in new API
            return $_GET[$value] == 'strings_entities' ? 'all' : Utils::secureText($_GET[$value]);
        }
        return $fallback;
    };
    $repo = $get_value('repo', 'release');
    $type = $get_value('search_type', 'strings');
    $source = $get_value('sourcelocale', Project::getReferenceLocale($repo));
    $target = $get_value('locale', 'fr');
    /*
       We need to urlencode() twice because Apache doesn't allow urls with
       escaped slashes, it gives a 404 instead of going through mod_rewrite
       see: http://www.leakon.com/archives/865
    */
    $terms = urlencode(urlencode(Utils::cleanString($_GET['recherche'])));
    $regex = [];
    $regex['whole'] = isset($_GET['whole_word']) ? 'whole_word=1' : '';
    $regex['case'] = isset($_GET['case_sensitive']) ? 'case_sensitive=1' : '';
    $regex['perfect'] = isset($_GET['perfect_match']) ? 'perfect_match=1' : '';
    $regex = array_filter($regex);
    $regex = count($regex) > 0 ? '?' . implode('&', $regex) : '';
    header('Status: 301 Moved Permanently', false, 301);
    header('Location:' . APP_SCHEME . "{$_SERVER['HTTP_HOST']}/api/v1/search/" . "{$type}/{$repo}/{$source}/{$target}/{$terms}/{$regex}");