diff --git a/app/lib/build_detective.rb b/app/lib/build_detective.rb index 2d796ac43..39b89ae4e 100644 --- a/app/lib/build_detective.rb +++ b/app/lib/build_detective.rb @@ -28,9 +28,8 @@ def files_named(name_pattern) def met_result(result_description, html_url) { value: CriterionStatus::MET, confidence: 3, - explanation: - "Non-trivial #{result_description} file in repository: " \ - "<#{html_url}>." + explanation: I18n.t('detectives.repo_files.file_found', + description: result_description, url: html_url) } end diff --git a/app/lib/chief.rb b/app/lib/chief.rb index 364c3c5ee..ccf1b125a 100644 --- a/app/lib/chief.rb +++ b/app/lib/chief.rb @@ -124,6 +124,18 @@ def log_detective_failure(source, e, detective, proposal, data) end end + # Execute a block with I18n.locale temporarily set to the project's entry_locale. + # This ensures detective explanations are generated in the project's language. + # @yield Block to execute with project locale set + # @return Result of the block + def with_project_locale + original_locale = I18n.locale + I18n.locale = @entry_locale&.to_sym || :en + yield + ensure + I18n.locale = original_locale + end + # Invoke one "Detective", which will # analyze the project and reply with an updated changeset in the form # { fieldname1: { value: value, confidence: 1..5, explanation: text}, ...} @@ -264,24 +276,26 @@ def needed_outputs(needed_fields, changed_fields = nil) # @param changed_fields [Array, nil] Fields that were explicitly changed # rubocop:disable Metrics/MethodLength def propose_changes(needed_fields: nil, changed_fields: nil) - current_proposal = {} # Current best changeset. + with_project_locale do + current_proposal = {} # Current best changeset. - # Determine what outputs we need - needed = needed_outputs(needed_fields, changed_fields) + # Determine what outputs we need + needed = needed_outputs(needed_fields, changed_fields) - # Filter to only needed detectives (subset varies per request) - detectives_to_run = filter_needed_detectives(needed) + # Filter to only needed detectives (subset varies per request) + detectives_to_run = filter_needed_detectives(needed) - # Sort that specific subset in dependency order - detectives_to_run = topological_sort_detectives(detectives_to_run) + # Sort that specific subset in dependency order + detectives_to_run = topological_sort_detectives(detectives_to_run) - # Run each detective in the sorted order - detectives_to_run.each do |detective_class| - detective = detective_class.new - detective.octokit_client_factory = @client_factory - current_proposal = propose_one_change(detective, current_proposal) + # Run each detective in the sorted order + detectives_to_run.each do |detective_class| + detective = detective_class.new + detective.octokit_client_factory = @client_factory + current_proposal = propose_one_change(detective, current_proposal) + end + current_proposal end - current_proposal end # rubocop:enable Metrics/MethodLength diff --git a/app/lib/floss_license_detective.rb b/app/lib/floss_license_detective.rb index fceb611ec..62404d995 100644 --- a/app/lib/floss_license_detective.rb +++ b/app/lib/floss_license_detective.rb @@ -148,21 +148,20 @@ def analyze(_evidence, current) floss_license_osi_status: { value: CriterionStatus::MET, confidence: 5, - explanation: "The #{license} license is approved by the " \ - 'Open Source Initiative (OSI).' + explanation: I18n.t('detectives.floss_license.osi_approved', + license: license) }, floss_license_status: { value: CriterionStatus::MET, confidence: 5, - explanation: "The #{license} license is approved by the " \ - 'Open Source Initiative (OSI).' + explanation: I18n.t('detectives.floss_license.osi_approved', + license: license) }, osps_le_02_01_status: { value: CriterionStatus::MET, confidence: 5, - explanation: "The #{license} license for the repository " \ - 'contents is approved by the ' \ - 'Open Source Initiative (OSI).' + explanation: I18n.t('detectives.floss_license.osi_approved_repository', + license: license) }, # We can't know what the license of the *released* assets are # looking only at the repository, as the LICENSE file is focused @@ -176,7 +175,7 @@ def analyze(_evidence, current) floss_license_osi_status: { value: CriterionStatus::UNMET, confidence: 1, - explanation: '// Did not find license in the OSI list.' + explanation: I18n.t('detectives.floss_license.not_in_osi_list') } } else diff --git a/app/lib/github_basic_detective.rb b/app/lib/github_basic_detective.rb index dd4c09f64..1d9ebe8ed 100644 --- a/app/lib/github_basic_detective.rb +++ b/app/lib/github_basic_detective.rb @@ -101,57 +101,50 @@ def analyze(_evidence, current) # We have a github repo. results[:repo_public_status] = { value: CriterionStatus::MET, confidence: 3, - explanation: 'Repository on GitHub, which provides ' \ - 'public git repositories with URLs.' + explanation: I18n.t('detectives.github.repo_public') } results[:repo_track_status] = { value: CriterionStatus::MET, confidence: 4, - explanation: 'Repository on GitHub, which uses git. ' \ - 'git can track the changes, ' \ - 'who made them, and when they were made.' + explanation: I18n.t('detectives.github.repo_track') } results[:repo_distributed_status] = { value: CriterionStatus::MET, confidence: 4, - explanation: 'Repository on GitHub, which uses git. ' \ - 'git is distributed.' + explanation: I18n.t('detectives.github.repo_distributed') } results[:contribution_status] = { value: CriterionStatus::MET, confidence: 2, - explanation: 'Projects on GitHub by default use issues and ' \ - 'pull requests, as encouraged by documentation such as ' \ - '.' + explanation: I18n.t('detectives.github.contribution') } results[:discussion_status] = { value: CriterionStatus::MET, confidence: 3, - explanation: 'GitHub supports discussions on issues and pull requests.' + explanation: I18n.t('detectives.github.discussion') } # Baseline: public discussion mechanisms (same evidence as discussion_status) results[:osps_gv_02_01_status] = { value: CriterionStatus::MET, confidence: 3, - explanation: 'GitHub supports public discussions on proposed changes (via pull requests) and usage obstacles (via issues).' + explanation: I18n.t('detectives.github.osps_gv_02_01') } # Baseline criteria - defect reporting instructions (low confidence) results[:osps_do_02_01_status] = { value: CriterionStatus::MET, confidence: 2, - explanation: 'GitHub provides defect reporting mechanisms by default (via issues).' + explanation: I18n.t('detectives.github.osps_do_02_01') } # 2FA required by GitHub. An organization *might* use multiple repo # hosts, but given our information, 2FA seems highly likely. results[:osps_ac_01_01_status] = { value: CriterionStatus::MET, confidence: 3, - explanation: 'GitHub requires 2FA as of March 2023.' + explanation: I18n.t('detectives.github.osps_ac_01_01') } # Publicly readable, if we can read it. It's possible it's not current, # but if this really is the "main" repo (as claimed) then this is met. results[:osps_qa_01_01_status] = { value: CriterionStatus::MET, confidence: 3, - explanation: 'Repository is publicly available on GitHub.' + explanation: I18n.t('detectives.github.osps_qa_01_01') } # If the main repo is on GitHub, then git will store this results[:osps_qa_01_02_status] = { value: CriterionStatus::MET, confidence: 3, - explanation: 'Repository git metadata is publicly available on GitHub.' + explanation: I18n.t('detectives.github.osps_qa_01_02') } # Get basic evidence @@ -169,7 +162,7 @@ def analyze(_evidence, current) if basic_repo_data[:name] results[:name] = { value: basic_repo_data[:name], - confidence: 3, explanation: 'GitHub name' + confidence: 3, explanation: I18n.t('detectives.github.name') } end if basic_repo_data[:description] @@ -177,7 +170,7 @@ def analyze(_evidence, current) value: basic_repo_data[:description].gsub( /(\A|\s)\:[a-zA-Z]+\:(\s|\Z)/, ' ' ).strip, - confidence: 3, explanation: 'GitHub description' + confidence: 3, explanation: I18n.t('detectives.github.description') } end # rubocop:enable Metrics/BlockLength @@ -194,7 +187,7 @@ def analyze(_evidence, current) license = cleanup_license(license_data_raw[:key]) results[:license] = { value: license, - confidence: 3, explanation: 'GitHub API license analysis' + confidence: 3, explanation: I18n.t('detectives.github.license') } end @@ -204,7 +197,7 @@ def analyze(_evidence, current) results[:implementation_languages] = { value: implementation_languages, confidence: 3, - explanation: 'GitHub API implementation language analysis' + explanation: I18n.t('detectives.github.implementation_languages') } end diff --git a/app/lib/hardened_sites_detective.rb b/app/lib/hardened_sites_detective.rb index e3cb3c849..2b5859d4e 100644 --- a/app/lib/hardened_sites_detective.rb +++ b/app/lib/hardened_sites_detective.rb @@ -17,21 +17,20 @@ class HardenedSitesDetective < Detective content-security-policy strict-transport-security x-content-type-options ].freeze - MET = + + def met_result { value: CriterionStatus::MET, confidence: 3, - explanation: 'Found all required security hardening headers.' - }.freeze - UNMET_MISSING = - { - value: CriterionStatus::UNMET, confidence: 5, - explanation: 'Required security hardening headers missing: ' - }.freeze - UNMET_NOSNIFF = + explanation: I18n.t('detectives.hardened_sites.all_headers_found') + } + end + + def unmet_missing_result { value: CriterionStatus::UNMET, confidence: 5, - explanation: '// X-Content-Type-Options was not set to "nosniff".' - }.freeze + explanation: I18n.t('detectives.hardened_sites.headers_missing') + } + end INPUTS = %i[repo_url homepage_url].freeze OUTPUTS = [:hardened_site_status].freeze @@ -114,9 +113,9 @@ def report_on_check_urls(evidence, homepage_url, repo_url) all_problems = problems_in_urls(evidence, urls) results[:hardened_site_status] = if all_problems.empty? - MET + met_result else - answer = UNMET_MISSING.deep_dup # clone but result is not frozen + answer = unmet_missing_result answer[:explanation] += all_problems.join(', ') answer end diff --git a/app/lib/name_from_url_detective.rb b/app/lib/name_from_url_detective.rb index d2b047bf8..cdcd1e547 100644 --- a/app/lib/name_from_url_detective.rb +++ b/app/lib/name_from_url_detective.rb @@ -32,7 +32,7 @@ def analyze(_evidence, current) @results[:name] = { value: finding[2], confidence: 1, - explanation: "The project URL's domain name suggests this." + explanation: I18n.t('detectives.name_from_url.domain_suggests') } else finding = name_in_url_tail.match(homepage_url) @@ -40,7 +40,7 @@ def analyze(_evidence, current) @results[:name] = { value: finding[1], confidence: 1, - explanation: "The project URL's tail suggests this." + explanation: I18n.t('detectives.name_from_url.tail_suggests') } end end @@ -51,7 +51,7 @@ def analyze(_evidence, current) @results[:name] = { value: finding[1], confidence: 1, - explanation: "The repo URL's tail suggests this." + explanation: I18n.t('detectives.name_from_url.repo_tail_suggests') } end end diff --git a/app/lib/project_sites_https_detective.rb b/app/lib/project_sites_https_detective.rb index 66ee09fd9..478b7358c 100644 --- a/app/lib/project_sites_https_detective.rb +++ b/app/lib/project_sites_https_detective.rb @@ -43,13 +43,13 @@ def set_http_results @results[:sites_https_status] = { value: CriterionStatus::UNMET, confidence: 5, - explanation: '// Given an http: URL.' + explanation: I18n.t('detectives.project_sites_https.given_http') } # Any official channel using http is a problem @results[:osps_br_03_01_status] = { value: CriterionStatus::UNMET, confidence: 5, - explanation: 'Project URLs lists http (not https) as official.' + explanation: I18n.t('detectives.project_sites_https.official_http') } # We don't know enough to be *certain* what the distribution channels # are; it's possible that the official distribution channels *are* @@ -59,7 +59,7 @@ def set_http_results @results[:osps_br_03_02_status] = { value: CriterionStatus::UNMET, confidence: 3, - explanation: 'We were given a URL that uses http (not https).' + explanation: I18n.t('detectives.project_sites_https.url_uses_http') } end # rubocop:enable Metrics/MethodLength @@ -69,7 +69,8 @@ def met_result(explanation) end def set_https_results - @results[:sites_https_status] = met_result('Given only https: URLs.') + @results[:sites_https_status] = + met_result(I18n.t('detectives.project_sites_https.given_https')) @results[:osps_br_03_01_status] = met_result('Project URLs use HTTPS exclusively.') @results[:osps_br_03_02_status] = diff --git a/app/lib/repo_files_examine_detective.rb b/app/lib/repo_files_examine_detective.rb index 6199f247b..6cb5cda7a 100644 --- a/app/lib/repo_files_examine_detective.rb +++ b/app/lib/repo_files_examine_detective.rb @@ -49,16 +49,16 @@ def directory_named(name_pattern) def unmet_result(result_description, confidence: 1) { value: CriterionStatus::UNMET, confidence: confidence, - explanation: "// No #{result_description} file found." + explanation: I18n.t('detectives.repo_files.no_file_found', + description: result_description) } end def met_result(result_description, html_url, confidence: 3) { value: CriterionStatus::MET, confidence: confidence, - explanation: - "Non-trivial #{result_description} file in repository: " \ - "<#{html_url}>." + explanation: I18n.t('detectives.repo_files.file_found', + description: result_description, url: html_url) } end @@ -135,7 +135,7 @@ def set_baseline_contribution_status confidence = @results[:contribution_status][:confidence] @results[:osps_gv_03_01_status] = { value: CriterionStatus::MET, confidence: confidence, - explanation: 'Contribution process documented in repository.' + explanation: I18n.t('detectives.repo_files.contribution_documented') } end @@ -164,17 +164,16 @@ def set_baseline_license_status confidence = @results[:license_location_status][:confidence] @results[:osps_le_03_01_status] = { value: CriterionStatus::MET, confidence: confidence, - explanation: 'License file found in repository.' + explanation: I18n.t('detectives.repo_files.license_found') } else @results[:osps_le_03_01_status] = { value: CriterionStatus::UNMET, confidence: 5, - explanation: 'License file not found in repository.' + explanation: I18n.t('detectives.repo_files.license_not_found') } @results[:osps_le_03_02_status] = { value: CriterionStatus::UNMET, confidence: 2, - explanation: 'License file not found in repository (likely not ' \ - 'included in releases).' + explanation: I18n.t('detectives.repo_files.license_not_in_releases') } end end diff --git a/app/lib/subdir_file_contents_detective.rb b/app/lib/subdir_file_contents_detective.rb index 66f38add1..28f72f7e9 100644 --- a/app/lib/subdir_file_contents_detective.rb +++ b/app/lib/subdir_file_contents_detective.rb @@ -24,22 +24,24 @@ class SubdirFileContentsDetective < Detective def unmet_result(result_description) { value: CriterionStatus::UNMET, confidence: 1, - explanation: "// No #{result_description} file(s) found." + explanation: I18n.t('detectives.subdir_files.no_files_found', + description: result_description) } end def unmet_result_folder(result_description) { value: CriterionStatus::UNMET, confidence: 3, - explanation: "// No appropriate folder found for #{result_description}." + explanation: I18n.t('detectives.subdir_files.no_folder_found', + description: result_description) } end def met_result(result_description) { value: CriterionStatus::MET, confidence: 3, - explanation: - "Some #{result_description} file contents found." + explanation: I18n.t('detectives.subdir_files.some_contents_found', + description: result_description) } end diff --git a/app/lib/test_forced_detective.rb b/app/lib/test_forced_detective.rb index 3d4e91dcb..acf51b23d 100644 --- a/app/lib/test_forced_detective.rb +++ b/app/lib/test_forced_detective.rb @@ -42,7 +42,8 @@ def met_proposal(confidence) { value: 'Met', confidence: confidence, - explanation: "Test automation (confidence #{confidence})" + explanation: I18n.t('detectives.test_forced.test_automation', + confidence: confidence) } end end diff --git a/config/locales/en.yml b/config/locales/en.yml index c55401b5e..66948f6e5 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -3801,4 +3801,49 @@ en: comma_separated_list: " must be a comma-separated list of names using only ASCII characters" begin_with_cpe: ' must begin with "cpe:"' + detectives: + github: + repo_public: "Repository on GitHub, which provides public git repositories with URLs." + repo_track: "Repository on GitHub, which uses git. git can track the changes, who made them, and when they were made." + repo_distributed: "Repository on GitHub, which uses git. git is distributed." + contribution: "Projects on GitHub by default use issues and pull requests, as encouraged by documentation such as ." + discussion: "GitHub supports discussions on issues and pull requests." + osps_gv_02_01: "GitHub supports public discussions on proposed changes (via pull requests) and usage obstacles (via issues)." + osps_do_02_01: "GitHub provides defect reporting mechanisms by default (via issues)." + osps_ac_01_01: "GitHub requires 2FA as of March 2023." + osps_qa_01_01: "Repository is publicly available on GitHub." + osps_qa_01_02: "Repository git metadata is publicly available on GitHub." + name: "GitHub name" + description: "GitHub description" + license: "GitHub API license analysis" + implementation_languages: "GitHub API implementation language analysis" + floss_license: + osi_approved: "The %{license} license is approved by the Open Source Initiative (OSI)." + osi_approved_repository: "The %{license} license for the repository contents is approved by the Open Source Initiative (OSI)." + not_in_osi_list: "Did not find license in the OSI list." + hardened_sites: + all_headers_found: "Found all required security hardening headers." + headers_missing: "Required security hardening headers missing: " + name_from_url: + domain_suggests: "The project URL's domain name suggests this." + tail_suggests: "The project URL's tail suggests this." + repo_tail_suggests: "The repo URL's tail suggests this." + project_sites_https: + given_http: "Given an http: URL." + official_http: "Project URLs lists http (not https) as official." + url_uses_http: "We were given a URL that uses http (not https)." + given_https: "Given only https: URLs." + repo_files: + no_file_found: "No %{description} file found." + file_found: "Non-trivial %{description} file in repository: <%{url}>." + contribution_documented: "Contribution process documented in repository." + license_found: "License file found in repository." + license_not_found: "License file not found in repository." + license_not_in_releases: "License file not found in repository (likely not included in releases)." + subdir_files: + no_files_found: "No %{description} file(s) found." + no_folder_found: "No appropriate folder found for %{description}." + some_contents_found: "Some %{description} file contents found." + test_forced: + test_automation: "Test automation (confidence %{confidence})" last_entry: Last translation entry diff --git a/config/machine_translations/de.yml b/config/machine_translations/de.yml index 16a37f674..9bc5f2a45 100644 --- a/config/machine_translations/de.yml +++ b/config/machine_translations/de.yml @@ -350,3 +350,49 @@ de: account_activations: delay: many: Als Anti-Spam-Maßnahme müssen Sie %{count} Stunden nach der Aktivierung warten, bevor Sie sich anmelden können. + detectives: + github: + repo_public: Repository auf GitHub, das öffentliche Git-Repositorys mit URLs bereitstellt. + repo_track: Repository auf GitHub, das Git verwendet. Git kann die Änderungen verfolgen, wer sie vorgenommen hat und wann sie vorgenommen wurden. + repo_distributed: Repository auf GitHub, das Git verwendet. Git ist verteilt. + contribution: Projekte auf GitHub verwenden standardmäßig Issues und Pull-Requests, wie in der Dokumentation unter empfohlen. + discussion: GitHub unterstützt Diskussionen zu Issues und Pull-Requests. + osps_gv_02_01: GitHub unterstützt öffentliche Diskussionen zu vorgeschlagenen Änderungen (über Pull-Requests) und Nutzungshindernissen (über Issues). + osps_do_02_01: GitHub bietet standardmäßig Fehlermeldemechanismen (über Issues). + osps_ac_01_01: GitHub erfordert seit März 2023 2FA. + osps_qa_01_01: Repository ist öffentlich auf GitHub verfügbar. + osps_qa_01_02: Repository-Git-Metadaten sind öffentlich auf GitHub verfügbar. + name: GitHub-Name + description: GitHub-Beschreibung + license: GitHub-API-Lizenzanalyse + implementation_languages: GitHub-API-Implementierungssprachenanalyse + floss_license: + osi_approved: Die %{license}-Lizenz ist von der Open Source Initiative (OSI) genehmigt. + osi_approved_repository: Die %{license}-Lizenz für den Repository-Inhalt ist von der Open Source Initiative (OSI) genehmigt. + not_in_osi_list: Lizenz wurde nicht in der OSI-Liste gefunden. + hardened_sites: + all_headers_found: Alle erforderlichen Security-Hardening-Header gefunden. + headers_missing: 'Erforderliche Security-Hardening-Header fehlen: ' + nosniff_not_set: X-Content-Type-Options wurde nicht auf "nosniff" gesetzt. + name_from_url: + domain_suggests: Der Domainname der Projekt-URL deutet darauf hin. + tail_suggests: Das Ende der Projekt-URL deutet darauf hin. + repo_tail_suggests: Das Ende der Repository-URL deutet darauf hin. + project_sites_https: + given_http: http:-URL angegeben. + official_http: Projekt-URLs listen http (nicht https) als offiziell auf. + url_uses_http: Uns wurde eine URL gegeben, die http (nicht https) verwendet. + given_https: Nur https:-URLs angegeben. + repo_files: + no_file_found: Keine %{description}-Datei gefunden. + file_found: 'Nicht-triviale %{description}-Datei im Repository: <%{url}>.' + contribution_documented: Beitragsprozess im Repository dokumentiert. + license_found: Lizenzdatei im Repository gefunden. + license_not_found: Lizenzdatei im Repository nicht gefunden. + license_not_in_releases: Lizenzdatei im Repository nicht gefunden (wahrscheinlich nicht in Releases enthalten). + subdir_files: + no_files_found: Keine %{description}-Datei(en) gefunden. + no_folder_found: Kein geeigneter Ordner für %{description} gefunden. + some_contents_found: Einige %{description}-Dateiinhalte gefunden. + test_forced: + test_automation: Testautomatisierung (Vertrauen %{confidence}) diff --git a/config/machine_translations/es.yml b/config/machine_translations/es.yml index 867c381eb..41124b7ec 100644 --- a/config/machine_translations/es.yml +++ b/config/machine_translations/es.yml @@ -1337,3 +1337,49 @@ es: comma_separated_list: " debe ser una lista separada por comas de nombres usando solo caracteres ASCII" begin_with_cpe: ' debe comenzar con "cpe:"' last_entry: Última entrada de traducción + detectives: + github: + repo_public: Repositorio en GitHub, que proporciona repositorios git públicos con URLs. + repo_track: Repositorio en GitHub, que usa git. git puede rastrear los cambios, quién los hizo y cuándo se hicieron. + repo_distributed: Repositorio en GitHub, que usa git. git es distribuido. + contribution: Los proyectos en GitHub de forma predeterminada usan issues y pull requests, como lo fomenta la documentación como . + discussion: GitHub admite discusiones en issues y pull requests. + osps_gv_02_01: GitHub admite discusiones públicas sobre cambios propuestos (a través de pull requests) y obstáculos de uso (a través de issues). + osps_do_02_01: GitHub proporciona mecanismos de informes de defectos de forma predeterminada (a través de issues). + osps_ac_01_01: GitHub requiere 2FA desde marzo de 2023. + osps_qa_01_01: El repositorio está públicamente disponible en GitHub. + osps_qa_01_02: Los metadatos git del repositorio están públicamente disponibles en GitHub. + name: Nombre de GitHub + description: Descripción de GitHub + license: Análisis de licencia de la API de GitHub + implementation_languages: Análisis de lenguaje de implementación de la API de GitHub + floss_license: + osi_approved: La licencia %{license} está aprobada por la Open Source Initiative (OSI). + osi_approved_repository: La licencia %{license} para el contenido del repositorio está aprobada por la Open Source Initiative (OSI). + not_in_osi_list: No se encontró la licencia en la lista de OSI. + hardened_sites: + all_headers_found: Se encontraron todos los encabezados de endurecimiento de seguridad requeridos. + headers_missing: 'Faltan encabezados de endurecimiento de seguridad requeridos: ' + nosniff_not_set: X-Content-Type-Options no se estableció en "nosniff". + name_from_url: + domain_suggests: El nombre de dominio de la URL del proyecto sugiere esto. + tail_suggests: La cola de la URL del proyecto sugiere esto. + repo_tail_suggests: La cola de la URL del repositorio sugiere esto. + project_sites_https: + given_http: Dado una URL http:. + official_http: Las URLs del proyecto listan http (no https) como oficial. + url_uses_http: Se nos proporcionó una URL que usa http (no https). + given_https: Solo se proporcionaron URLs https:. + repo_files: + no_file_found: No se encontró ningún archivo de %{description}. + file_found: 'Archivo de %{description} no trivial en el repositorio: <%{url}>.' + contribution_documented: Proceso de contribución documentado en el repositorio. + license_found: Archivo de licencia encontrado en el repositorio. + license_not_found: Archivo de licencia no encontrado en el repositorio. + license_not_in_releases: Archivo de licencia no encontrado en el repositorio (probablemente no incluido en los lanzamientos). + subdir_files: + no_files_found: No se encontraron archivos de %{description}. + no_folder_found: No se encontró ninguna carpeta apropiada para %{description}. + some_contents_found: Se encontraron algunos contenidos de archivos de %{description}. + test_forced: + test_automation: Automatización de pruebas (confianza %{confidence}) diff --git a/config/machine_translations/fr.yml b/config/machine_translations/fr.yml index debb23c9b..878b4c773 100644 --- a/config/machine_translations/fr.yml +++ b/config/machine_translations/fr.yml @@ -279,3 +279,49 @@ fr: account_activations: delay: many: En tant que mesure anti-spam, vous devez attendre %{count} heures après l'activation avant de pouvoir vous connecter. + detectives: + github: + repo_public: Dépôt sur GitHub, qui fournit des dépôts git publics avec des URLs. + repo_track: Dépôt sur GitHub, qui utilise git. git peut suivre les modifications, qui les a faites et quand elles ont été faites. + repo_distributed: Dépôt sur GitHub, qui utilise git. git est distribué. + contribution: Les projets sur GitHub utilisent par défaut les problèmes (issues) et les pull requests, comme encouragé par la documentation telle que . + discussion: GitHub supporte les discussions sur les problèmes (issues) et les pull requests. + osps_gv_02_01: GitHub supporte les discussions publiques sur les modifications proposées (via les pull requests) et les obstacles d'utilisation (via les problèmes). + osps_do_02_01: GitHub fournit par défaut des mécanismes de signalement de défauts (via les problèmes). + osps_ac_01_01: GitHub exige l'authentification à deux facteurs (2FA) depuis mars 2023. + osps_qa_01_01: Le dépôt est publiquement disponible sur GitHub. + osps_qa_01_02: Les métadonnées git du dépôt sont publiquement disponibles sur GitHub. + name: nom GitHub + description: description GitHub + license: analyse de licence de l'API GitHub + implementation_languages: analyse des langages d'implémentation de l'API GitHub + floss_license: + osi_approved: La licence %{license} est approuvée par l'Open Source Initiative (OSI). + osi_approved_repository: La licence %{license} pour le contenu du dépôt est approuvée par l'Open Source Initiative (OSI). + not_in_osi_list: La licence n'a pas été trouvée dans la liste OSI. + hardened_sites: + all_headers_found: Tous les en-têtes de durcissement de sécurité requis ont été trouvés. + headers_missing: 'En-têtes de durcissement de sécurité requis manquants : ' + nosniff_not_set: X-Content-Type-Options n'était pas défini à "nosniff". + name_from_url: + domain_suggests: Le nom de domaine de l'URL du projet suggère cela. + tail_suggests: La fin de l'URL du projet suggère cela. + repo_tail_suggests: La fin de l'URL du dépôt suggère cela. + project_sites_https: + given_http: 'URL http : fournie.' + official_http: Les URL du projet listent http (et non https) comme officiel. + url_uses_http: On nous a fourni une URL qui utilise http (et non https). + given_https: 'Seules les URL https : ont été fournies.' + repo_files: + no_file_found: Aucun fichier %{description} trouvé. + file_found: 'Fichier %{description} non trivial dans le dépôt : <%{url}>.' + contribution_documented: Processus de contribution documenté dans le dépôt. + license_found: Fichier de licence trouvé dans le dépôt. + license_not_found: Fichier de licence introuvable dans le dépôt. + license_not_in_releases: Fichier de licence introuvable dans le dépôt (probablement non inclus dans les versions). + subdir_files: + no_files_found: Aucun fichier %{description} trouvé. + no_folder_found: Aucun dossier approprié trouvé pour %{description}. + some_contents_found: Certains contenus de fichier %{description} trouvés. + test_forced: + test_automation: Automatisation des tests (confiance %{confidence}) diff --git a/config/machine_translations/ja.yml b/config/machine_translations/ja.yml index 43248a605..8b5233ae9 100644 --- a/config/machine_translations/ja.yml +++ b/config/machine_translations/ja.yml @@ -279,3 +279,49 @@ ja: account_activations: delay: many: スパム対策として、アクティベーション後 %{count} 時間待ってからログインする必要があります。 + detectives: + github: + repo_public: 公開された git リポジトリ用の URL を提供する GitHub 上のリポジトリ。 + repo_track: git を使用する GitHub 上のリポジトリ。git は変更を追跡し、誰がいつ変更したかを記録できます。 + repo_distributed: git を使用する GitHub 上のリポジトリ。git は分散型です。 + contribution: GitHub 上のプロジェクトは、デフォルトで課題管理とプルリクエストを使用します。 などのドキュメントに従って奨励されています。 + discussion: GitHub は、課題管理とプルリクエストでの議論をサポートしています。 + osps_gv_02_01: GitHub は、提案された変更(プルリクエスト経由)と使用上の障害(課題経由)に関する公開議論をサポートしています。 + osps_do_02_01: GitHub は、デフォルトで(課題経由で)欠陥報告メカニズムを提供しています。 + osps_ac_01_01: GitHub は、2023年3月から2要素認証(2FA)を必要としています。 + osps_qa_01_01: リポジトリは GitHub 上で公開されています。 + osps_qa_01_02: リポジトリの git メタデータは GitHub 上で公開されています。 + name: GitHub 名 + description: GitHub 説明 + license: GitHub API ライセンス分析 + implementation_languages: GitHub API 実装言語分析 + floss_license: + osi_approved: "%{license} ライセンスは、オープンソース・イニシアチブ(OSI)によって承認されています。" + osi_approved_repository: リポジトリの内容に対する %{license} ライセンスは、オープンソース・イニシアチブ(OSI)によって承認されています。 + not_in_osi_list: OSI リストにライセンスが見つかりませんでした。 + hardened_sites: + all_headers_found: 必要なセキュリティ強化ヘッダーがすべて見つかりました。 + headers_missing: 必要なセキュリティ強化ヘッダーがありません: + nosniff_not_set: X-Content-Type-Options が "nosniff" に設定されていませんでした。 + name_from_url: + domain_suggests: プロジェクトURLのドメイン名がこれを示唆しています。 + tail_suggests: プロジェクトURLの末尾がこれを示唆しています。 + repo_tail_suggests: リポジトリURLの末尾がこれを示唆しています。 + project_sites_https: + given_http: 'http: URLが与えられました。' + official_http: プロジェクトURLリストは、公式としてhttp(httpsではない)をリストしています。 + url_uses_http: http(httpsではない)を使用するURLが与えられました。 + given_https: 'https: URLのみが与えられました。' + repo_files: + no_file_found: "%{description} ファイルが見つかりません。" + file_found: リポジトリに自明でない %{description} ファイル:<%{url}>。 + contribution_documented: リポジトリにコントリビューションプロセスが記録されています。 + license_found: リポジトリにライセンスファイルが見つかりました。 + license_not_found: リポジトリにライセンスファイルが見つかりません。 + license_not_in_releases: リポジトリにライセンスファイルが見つかりません(おそらくリリースに含まれていない)。 + subdir_files: + no_files_found: "%{description} ファイルが見つかりません。" + no_folder_found: "%{description} に適切なフォルダーが見つかりません。" + some_contents_found: いくつかの %{description} ファイルの内容が見つかりました。 + test_forced: + test_automation: テスト自動化(確信度 %{confidence}) diff --git a/config/machine_translations/pt-BR.yml b/config/machine_translations/pt-BR.yml index 37b3b509b..273da4689 100644 --- a/config/machine_translations/pt-BR.yml +++ b/config/machine_translations/pt-BR.yml @@ -1397,3 +1397,49 @@ pt-BR: comma_separated_list: " deve ser uma lista separada por vírgulas de nomes usando apenas caracteres ASCII" begin_with_cpe: ' deve começar com "cpe:"' last_entry: Última entrada de tradução + detectives: + github: + repo_public: Repositório no GitHub, que fornece repositórios git públicos com URLs. + repo_track: Repositório no GitHub, que usa git. O git pode rastrear as mudanças, quem as fez e quando foram feitas. + repo_distributed: Repositório no GitHub, que usa git. O git é distribuído. + contribution: Projetos no GitHub, por padrão, usam issues e pull requests, conforme incentivado pela documentação como . + discussion: O GitHub suporta discussões em issues e pull requests. + osps_gv_02_01: O GitHub suporta discussões públicas sobre mudanças propostas (via pull requests) e obstáculos de uso (via issues). + osps_do_02_01: O GitHub fornece mecanismos de relatório de defeitos por padrão (via issues). + osps_ac_01_01: O GitHub exige 2FA desde março de 2023. + osps_qa_01_01: O repositório está disponível publicamente no GitHub. + osps_qa_01_02: Os metadados git do repositório estão disponíveis publicamente no GitHub. + name: Nome do GitHub + description: Descrição do GitHub + license: Análise de licença da API do GitHub + implementation_languages: Análise de linguagem de implementação da API do GitHub + floss_license: + osi_approved: A licença %{license} é aprovada pela Open Source Initiative (OSI). + osi_approved_repository: A licença %{license} para o conteúdo do repositório é aprovada pela Open Source Initiative (OSI). + not_in_osi_list: Não foi encontrada a licença na lista da OSI. + hardened_sites: + all_headers_found: Encontrados todos os cabeçalhos de proteção de segurança necessários. + headers_missing: 'Faltam cabeçalhos de proteção de segurança necessários: ' + nosniff_not_set: X-Content-Type-Options não foi definido como "nosniff". + name_from_url: + domain_suggests: O nome de domínio da URL do projeto sugere isso. + tail_suggests: A parte final da URL do projeto sugere isso. + repo_tail_suggests: A parte final da URL do repositório sugere isso. + project_sites_https: + given_http: Fornecida uma URL http:. + official_http: As URLs do projeto listam http (não https) como oficial. + url_uses_http: Foi fornecida uma URL que usa http (não https). + given_https: Fornecidas apenas URLs https:. + repo_files: + no_file_found: Nenhum arquivo de %{description} encontrado. + file_found: 'Arquivo não trivial de %{description} no repositório: <%{url}>.' + contribution_documented: Processo de contribuição documentado no repositório. + license_found: Arquivo de licença encontrado no repositório. + license_not_found: Arquivo de licença não encontrado no repositório. + license_not_in_releases: Arquivo de licença não encontrado no repositório (provavelmente não incluído nas versões). + subdir_files: + no_files_found: Nenhum arquivo de %{description} encontrado. + no_folder_found: Nenhuma pasta apropriada encontrada para %{description}. + some_contents_found: Alguns conteúdos de arquivo de %{description} encontrados. + test_forced: + test_automation: Automação de testes (confiança %{confidence}) diff --git a/config/machine_translations/ru.yml b/config/machine_translations/ru.yml index 7b3cd9036..594907bd0 100644 --- a/config/machine_translations/ru.yml +++ b/config/machine_translations/ru.yml @@ -358,3 +358,49 @@ ru: account_activations: delay: many: В качестве меры защиты от спама вы должны подождать %{count} часов после активации, прежде чем сможете войти в систему. + detectives: + github: + repo_public: Репозиторий на GitHub, который предоставляет публичные git-репозитории с URL-адресами. + repo_track: Репозиторий на GitHub, который использует git. git может отслеживать изменения, кто их сделал и когда они были сделаны. + repo_distributed: Репозиторий на GitHub, который использует git. git является распределенным. + contribution: Проекты на GitHub по умолчанию используют issues и pull requests, как рекомендовано в документации такой как . + discussion: GitHub поддерживает обсуждения issues и pull requests. + osps_gv_02_01: GitHub поддерживает публичные обсуждения предлагаемых изменений (через pull requests) и препятствий в использовании (через issues). + osps_do_02_01: GitHub предоставляет механизмы сообщения об ошибках по умолчанию (через issues). + osps_ac_01_01: GitHub требует 2FA с марта 2023 года. + osps_qa_01_01: Репозиторий публично доступен на GitHub. + osps_qa_01_02: Метаданные git репозитория публично доступны на GitHub. + name: Название GitHub + description: Описание GitHub + license: Анализ лицензии API GitHub + implementation_languages: Анализ языков реализации API GitHub + floss_license: + osi_approved: Лицензия %{license} одобрена Open Source Initiative (OSI). + osi_approved_repository: Лицензия %{license} для содержимого репозитория одобрена Open Source Initiative (OSI). + not_in_osi_list: Лицензия не найдена в списке OSI. + hardened_sites: + all_headers_found: Найдены все необходимые заголовки безопасности для упрочнения. + headers_missing: 'Отсутствуют необходимые заголовки безопасности для упрочнения: ' + nosniff_not_set: X-Content-Type-Options не был установлен в "nosniff". + name_from_url: + domain_suggests: Доменное имя URL проекта подразумевает это. + tail_suggests: Конец URL проекта подразумевает это. + repo_tail_suggests: Конец URL репозитория подразумевает это. + project_sites_https: + given_http: 'Предоставлен http: URL.' + official_http: URL проекта указывает http (не https) как официальный. + url_uses_http: Нам был предоставлен URL, который использует http (не https). + given_https: 'Предоставлены только https: URL.' + repo_files: + no_file_found: Файл %{description} не найден. + file_found: 'Нетривиальный файл %{description} в репозитории: <%{url}>.' + contribution_documented: Процесс внесения вкладов задокументирован в репозитории. + license_found: Файл лицензии найден в репозитории. + license_not_found: Файл лицензии не найден в репозитории. + license_not_in_releases: Файл лицензии не найден в репозитории (вероятно, не включен в релизы). + subdir_files: + no_files_found: Файл(ы) %{description} не найдены. + no_folder_found: Подходящая папка для %{description} не найдена. + some_contents_found: Найдено некоторое содержимое файлов %{description}. + test_forced: + test_automation: Автоматизация тестирования (уверенность %{confidence}) diff --git a/config/machine_translations/src_en_de.yml b/config/machine_translations/src_en_de.yml index 02ffa5a73..3d2ff2c4d 100644 --- a/config/machine_translations/src_en_de.yml +++ b/config/machine_translations/src_en_de.yml @@ -352,3 +352,49 @@ en: many: 'As an anti-spam measure, you must wait %{count} hours after activation before you can log in. ' + detectives: + github: + repo_public: Repository on GitHub, which provides public git repositories with URLs. + repo_track: Repository on GitHub, which uses git. git can track the changes, who made them, and when they were made. + repo_distributed: Repository on GitHub, which uses git. git is distributed. + contribution: Projects on GitHub by default use issues and pull requests, as encouraged by documentation such as . + discussion: GitHub supports discussions on issues and pull requests. + osps_gv_02_01: GitHub supports public discussions on proposed changes (via pull requests) and usage obstacles (via issues). + osps_do_02_01: GitHub provides defect reporting mechanisms by default (via issues). + osps_ac_01_01: GitHub requires 2FA as of March 2023. + osps_qa_01_01: Repository is publicly available on GitHub. + osps_qa_01_02: Repository git metadata is publicly available on GitHub. + name: GitHub name + description: GitHub description + license: GitHub API license analysis + implementation_languages: GitHub API implementation language analysis + floss_license: + osi_approved: The %{license} license is approved by the Open Source Initiative (OSI). + osi_approved_repository: The %{license} license for the repository contents is approved by the Open Source Initiative (OSI). + not_in_osi_list: Did not find license in the OSI list. + hardened_sites: + all_headers_found: Found all required security hardening headers. + headers_missing: 'Required security hardening headers missing: ' + nosniff_not_set: X-Content-Type-Options was not set to "nosniff". + name_from_url: + domain_suggests: The project URL's domain name suggests this. + tail_suggests: The project URL's tail suggests this. + repo_tail_suggests: The repo URL's tail suggests this. + project_sites_https: + given_http: 'Given an http: URL.' + official_http: Project URLs lists http (not https) as official. + url_uses_http: We were given a URL that uses http (not https). + given_https: 'Given only https: URLs.' + repo_files: + no_file_found: No %{description} file found. + file_found: 'Non-trivial %{description} file in repository: <%{url}>.' + contribution_documented: Contribution process documented in repository. + license_found: License file found in repository. + license_not_found: License file not found in repository. + license_not_in_releases: License file not found in repository (likely not included in releases). + subdir_files: + no_files_found: No %{description} file(s) found. + no_folder_found: No appropriate folder found for %{description}. + some_contents_found: Some %{description} file contents found. + test_forced: + test_automation: Test automation (confidence %{confidence}) diff --git a/config/machine_translations/src_en_es.yml b/config/machine_translations/src_en_es.yml index 151395c76..b7d2b6af0 100644 --- a/config/machine_translations/src_en_es.yml +++ b/config/machine_translations/src_en_es.yml @@ -1378,3 +1378,49 @@ en: comma_separated_list: " must be a comma-separated list of names using only ASCII characters" begin_with_cpe: ' must begin with "cpe:"' last_entry: Last translation entry + detectives: + github: + repo_public: Repository on GitHub, which provides public git repositories with URLs. + repo_track: Repository on GitHub, which uses git. git can track the changes, who made them, and when they were made. + repo_distributed: Repository on GitHub, which uses git. git is distributed. + contribution: Projects on GitHub by default use issues and pull requests, as encouraged by documentation such as . + discussion: GitHub supports discussions on issues and pull requests. + osps_gv_02_01: GitHub supports public discussions on proposed changes (via pull requests) and usage obstacles (via issues). + osps_do_02_01: GitHub provides defect reporting mechanisms by default (via issues). + osps_ac_01_01: GitHub requires 2FA as of March 2023. + osps_qa_01_01: Repository is publicly available on GitHub. + osps_qa_01_02: Repository git metadata is publicly available on GitHub. + name: GitHub name + description: GitHub description + license: GitHub API license analysis + implementation_languages: GitHub API implementation language analysis + floss_license: + osi_approved: The %{license} license is approved by the Open Source Initiative (OSI). + osi_approved_repository: The %{license} license for the repository contents is approved by the Open Source Initiative (OSI). + not_in_osi_list: Did not find license in the OSI list. + hardened_sites: + all_headers_found: Found all required security hardening headers. + headers_missing: 'Required security hardening headers missing: ' + nosniff_not_set: X-Content-Type-Options was not set to "nosniff". + name_from_url: + domain_suggests: The project URL's domain name suggests this. + tail_suggests: The project URL's tail suggests this. + repo_tail_suggests: The repo URL's tail suggests this. + project_sites_https: + given_http: 'Given an http: URL.' + official_http: Project URLs lists http (not https) as official. + url_uses_http: We were given a URL that uses http (not https). + given_https: 'Given only https: URLs.' + repo_files: + no_file_found: No %{description} file found. + file_found: 'Non-trivial %{description} file in repository: <%{url}>.' + contribution_documented: Contribution process documented in repository. + license_found: License file found in repository. + license_not_found: License file not found in repository. + license_not_in_releases: License file not found in repository (likely not included in releases). + subdir_files: + no_files_found: No %{description} file(s) found. + no_folder_found: No appropriate folder found for %{description}. + some_contents_found: Some %{description} file contents found. + test_forced: + test_automation: Test automation (confidence %{confidence}) diff --git a/config/machine_translations/src_en_fr.yml b/config/machine_translations/src_en_fr.yml index aa44933c3..f5e908452 100644 --- a/config/machine_translations/src_en_fr.yml +++ b/config/machine_translations/src_en_fr.yml @@ -281,3 +281,49 @@ en: many: 'As an anti-spam measure, you must wait %{count} hours after activation before you can log in. ' + detectives: + github: + repo_public: Repository on GitHub, which provides public git repositories with URLs. + repo_track: Repository on GitHub, which uses git. git can track the changes, who made them, and when they were made. + repo_distributed: Repository on GitHub, which uses git. git is distributed. + contribution: Projects on GitHub by default use issues and pull requests, as encouraged by documentation such as . + discussion: GitHub supports discussions on issues and pull requests. + osps_gv_02_01: GitHub supports public discussions on proposed changes (via pull requests) and usage obstacles (via issues). + osps_do_02_01: GitHub provides defect reporting mechanisms by default (via issues). + osps_ac_01_01: GitHub requires 2FA as of March 2023. + osps_qa_01_01: Repository is publicly available on GitHub. + osps_qa_01_02: Repository git metadata is publicly available on GitHub. + name: GitHub name + description: GitHub description + license: GitHub API license analysis + implementation_languages: GitHub API implementation language analysis + floss_license: + osi_approved: The %{license} license is approved by the Open Source Initiative (OSI). + osi_approved_repository: The %{license} license for the repository contents is approved by the Open Source Initiative (OSI). + not_in_osi_list: Did not find license in the OSI list. + hardened_sites: + all_headers_found: Found all required security hardening headers. + headers_missing: 'Required security hardening headers missing: ' + nosniff_not_set: X-Content-Type-Options was not set to "nosniff". + name_from_url: + domain_suggests: The project URL's domain name suggests this. + tail_suggests: The project URL's tail suggests this. + repo_tail_suggests: The repo URL's tail suggests this. + project_sites_https: + given_http: 'Given an http: URL.' + official_http: Project URLs lists http (not https) as official. + url_uses_http: We were given a URL that uses http (not https). + given_https: 'Given only https: URLs.' + repo_files: + no_file_found: No %{description} file found. + file_found: 'Non-trivial %{description} file in repository: <%{url}>.' + contribution_documented: Contribution process documented in repository. + license_found: License file found in repository. + license_not_found: License file not found in repository. + license_not_in_releases: License file not found in repository (likely not included in releases). + subdir_files: + no_files_found: No %{description} file(s) found. + no_folder_found: No appropriate folder found for %{description}. + some_contents_found: Some %{description} file contents found. + test_forced: + test_automation: Test automation (confidence %{confidence}) diff --git a/config/machine_translations/src_en_ja.yml b/config/machine_translations/src_en_ja.yml index 734372a12..501156bcc 100644 --- a/config/machine_translations/src_en_ja.yml +++ b/config/machine_translations/src_en_ja.yml @@ -281,3 +281,49 @@ en: many: 'As an anti-spam measure, you must wait %{count} hours after activation before you can log in. ' + detectives: + github: + repo_public: Repository on GitHub, which provides public git repositories with URLs. + repo_track: Repository on GitHub, which uses git. git can track the changes, who made them, and when they were made. + repo_distributed: Repository on GitHub, which uses git. git is distributed. + contribution: Projects on GitHub by default use issues and pull requests, as encouraged by documentation such as . + discussion: GitHub supports discussions on issues and pull requests. + osps_gv_02_01: GitHub supports public discussions on proposed changes (via pull requests) and usage obstacles (via issues). + osps_do_02_01: GitHub provides defect reporting mechanisms by default (via issues). + osps_ac_01_01: GitHub requires 2FA as of March 2023. + osps_qa_01_01: Repository is publicly available on GitHub. + osps_qa_01_02: Repository git metadata is publicly available on GitHub. + name: GitHub name + description: GitHub description + license: GitHub API license analysis + implementation_languages: GitHub API implementation language analysis + floss_license: + osi_approved: The %{license} license is approved by the Open Source Initiative (OSI). + osi_approved_repository: The %{license} license for the repository contents is approved by the Open Source Initiative (OSI). + not_in_osi_list: Did not find license in the OSI list. + hardened_sites: + all_headers_found: Found all required security hardening headers. + headers_missing: 'Required security hardening headers missing: ' + nosniff_not_set: X-Content-Type-Options was not set to "nosniff". + name_from_url: + domain_suggests: The project URL's domain name suggests this. + tail_suggests: The project URL's tail suggests this. + repo_tail_suggests: The repo URL's tail suggests this. + project_sites_https: + given_http: 'Given an http: URL.' + official_http: Project URLs lists http (not https) as official. + url_uses_http: We were given a URL that uses http (not https). + given_https: 'Given only https: URLs.' + repo_files: + no_file_found: No %{description} file found. + file_found: 'Non-trivial %{description} file in repository: <%{url}>.' + contribution_documented: Contribution process documented in repository. + license_found: License file found in repository. + license_not_found: License file not found in repository. + license_not_in_releases: License file not found in repository (likely not included in releases). + subdir_files: + no_files_found: No %{description} file(s) found. + no_folder_found: No appropriate folder found for %{description}. + some_contents_found: Some %{description} file contents found. + test_forced: + test_automation: Test automation (confidence %{confidence}) diff --git a/config/machine_translations/src_en_pt-BR.yml b/config/machine_translations/src_en_pt-BR.yml index 8091a04d7..00029fe07 100644 --- a/config/machine_translations/src_en_pt-BR.yml +++ b/config/machine_translations/src_en_pt-BR.yml @@ -1423,3 +1423,49 @@ en: comma_separated_list: " must be a comma-separated list of names using only ASCII characters" begin_with_cpe: ' must begin with "cpe:"' last_entry: Last translation entry + detectives: + github: + repo_public: Repository on GitHub, which provides public git repositories with URLs. + repo_track: Repository on GitHub, which uses git. git can track the changes, who made them, and when they were made. + repo_distributed: Repository on GitHub, which uses git. git is distributed. + contribution: Projects on GitHub by default use issues and pull requests, as encouraged by documentation such as . + discussion: GitHub supports discussions on issues and pull requests. + osps_gv_02_01: GitHub supports public discussions on proposed changes (via pull requests) and usage obstacles (via issues). + osps_do_02_01: GitHub provides defect reporting mechanisms by default (via issues). + osps_ac_01_01: GitHub requires 2FA as of March 2023. + osps_qa_01_01: Repository is publicly available on GitHub. + osps_qa_01_02: Repository git metadata is publicly available on GitHub. + name: GitHub name + description: GitHub description + license: GitHub API license analysis + implementation_languages: GitHub API implementation language analysis + floss_license: + osi_approved: The %{license} license is approved by the Open Source Initiative (OSI). + osi_approved_repository: The %{license} license for the repository contents is approved by the Open Source Initiative (OSI). + not_in_osi_list: Did not find license in the OSI list. + hardened_sites: + all_headers_found: Found all required security hardening headers. + headers_missing: 'Required security hardening headers missing: ' + nosniff_not_set: X-Content-Type-Options was not set to "nosniff". + name_from_url: + domain_suggests: The project URL's domain name suggests this. + tail_suggests: The project URL's tail suggests this. + repo_tail_suggests: The repo URL's tail suggests this. + project_sites_https: + given_http: 'Given an http: URL.' + official_http: Project URLs lists http (not https) as official. + url_uses_http: We were given a URL that uses http (not https). + given_https: 'Given only https: URLs.' + repo_files: + no_file_found: No %{description} file found. + file_found: 'Non-trivial %{description} file in repository: <%{url}>.' + contribution_documented: Contribution process documented in repository. + license_found: License file found in repository. + license_not_found: License file not found in repository. + license_not_in_releases: License file not found in repository (likely not included in releases). + subdir_files: + no_files_found: No %{description} file(s) found. + no_folder_found: No appropriate folder found for %{description}. + some_contents_found: Some %{description} file contents found. + test_forced: + test_automation: Test automation (confidence %{confidence}) diff --git a/config/machine_translations/src_en_ru.yml b/config/machine_translations/src_en_ru.yml index fcf94aadd..98e2439a0 100644 --- a/config/machine_translations/src_en_ru.yml +++ b/config/machine_translations/src_en_ru.yml @@ -364,3 +364,49 @@ en: many: 'As an anti-spam measure, you must wait %{count} hours after activation before you can log in. ' + detectives: + github: + repo_public: Repository on GitHub, which provides public git repositories with URLs. + repo_track: Repository on GitHub, which uses git. git can track the changes, who made them, and when they were made. + repo_distributed: Repository on GitHub, which uses git. git is distributed. + contribution: Projects on GitHub by default use issues and pull requests, as encouraged by documentation such as . + discussion: GitHub supports discussions on issues and pull requests. + osps_gv_02_01: GitHub supports public discussions on proposed changes (via pull requests) and usage obstacles (via issues). + osps_do_02_01: GitHub provides defect reporting mechanisms by default (via issues). + osps_ac_01_01: GitHub requires 2FA as of March 2023. + osps_qa_01_01: Repository is publicly available on GitHub. + osps_qa_01_02: Repository git metadata is publicly available on GitHub. + name: GitHub name + description: GitHub description + license: GitHub API license analysis + implementation_languages: GitHub API implementation language analysis + floss_license: + osi_approved: The %{license} license is approved by the Open Source Initiative (OSI). + osi_approved_repository: The %{license} license for the repository contents is approved by the Open Source Initiative (OSI). + not_in_osi_list: Did not find license in the OSI list. + hardened_sites: + all_headers_found: Found all required security hardening headers. + headers_missing: 'Required security hardening headers missing: ' + nosniff_not_set: X-Content-Type-Options was not set to "nosniff". + name_from_url: + domain_suggests: The project URL's domain name suggests this. + tail_suggests: The project URL's tail suggests this. + repo_tail_suggests: The repo URL's tail suggests this. + project_sites_https: + given_http: 'Given an http: URL.' + official_http: Project URLs lists http (not https) as official. + url_uses_http: We were given a URL that uses http (not https). + given_https: 'Given only https: URLs.' + repo_files: + no_file_found: No %{description} file found. + file_found: 'Non-trivial %{description} file in repository: <%{url}>.' + contribution_documented: Contribution process documented in repository. + license_found: License file found in repository. + license_not_found: License file not found in repository. + license_not_in_releases: License file not found in repository (likely not included in releases). + subdir_files: + no_files_found: No %{description} file(s) found. + no_folder_found: No appropriate folder found for %{description}. + some_contents_found: Some %{description} file contents found. + test_forced: + test_automation: Test automation (confidence %{confidence}) diff --git a/config/machine_translations/src_en_sw.yml b/config/machine_translations/src_en_sw.yml index 2374a1fcb..595a1ab6c 100644 --- a/config/machine_translations/src_en_sw.yml +++ b/config/machine_translations/src_en_sw.yml @@ -1200,3 +1200,49 @@ en: many: 'As an anti-spam measure, you must wait %{count} hours after activation before you can log in. ' + detectives: + github: + repo_public: Repository on GitHub, which provides public git repositories with URLs. + repo_track: Repository on GitHub, which uses git. git can track the changes, who made them, and when they were made. + repo_distributed: Repository on GitHub, which uses git. git is distributed. + contribution: Projects on GitHub by default use issues and pull requests, as encouraged by documentation such as . + discussion: GitHub supports discussions on issues and pull requests. + osps_gv_02_01: GitHub supports public discussions on proposed changes (via pull requests) and usage obstacles (via issues). + osps_do_02_01: GitHub provides defect reporting mechanisms by default (via issues). + osps_ac_01_01: GitHub requires 2FA as of March 2023. + osps_qa_01_01: Repository is publicly available on GitHub. + osps_qa_01_02: Repository git metadata is publicly available on GitHub. + name: GitHub name + description: GitHub description + license: GitHub API license analysis + implementation_languages: GitHub API implementation language analysis + floss_license: + osi_approved: The %{license} license is approved by the Open Source Initiative (OSI). + osi_approved_repository: The %{license} license for the repository contents is approved by the Open Source Initiative (OSI). + not_in_osi_list: Did not find license in the OSI list. + hardened_sites: + all_headers_found: Found all required security hardening headers. + headers_missing: 'Required security hardening headers missing: ' + nosniff_not_set: X-Content-Type-Options was not set to "nosniff". + name_from_url: + domain_suggests: The project URL's domain name suggests this. + tail_suggests: The project URL's tail suggests this. + repo_tail_suggests: The repo URL's tail suggests this. + project_sites_https: + given_http: 'Given an http: URL.' + official_http: Project URLs lists http (not https) as official. + url_uses_http: We were given a URL that uses http (not https). + given_https: 'Given only https: URLs.' + repo_files: + no_file_found: No %{description} file found. + file_found: 'Non-trivial %{description} file in repository: <%{url}>.' + contribution_documented: Contribution process documented in repository. + license_found: License file found in repository. + license_not_found: License file not found in repository. + license_not_in_releases: License file not found in repository (likely not included in releases). + subdir_files: + no_files_found: No %{description} file(s) found. + no_folder_found: No appropriate folder found for %{description}. + some_contents_found: Some %{description} file contents found. + test_forced: + test_automation: Test automation (confidence %{confidence}) diff --git a/config/machine_translations/src_en_zh-CN.yml b/config/machine_translations/src_en_zh-CN.yml index d2cbc2d59..ad17849a2 100644 --- a/config/machine_translations/src_en_zh-CN.yml +++ b/config/machine_translations/src_en_zh-CN.yml @@ -329,3 +329,49 @@ en: many: 'As an anti-spam measure, you must wait %{count} hours after activation before you can log in. ' + detectives: + github: + repo_public: Repository on GitHub, which provides public git repositories with URLs. + repo_track: Repository on GitHub, which uses git. git can track the changes, who made them, and when they were made. + repo_distributed: Repository on GitHub, which uses git. git is distributed. + contribution: Projects on GitHub by default use issues and pull requests, as encouraged by documentation such as . + discussion: GitHub supports discussions on issues and pull requests. + osps_gv_02_01: GitHub supports public discussions on proposed changes (via pull requests) and usage obstacles (via issues). + osps_do_02_01: GitHub provides defect reporting mechanisms by default (via issues). + osps_ac_01_01: GitHub requires 2FA as of March 2023. + osps_qa_01_01: Repository is publicly available on GitHub. + osps_qa_01_02: Repository git metadata is publicly available on GitHub. + name: GitHub name + description: GitHub description + license: GitHub API license analysis + implementation_languages: GitHub API implementation language analysis + floss_license: + osi_approved: The %{license} license is approved by the Open Source Initiative (OSI). + osi_approved_repository: The %{license} license for the repository contents is approved by the Open Source Initiative (OSI). + not_in_osi_list: Did not find license in the OSI list. + hardened_sites: + all_headers_found: Found all required security hardening headers. + headers_missing: 'Required security hardening headers missing: ' + nosniff_not_set: X-Content-Type-Options was not set to "nosniff". + name_from_url: + domain_suggests: The project URL's domain name suggests this. + tail_suggests: The project URL's tail suggests this. + repo_tail_suggests: The repo URL's tail suggests this. + project_sites_https: + given_http: 'Given an http: URL.' + official_http: Project URLs lists http (not https) as official. + url_uses_http: We were given a URL that uses http (not https). + given_https: 'Given only https: URLs.' + repo_files: + no_file_found: No %{description} file found. + file_found: 'Non-trivial %{description} file in repository: <%{url}>.' + contribution_documented: Contribution process documented in repository. + license_found: License file found in repository. + license_not_found: License file not found in repository. + license_not_in_releases: License file not found in repository (likely not included in releases). + subdir_files: + no_files_found: No %{description} file(s) found. + no_folder_found: No appropriate folder found for %{description}. + some_contents_found: Some %{description} file contents found. + test_forced: + test_automation: Test automation (confidence %{confidence}) diff --git a/config/machine_translations/sw.yml b/config/machine_translations/sw.yml index ca271f71d..2ea547b94 100644 --- a/config/machine_translations/sw.yml +++ b/config/machine_translations/sw.yml @@ -1194,3 +1194,49 @@ sw: account_activations: delay: many: Kama hatua ya kupambana na taka, lazima usubiri masaa %{count} baada ya uanzishaji kabla hujaingia. + detectives: + github: + repo_public: Hifadhi kwenye GitHub, ambayo inatoa hifadhi za git za umma zenye URL. + repo_track: Hifadhi kwenye GitHub, ambayo hutumia git. git inaweza kufuatilia mabadiliko, ni nani aliyoyafanya, na wakati walipofanyika. + repo_distributed: Hifadhi kwenye GitHub, ambayo hutumia git. git imegawanywa. + contribution: Miradi kwenye GitHub kwa chaguo-msingi hutumia masuala na maombi ya kuvuta, kama inavyohimizwa na nyaraka kama vile . + discussion: GitHub inasaidia majadiliano kuhusu masuala na maombi ya kuvuta. + osps_gv_02_01: GitHub inasaidia majadiliano ya umma kuhusu mabadiliko yaliyopendekezwa (kupitia maombi ya kuvuta) na vikwazo vya matumizi (kupitia masuala). + osps_do_02_01: GitHub hutoa taratibu za kuripoti hitilafu kwa chaguo-msingi (kupitia masuala). + osps_ac_01_01: GitHub inahitaji 2FA tangu Machi 2023. + osps_qa_01_01: Hifadhi inapatikana kwa umma kwenye GitHub. + osps_qa_01_02: Metadata ya git ya hifadhi inapatikana kwa umma kwenye GitHub. + name: Jina la GitHub + description: Maelezo ya GitHub + license: Uchambuzi wa leseni wa API ya GitHub + implementation_languages: Uchambuzi wa lugha ya utekelezaji wa API ya GitHub + floss_license: + osi_approved: Leseni ya %{license} imeidhinishwa na Open Source Initiative (OSI). + osi_approved_repository: Leseni ya %{license} kwa maudhui ya hifadhi imeidhinishwa na Open Source Initiative (OSI). + not_in_osi_list: Haikupata leseni katika orodha ya OSI. + hardened_sites: + all_headers_found: Kupata vichwa vyote vinavyohitajika vya kuimarisha usalama. + headers_missing: 'Vichwa vinavyohitajika vya kuimarisha usalama havijumuishwa: ' + nosniff_not_set: X-Content-Type-Options haikuwekwa kuwa "nosniff". + name_from_url: + domain_suggests: Jina la kikoa cha URL ya mradi linapendekeza hili. + tail_suggests: Mwisho wa URL ya mradi unapendekeza hili. + repo_tail_suggests: Mwisho wa URL ya hazina unapendekeza hili. + project_sites_https: + given_http: Tulipewa URL ya http:. + official_http: Orodha ya URL za mradi zinaonyesha http (sio https) kama rasmi. + url_uses_http: Tulipewa URL inayotumia http (sio https). + given_https: Tulipewa tu URL za https:. + repo_files: + no_file_found: Hakuna faili ya %{description} iliyopatikana. + file_found: 'Faili isiyo ya kawaida ya %{description} katika hazina: <%{url}>.' + contribution_documented: Mchakato wa mchango umeandikwa katika hazina. + license_found: Faili ya leseni imepatikana katika hazina. + license_not_found: Faili ya leseni haikupatikana katika hazina. + license_not_in_releases: Faili ya leseni haikupatikana katika hazina (pengine haikujumuishwa katika matoleo). + subdir_files: + no_files_found: Hakuna faili za %{description} zilizopatikana. + no_folder_found: Hakuna folda inayofaa iliyopatikana kwa %{description}. + some_contents_found: Baadhi ya yaliyomo ya faili ya %{description} yamepatikana. + test_forced: + test_automation: Utomatiaji wa majaribio (kujiamini %{confidence}) diff --git a/config/machine_translations/zh-CN.yml b/config/machine_translations/zh-CN.yml index 20f62d722..17946b73c 100644 --- a/config/machine_translations/zh-CN.yml +++ b/config/machine_translations/zh-CN.yml @@ -327,3 +327,49 @@ zh-CN: account_activations: delay: many: 作为反垃圾邮件措施,您必须在激活后等待 %{count} 小时才能登录。 + detectives: + github: + repo_public: GitHub上的仓库,提供带有URL的公共git仓库。 + repo_track: GitHub上的仓库,使用git。git可以跟踪更改、更改者以及更改时间。 + repo_distributed: GitHub上的仓库,使用git。git是分布式的。 + contribution: GitHub上的项目默认使用问题列表(Issues)和拉取请求(Pull Requests),如等文档所鼓励的。 + discussion: GitHub支持对问题列表(Issues)和拉取请求(Pull Requests)的讨论。 + osps_gv_02_01: GitHub支持对提议更改(通过拉取请求)和使用障碍(通过问题列表)的公开讨论。 + osps_do_02_01: GitHub默认提供缺陷报告机制(通过问题列表)。 + osps_ac_01_01: 自2023年3月起,GitHub要求启用双因素认证(2FA)。 + osps_qa_01_01: 仓库在GitHub上公开可用。 + osps_qa_01_02: 仓库的git元数据在GitHub上公开可用。 + name: GitHub名称 + description: GitHub描述 + license: GitHub API许可证分析 + implementation_languages: GitHub API实现语言分析 + floss_license: + osi_approved: "%{license}许可证已获得开放源代码促进会(OSI)批准。" + osi_approved_repository: 仓库内容的%{license}许可证已获得开放源代码促进会(OSI)批准。 + not_in_osi_list: 未在OSI列表中找到许可证。 + hardened_sites: + all_headers_found: 找到所有必需的安全强化标头。 + headers_missing: 缺少必需的安全强化标头: + nosniff_not_set: X-Content-Type-Options未设置为"nosniff"。 + name_from_url: + domain_suggests: 项目 URL 的域名暗示了这一点。 + tail_suggests: 项目 URL 的尾部暗示了这一点。 + repo_tail_suggests: 仓库 URL 的尾部暗示了这一点。 + project_sites_https: + given_http: '给定的 http: URL。' + official_http: 项目 URL 列表中官方使用 http(而非 https)。 + url_uses_http: 我们收到的 URL 使用 http(而非 https)。 + given_https: '仅给定 https: URL。' + repo_files: + no_file_found: 未找到 %{description} 文件。 + file_found: 仓库中存在非平凡的 %{description} 文件:<%{url}>。 + contribution_documented: 仓库中记录了贡献流程。 + license_found: 在仓库中找到许可证文件。 + license_not_found: 在仓库中未找到许可证文件。 + license_not_in_releases: 在仓库中未找到许可证文件(可能未包含在发布版本中)。 + subdir_files: + no_files_found: 未找到 %{description} 文件。 + no_folder_found: 未找到适合 %{description} 的文件夹。 + some_contents_found: 找到一些 %{description} 文件内容。 + test_forced: + test_automation: 测试自动化(置信度 %{confidence}) diff --git a/test/unit/lib/subdir_file_contents_detective_test.rb b/test/unit/lib/subdir_file_contents_detective_test.rb index 0a5cea1be..d64850bd3 100644 --- a/test/unit/lib/subdir_file_contents_detective_test.rb +++ b/test/unit/lib/subdir_file_contents_detective_test.rb @@ -53,7 +53,7 @@ def setup dbs = results[:documentation_basics_status] assert dbs.key?(:explanation) assert_equal( - '// No documentation basics file(s) found.', + 'No documentation basics file(s) found.', dbs[:explanation] ) assert dbs.key?(:value)