Skip to content

Brazilian Portuguese/pt-BR Translation#1587

Draft
Lucas559-noob wants to merge 3 commits into
scriptscat:mainfrom
Lucas559-noob:main
Draft

Brazilian Portuguese/pt-BR Translation#1587
Lucas559-noob wants to merge 3 commits into
scriptscat:mainfrom
Lucas559-noob:main

Conversation

@Lucas559-noob

Copy link
Copy Markdown

Checklist / 检查清单

  • Fixes mentioned issues / 修复已提及的问题
  • Code reviewed by human / 代码通过人工检查
  • Changes tested / 已完成测试

Description / 描述

Screenshots / 截图

@cyfung1031 cyfung1031 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Brazilian Portuguese (pt-BR) Translation Review

Verdict

Request changes before merge.

The translation is a useful and generally understandable first pass. The namespace files are structurally complete, the JSON is organized correctly, and most placeholders and technical identifiers are preserved. However, the PR is not ready to merge because:

  1. pt-BR is not imported or registered in src/locales/locales.ts, so the locale cannot be selected or loaded.
  2. Six links in guide.json were changed to unverified /pt-BR/ routes, contrary to the repository rule that URLs must be preserved.
  3. Several strings materially change the meaning of the English and Simplified Chinese sources.
  4. Product terminology is not consistent, especially for Subscribe/Subscription, Skill, Source, browser tabs, file monitoring, and technical API terms.
  5. The locale terminology document and documentation index entries are missing.

What is right

Structural and technical strengths

  • All 11 runtime namespaces are present and exported by src/locales/pt-BR/index.ts.
  • The Portuguese files follow the same object structure as the English and Simplified Chinese files.
  • i18next placeholders are generally preserved correctly, including:
    • {{count}}, {{selected}}, {{total}}
    • {{attempt}}, {{max}}
    • {{scriptName}}, {{subscribeName}}
    • ${dir}
  • HTML/React markup is retained in onboarding and popup strings.
  • Metadata and developer identifiers are mostly preserved:
    • @match, @exclude, @grant, @connect
    • @resource, @require
    • ESLint, VSCode, OPFS, MCP, TTFT
    • SKILL.md, SkillScript
  • The major script-type distinctions are mostly retained:
    • script de usuário
    • script de página
    • script em segundo plano
    • script agendado
  • Many full-sentence translations are natural and faithful, for example:
    • permission.cookie_warning_desc
    • editor.confirm_override_when_edit_conflict
    • install.perm_match_summary
    • agent.dom_permission_describe
    • settings.sync_delete_desc (apart from one grammatical coordination issue)
  • Product capitalization is usually correct as ScriptCat.
  • The popup strings correctly preserve the English documentation URLs; this is the correct behavior unless localized destinations are verified.

Good choices that should be retained

Concept Current pt-BR choice Assessment
Background Script Script em segundo plano Natural and clearly distinct from other script types.
Scheduled Script Script agendado Natural pt-BR product wording.
User Script Script de usuário Appropriate generic term.
Storage Armazenamento Natural for data storage and storage space.
Permissions Permissão / Autorização Mostly distinguishes capability from granting access.
ScriptCat ScriptCat Correct product spelling in most strings.
Cron expression Expressão cron Technically understandable and concise.
Metadata identifiers Preserved Correct and required.
Backup Backup Common and natural in Brazilian software.
Cloud Nuvem / na nuvem Natural when grammar and prepositions are adjusted by context.

Release-blocking issues

1. The locale is not registered

The PR adds src/locales/pt-BR/index.ts, but does not modify src/locales/locales.ts.

Required integration:

import * as ptBR from "./pt-BR";

and inside resources:

"pt-BR": { title: "Português (Brasil)", ...ptBR },

Without this change, the new files are not part of the i18next resource bundle and the language will not appear as an available runtime locale.

2. The required terminology and documentation entries are missing

The repository translation guide says a new language should have a per-locale terminology file and be registered in the terminology table.

Add:

  • docs/references/terminology-pt-BR.md
  • A row to docs/translation.md:
| `pt-BR` | Português (Brasil) | [terminology-pt-BR.md](./references/terminology-pt-BR.md) |
  • Update docs/README.md from 8 locale guidelines to 9 and include pt-BR.

A proposed terminology file accompanies this report.

3. guide.json changes protected URLs

The repository rules explicitly require URLs to be preserved. The Portuguese file changes six destinations to guessed /pt-BR/ routes:

  • installed_scripts
  • script_list_content (two links)
  • script_list_action_content
  • tools_backup_content
  • subscribe_content

No Portuguese routes should be introduced unless they are confirmed to exist and contain the intended content. Keep the English source destinations for now:

  • https://docs.scriptcat.org/en/...
  • https://scriptcat.org/en/search

This is especially important because src/locales/locales.ts currently routes every non-Chinese documentation path to /en.

Major meaning and functionality issues

Severity Namespace / key English meaning Simplified Chinese clarification Current pt-BR Recommended pt-BR Why
Blocker settings.blacklist_placeholder Prevent ScriptCat from running scripts on matching pages Explicitly says “禁止…运行脚本” Desative o ScriptCat para executar scripts... Impeça o ScriptCat de executar scripts em páginas como\nhttps://*.example.com Current text can be read as “disable ScriptCat in order to execute scripts,” reversing the intended behavior.
Blocker settings.migration_confirm_message Retrying migration will modify existing data Explicit cause/effect warning Tentar novamente ... para modificar dados existentes Tentar novamente a migração do mecanismo de armazenamento modificará os dados existentes. Confirme. Consulte: https://docs.scriptcat.org/docs/change/v0.17/ Current text turns a warning into an instruction whose purpose is to modify data.
Major editor.run_at / editor.run_in Execution timing vs execution environment 运行时机 vs 运行环境 Both are Executar Em Momento da execução / Ambiente de execução Two distinct fields become indistinguishable.
Major common.type_string Technical String data type Keeps string Texto String “Texto” is not equivalent to the JSON/programming data type.
Major editor.storage_api Storage API Terminology guide preserves the API term API de Armazenamento Storage API The repository terminology treats this as a technical API name.
Major editor.eslint_rules_reset Reset-completed state ESLint规则已重置 Redefinir Regras do ESLint Regras do ESLint redefinidas A result/status was changed into a command.
Major editor.editor_config_reset Reset-completed state 编辑器配置已重置 Redefinir Configuração do Editor Configuração do editor redefinida Same state/action error.
Major editor.editor_type_definition_reset Reset-completed state 编辑器类型定义已重置 Redefinir Definição de Tipo do Editor Definição de tipos do editor redefinida Same state/action error.
Major editor.only_background_scheduled_can_run Background or scheduled scripts Chinese corrects the bad English crontab scripts to 定时脚本 scripts de segundo plano/crontab Apenas scripts em segundo plano ou scripts agendados podem ser executados crontab is not the product script type.
Major Subscription action/object across files Subscribe is an action; Subscription is an object Chinese uses one form because Chinese does not require the same noun/verb distinction All forms use Inscrição Action: Assinar; object: Assinatura The current translation loses the noun/verb distinction and sounds like event registration.
Major Skill entity across agent, install, script Product entity Skill, tied to SKILL.md Chinese deliberately preserves Skill in entity labels Habilidade Use Skill for installed/imported product entities; use habilidade only generically Translating every product label makes SKILL.md, SkillScript, and the installed object look unrelated.
Major install.restore_settings_clear_all Deselect all Chinese: 全不选 Limpar tudo Desmarcar tudo “Clear all” sounds destructive in a restore/import screen.
Major install.unimportable_count Count of items that cannot be imported Chinese includes “items” {{count}} não podem ser importados {{count}} itens não podem ser importados The Portuguese sentence has no subject noun.
Major install.resource_import_failed Resources could not be imported Chinese uses a passive failure construction Os seguintes recursos falharam ao importar: Não foi possível importar os seguintes recursos: Current text says the resources themselves failed while importing.
Major install.warning_risk_antifeature Declares anti-features / @antifeature metadata Technical feature warning ele declara anti-recursos ele declara metadados @antifeature anti-recursos is not established userscript terminology.
Major script.homepage Script homepage Chinese explicitly says 脚本主页 Página Inicial Página do script “Página Inicial” normally means the application's home page.
Major settings.enable_background.description Generic browser background behavior Chinese deliberately says browser, not Chrome Ends with sair manualmente do Chrome ...até que você encerre manualmente o navegador. The English terminology guide already identifies browser-specific Chrome as a review defect.
Major permission.script_accessing_cross_origin_resource Cross-origin resource Chinese: cross-domain resource recurso de origem cruzada recurso entre origens “Entre origens” is the standard Brazilian web wording.
Major permission.permission_cors Cross-domain / CORS Keeps cors as identifier Domínio cruzado (cors) Entre origens (CORS) Use standard terminology and capitalization.
Major logs.live Real-time/live logs Chinese: 实时 Ao Vivo Em tempo real “Ao vivo” suggests broadcasting, not continuously updating logs.
Major logs.total_logs Total queried logs Chinese uses a direct count Um total de {{length}} logs foram consultados Foram encontrados {{length}} logs no total Current subject–verb agreement is incorrect.
Major popup.ext_update_notification ScriptCat extension updated Chinese preserves product name Extensão Scriptcat atualizada Extensão ScriptCat atualizada Product capitalization is wrong.
Major popup.develop_mode_guide, popup.allow_user_script_guide Desktop click instruction Chinese corrects source tap to 点击 toque para... clique para saber como ativar This is a desktop browser-extension control, not a touch-only UI.
Major install.updatepage.tap_to_expand Expand desktop row/control Chinese: 点击展开 Toque para expandir Clique para expandir Same desktop interaction problem.
Major agent.tasks_subtitle Run automatically on a cron schedule Chinese: run according to a Cron cycle em um cronograma cron Execute tarefas do agente automaticamente de acordo com uma expressão cron Current phrase is redundant and unnatural.
Major agent.tasks_never_run Task has never run Chinese: not run Nunca executado Ainda não executada The implied noun is feminine tarefa; current agreement is wrong.
Major script.import_done Import success/failure totals Chinese explicitly labels success and failure {{success}} com sucesso · {{fail}} falharam Importação concluída: {{success}} com êxito · {{fail}} com falha Current first count has no noun/status relation and the two halves are not parallel.

Important terminology and naturalness issues

Namespace / key or pattern Current pt-BR Recommended direction Notes
source / col_source Fonte Origem Fonte is better reserved for a font, source code, or a specifically named data source. For provenance/install origin, use Origem.
common.more_menu Mais menus Mais opções The source describes a single “more” menu, not multiple menus.
common.exclude_off Excluir a execução de $0 Impedir a execução em $0 “Excluir” sounds like deleting a run.
editor.bulk_values Valores em massa Valores em lote “Em lote” is standard software wording and matches Edição em lote.
editor.confirm_delete_exclude exclusão desta exclusão Excluir esta regra de exclusão? Avoid awkward repetition.
File watching Observar arquivo, Observando Monitorar arquivo, Monitorando, Parar monitoramento Better describes continuous filesystem monitoring.
guide.title Guia de integração Guia de primeiros passos Chinese clarifies that this is beginner onboarding, not system integration.
guide.tour_finish Concluído Concluir This appears to be an action/button.
logs.last_1_hour Última 1 Hora Última hora Current phrase is ungrammatical/redundant.
Log intervals 1m, 5m 1 min, 5 min m is ambiguous in Portuguese.
logs.time Hora Horário or Data e hora after UI check English/Chinese use the broader concept “time.”
Authorization duration Temporário Temporária Must agree with feminine Duração.
auto_close_in {{second}}s {{second}} s or a localized seconds label Add spacing; pluralization may require a future i18n plural rule.
popup.page_in_blacklist lista negra lista de bloqueio More precise and avoids an unnecessary literal calque.
Right-click menu menu de clique com o botão direito menu de contexto Standard, shorter Brazilian software wording.
badge_type_none Nenhum Não exibir Chinese clarifies this is display behavior, not a missing noun.
expand_count Contagem para Expandir Limite de itens visíveis Current phrase is literal and unclear.
script.background_script_tooltip Executa ... uma vez ativado É executado em segundo plano quando ativado Avoids reading “uma vez” as “one time.”
script.error_script_type_mismatch não podem ser convertidos não é possível converter entre scripts normais e scripts em segundo plano Current sentence omits the conversion relationship.
settings.blacklist_pages Página na Lista Negra Páginas bloqueadas The setting represents a collection, not one page.
settings.script_run_env.all Todos Todas as abas Chinese and the English terminology review identify these as browser tabs.
settings.blacklist_pages_desc comma splice Impedir que scripts sejam executados nas páginas especificadas, com suporte a curingas Fix grammar and make the capability explicit.
install.skill_secret Segredo Secreto This is a state/adjective parallel to Obrigatório.
install.skill_warning_desc ele injeta... a Skill injeta... or omit pronoun If habilidade is retained, agreement would need feminine ela.
install.referral_link_title Link de Referência Link de indicação or Link de afiliado after product check Current wording can mean a citation/reference link.
install.membership_title Recursos de Membro Recursos para membros Natural Brazilian phrasing.
tools.pulling_data_from_cloud Puxando Dados da Nuvem Obtendo dados da nuvem Avoid an English developer-jargon calque in user-facing UI.
agent.model_supports_vision Entrada de Visão Entrada de imagem or Entrada visual Current phrase is unnatural.
agent.skills_refresh Atualizar Recarregar Distinguish refresh from version update.
agent.skills_updates_available atualização(ões) disponível(is) Atualizações disponíveis Avoid parenthetical pseudo-plural forms in UI.
agent.chat_new / chat_delete Chat Prefer conversa consistently The same namespace otherwise uses conversa.
agent.chat_background_* Modo de fundo Execução em segundo plano More natural and consistent with script terminology.
agent.search_engine_desc fonte de recuperação fonte de busca usada pela ferramenta web_search “Recuperação” is an unnecessary retrieval-system calque.
agent.summary_model_desc volta para o padrão usa o modelo padrão se não estiver definido More precise and natural.

Systemic style issue: excessive title case

Many Portuguese labels capitalize almost every noun and adjective:

  • Nova Versão Disponível
  • Configurações de Execução
  • Falha na Verificação de Atualização
  • Regras do ESLint Salvas
  • Página Inválida

Brazilian Portuguese software interfaces normally use sentence case:

  • Nova versão disponível
  • Configurações de execução
  • Falha na verificação de atualização
  • Regras do ESLint salvas
  • Página inválida

This is not only cosmetic: sentence case makes labels easier to scan and avoids inconsistent capitalization between labels and notifications. The terminology file supplied with this review makes sentence case the default.

Source disagreements that need product confirmation

These are not simple Portuguese mistakes. English and Simplified Chinese disagree, so the maintainer should confirm intended behavior.

Key English Simplified Chinese Portuguese choice Recommendation
guide.setting_sync_content Mentions syncing deletions and updating the script version here Mentions deletion propagation to other devices; does not mention updating the version Follows English Confirm product behavior and then align all three locales.
script.latest_version Latest Version “Already the latest version” Última Versão Confirm whether this is a label or a status. If status, use Já está na versão mais recente.
install.background_script_description Runs automatically when the browser starts Explicitly says it runs once when the browser opens Follows English and omits “once” Confirm whether it runs once at startup or continuously.
script.apply_to_run_status Ambiguous combined label Also retains a combined concept Literal combined label Inspect the actual column/control before rewriting. It may need two labels.
agent.chat_tools_count Count of tools Count of tool calls Count of tools Confirm whether the number represents available tools or invocations.

Suggested patch checklist

  1. Register pt-BR in src/locales/locales.ts.
  2. Add docs/references/terminology-pt-BR.md.
  3. Add pt-BR to docs/translation.md.
  4. Update the terminology count/list in docs/README.md.
  5. Restore all six modified URLs in guide.json unless the localized destinations are verified.
  6. Fix all release-blocking and major rows in this report.
  7. Apply the terminology file consistently:
    • Assinar vs Assinatura
    • preserve product Skill
    • Origem, not generic Fonte
    • menu de contexto
    • aba for browser tab
    • entre origens (CORS)
    • Monitorar arquivo
    • sentence case
  8. Recheck placeholders and identifiers after editing.
  9. Build the extension and verify:
    • language selector shows Português (Brasil)
    • every namespace loads
    • long strings fit dialogs, tables, badges, and mobile layouts
    • split strings such as menu_expand_num_before / menu_expand_num_after form a grammatical sentence
  10. Ask a Brazilian Portuguese speaker to do a final in-product fluency pass after the semantic fixes.

Recommended review decision

Request changes, with the locale registration, URL restoration, and major semantic corrections required before approval. The contribution has a solid base and is worth continuing; it needs terminology normalization and a focused second pass rather than a full rewrite.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I chose to use "Criar Script de Segundo Plano" to translate Create Background Script due to the following semantic nuances in Portuguese:

  • "Script de Segundo Plano" (Recommended): The preposition "de" establishes a relationship of categorization/type. It correctly defines the nature of the script (a script that runs in the background), perfectly mapping the English meaning of "Background Script".
  • "Script em Segundo Plano" (Avoided): The preposition "em" introduces syntactic ambiguity. It wrongly implies that the action of creating the script will happen in the background (asynchronously) while the user does something else in the system.

I still didn't read the other stuff to fix, maybe this is in them too, was looking on the files before the comment.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please read all AI review comments

For good suggestions, apply them with commits.

For bad suggestions, reply with reasons why they are bad.

Afterwards, mark this PR as ready please.
Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants