diff --git a/docs/README.md b/docs/README.md index 83cc0d233..ea3e0190d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -20,7 +20,7 @@ | 文档 | 说明 | | --- | --- | | [`translation.md`](./translation.md) | 翻译 / 本地化指南(单一信息源):术语与修改规则、工作流、提取翻译提示词。**翻译前先读。** | -| [`translation.md` 术语规范表](./translation.md#各语言术语规范--per-locale-terminology) | 8 个语言地区的术语与界面文案规范 `terminology-.md`(en-US / zh-CN / zh-TW / ja-JP / ru-RU / de-DE / vi-VN / tr-TR)。 | +| [`translation.md` 术语规范表](./translation.md#各语言术语规范--per-locale-terminology) | 9 个语言地区的术语与界面文案规范 `terminology-.md`(en-US / zh-CN / zh-TW / ja-JP / ru-RU / de-DE / vi-VN / tr-TR / pt-BR)。 | ## 贡献指南 / Contributing @@ -38,4 +38,4 @@ | [`README_zh-CN.md`](./README_zh-CN.md) | 简体中文 | | [`README_zh-TW.md`](./README_zh-TW.md) | 繁體中文 | | [`README_ja.md`](./README_ja.md) | 日本語 | -| [`README_RU.md`](./README_RU.md) | Русский | +| [`README_RU.md`](./README_RU.md) | Русский | \ No newline at end of file diff --git a/docs/references/terminology-pt-BR.md b/docs/references/terminology-pt-BR.md new file mode 100644 index 000000000..56d925360 --- /dev/null +++ b/docs/references/terminology-pt-BR.md @@ -0,0 +1,166 @@ +# Diretrizes de terminologia e textos de interface — pt-BR + +Este documento define a terminologia da interface e da documentação do ScriptCat em português do Brasil (`pt-BR`). O objetivo é manter os conceitos do produto identificáveis, usar textos naturais em interfaces brasileiras e preservar termos técnicos, identificadores e diferenças entre os tipos de script. + +Fontes de uso revisadas: `src/locales/pt-BR/*.json`, `docs/architecture.md`. + +## Princípios + +1. Use português brasileiro conciso e natural. Em títulos, botões, menus, estados e mensagens, prefira **caixa de frase**, não a capitalização de todas as palavras. +2. Preserve as diferenças entre `Script de usuário`, `Script de página`, `Script em segundo plano` e `Script agendado`. Esses nomes não são intercambiáveis. +3. Não faça substituições globais apenas porque duas palavras parecem equivalentes. Verifique a função, a posição na interface, o texto vizinho e se a string representa uma ação, um objeto ou um estado. +4. Quando o inglês for ambíguo ou pouco natural, consulte também o texto em `zh-CN` e o comportamento real da interface. Não copie automaticamente um defeito do texto-fonte. +5. Preserve placeholders, tags HTML/React, interpolação do i18next, URLs e identificadores como `@match`, `@exclude`, `@grant`, `@connect`, `@resource` e `@require`. +6. Não altere uma URL para uma rota localizada sem confirmar que o destino existe e contém o mesmo conteúdo. +7. Preserve nomes técnicos e de produto reconhecíveis, como `ScriptCat`, `ESLint`, `VSCode`, `Cookie`, `GM API`, `OPFS`, `MCP`, `SKILL.md`, `SkillScript` e `Storage API`. +8. As chaves citadas abaixo registram usos atuais ou pontos conhecidos de revisão. As mesmas regras devem ser aplicadas a novas strings com o mesmo significado. + +## Categorias + +| Categoria | Uso | +| --- | --- | +| **A. Termos de produto e recursos** | Nomes que identificam recursos, entidades e tipos de script do ScriptCat. | +| **B. Ações e estados da interface** | Formas preferidas para botões, menus, rótulos e mensagens de estado. | +| **C. Termos dependentes de contexto** | Palavras cuja tradução depende da função ou da superfície da interface. | +| **D. Termos técnicos a preservar** | Termos e identificadores que devem manter o significado técnico. | +| **E. Pontos de revisão** | Inconsistências que exigem revisão específica, não substituição automática. | + +## A. Termos de produto e recursos + +| Conceito | Forma preferida | Exemplos de chaves | Observações | +| --- | --- | --- | --- | +| Extensão do ScriptCat | `extensão ScriptCat` | `welcome_title`, `ext_update_notification` | Preserve sempre a grafia `ScriptCat`, nunca `Scriptcat`. | +| Recurso genérico de userscript | `script de usuário` | `script_list_content`, `allow_user_script_guide` | Use para a capacidade genérica de executar scripts do usuário. | +| Categoria de script normal | `Script normal` | `script_list.sidebar.normal_script` | É uma categoria atual da interface; não a misture com scripts em segundo plano ou agendados. | +| Ação de criar um user script | `Criar script de usuário` | `create_user_script` | O rótulo pode usar `script de usuário` mesmo quando a barra lateral usa `Script normal`. | +| Script de página | `Script de página` | `script_list_enable_content` | Conceito de execução em páginas; não substitua automaticamente pela categoria `Script normal`. | +| Script em segundo plano | `Script em segundo plano` | `create_background_script`, `background_script`, `enable_background.description` | Tipo de script e capacidade de execução em segundo plano. | +| Script agendado | `Script agendado` | `create_scheduled_script`, `scheduled_script`, `scheduled_script_description_title` | Não use `script crontab` como nome do tipo. | +| Sincronização de scripts | `Sincronização de scripts` | `script_sync`, `sync_status`, `setting_sync_title` | Diferencie sincronização de conexão com um serviço. | +| Sincronização de exclusões | `Sincronizar exclusões` | `sync_delete`, `sync_delete_desc`, `notification.script_sync_delete` | Se a interface precisar destacar tombstones/status, use `Sincronizar status de exclusão` após confirmação do comportamento. | +| Ação de assinatura | `Assinar` | `subscribe` quando for botão/ação | Use verbo para a ação. Não use o substantivo `Inscrição` como botão. | +| Objeto de assinatura | `Assinatura` | `subscribe_url`, `subscribe_section`, `count_subscribes` | Use para a entidade que mantém uma coleção de scripts atualizada. | +| Mercado / galeria de scripts | `Mercado de scripts` / `Galeria de scripts` | `script_list_title`, `script_gallery` | Preserve o nome usado pelo destino; não unifique áreas diferentes sem verificar. | +| Entidade Skill | `Skill` | `skills_add`, `skill_install`, `import_skill` | Use `Skill` para o pacote/objeto associado a `SKILL.md`. `habilidade` pode ser usada apenas em prosa genérica. | +| Agente de IA | `Agente de IA` | `title`, `settings_title` no namespace `agent` | Use de forma consistente; `Agent` pode permanecer apenas em identificadores ou nomes já definidos pelo produto. | +| Serviço de modelos | `Serviço de modelos` | `provider`, `provider_title` | Prefira plural quando a tela gerencia vários modelos/provedores. | + +## B. Ações e estados da interface + +| Conceito | Forma preferida | Exemplos de chaves | Observações | +| --- | --- | --- | --- | +| Criar | `Criar` | `create_script`, `tasks_create` | Acrescente o objeto quando necessário. | +| Salvar / Salvar como | `Salvar` / `Salvar como` | `save`, `save_as` | Use caixa de frase. | +| Importar / Exportar | `Importar` / `Exportar` | `import`, `export`, `import_file`, `export_file` | Formas padrão para arquivos e dados. | +| Instalar / Atualizar | `Instalar` / `Atualizar` | `script`, `update_script`, `skill_install` | Informe o objeto se o botão isolado for ambíguo. | +| Executar / Execução | `Executar` / `Execução` | `run`, `running`, `log_title` | Para logs, use `Logs de execução`. | +| Ativar / Desativar | `Ativar` / `Desativar`; estados `Ativado` / `Desativado` | `enable`, `disable`, `enabled_label` | Não use `abrir`/`fechar` para habilitação de recursos. | +| Configurações / Configuração | `Configurações` / `Configuração` | `settings`, `script_setting`, `editor_config` | `Configurações` para opções do produto; `Configuração` para um objeto ou arquivo de configuração. | +| Conectar / Sincronizar | `Conectar` / `Sincronizar` | `connect`, `connection_success`, `script_sync` | Não misture conexão de serviço com sincronização de dados. | +| Restaurar / Redefinir | `Restaurar` / `Redefinir` | `restore`, `restore_default_values`, `reset` | `Restaurar` recupera backup/valores; `Redefinir` volta uma configuração ao estado padrão. | +| Atualizar / Recarregar | `Atualizar` / `Recarregar` | `update`, `refresh`, `click_to_reload` | Use `Atualizar` para versão/dados e `Recarregar` para refresh/reload da interface. | +| Excluir / Limpar | `Excluir` / `Limpar` | `delete`, `clear_logs` | `Excluir` remove um objeto; `Limpar` remove conteúdo de uma coleção ou campo. | +| Monitorar arquivo | `Monitorar arquivo` / `Parar monitoramento` | `watch_file`, `stop_watch_file`, `watching_title` | Descreve observação contínua de alterações do arquivo. | +| Selecionar / desmarcar tudo | `Selecionar tudo` / `Desmarcar tudo` | `restore_settings_select_all`, `restore_settings_clear_all` | Não use `Limpar tudo` quando a ação apenas remove a seleção. | +| Diretório | `Diretório` | `open_directory`, `open_backup_dir` | Termo padrão do sistema de arquivos. | +| Aba do navegador | `Aba` | `close_current_tab`, `script_run_env.*` | Use `Todas as abas`, `Abas normais`, `Abas anônimas`. | +| Menu de contexto | `Menu de contexto` | `display_right_click_menu` | Evite `menu de clique com o botão direito`. | +| Clique / toque | `Clique` em interfaces de desktop; `Toque` apenas em interfaces móveis | `tap_to_expand`, `develop_mode_guide` | O popup da extensão no desktop deve usar `Clique`. | +| Estado concluído | Particípio: `Salvo`, `Redefinido`, `Importado` | `*_saved`, `*_reset`, `status_done` | Não transforme uma mensagem de resultado em comando no infinitivo. | + +## C. Termos dependentes de contexto + +| Conceito | Formas possíveis | Regra de decisão | Exemplos de chaves | +| --- | --- | --- | --- | +| Local / nuvem | `Local` / `Na nuvem` | Ajuste artigo e preposição à frase: `backup na nuvem`, `armazenamento local e em nuvem`. | `local`, `cloud`, `backup_to`, `source_local_script` | +| Origem / fonte | `Origem`, `Origem da instalação`, `Código-fonte`, `Fonte de dados` | Use `Origem` para procedência. Use `Fonte` apenas quando o contexto realmente for fonte de dados, tipografia ou código-fonte. | `source`, `col_source`, `loading_desc` | +| Armazenamento | `Armazenamento`, `Espaço de armazenamento`, `Storage API` | Diferencie dados armazenados, espaço concedido e nome técnico da API. | `script_storage`, `script_operation_description`, `storage_api` | +| Painel / console | `painel` / `console` | `painel` para controles da interface; `console` para saída das ferramentas de desenvolvedor. | `background_script_description`, `build_success_message` | +| Permissão / autorização | `Permissão`, `Permitir`, `Autorizar`, `Autorização` | `Permissão` é a capacidade; `Permitir`/`Negar` são decisões; `Autorização` é o acesso concedido e sua duração. | `permission`, `request_permission`, `auth_duration` | +| Correspondência / exclusão | `Regra de correspondência (@match)` / `Regra de exclusão (@exclude)` | Mantenha os identificadores técnicos visíveis e evite frases como `exclusão desta exclusão`. | `website_match`, `website_exclude`, `add_match`, `add_exclude` | +| Entre origens / CORS | `entre origens`, `CORS` | Use a terminologia web padrão; não use o calque `origem cruzada`. | `script_accessing_cross_origin_resource`, `permission_cors` | +| Tempo / horário | `Horário`, `Data e hora`, `Tempo de execução` | `Horário` para um instante; `Data e hora` para timestamp; `Tempo de execução` para duração/runtime. | `time`, `run_at`, `runtime` | +| Indicador do ícone | `Indicador`, `Contador`, `Não exibir` | Verifique se o badge mostra contagem, estado ou nada. | `extension_icon_badge`, `badge_type_none` | +| Lista de bloqueio | `Lista de bloqueio`, `Páginas bloqueadas` | Evite o calque `lista negra` em novos textos. | `blacklist_pages`, `page_in_blacklist` | +| Interface | `Interface` | Prefira `interface` a `UI` em textos comuns; mantenha `UI` apenas quando necessário por espaço ou contexto técnico. | `section_appearance_title` | +| Link de indicação | `Link de indicação` / `Link de afiliado` | Use `Link de afiliado` quando houver comissão; não use o genérico `Link de referência` sem confirmação. | `referral_link_title`, `referral_link_description` | + +## D. Termos técnicos a preservar + +| Conceito | Forma preferida | Exemplos de chaves | Motivo | +| --- | --- | --- | --- | +| Expressão regular | `expressão regular`; forma curta `regex` | `search_regex` | Terminologia padrão de desenvolvimento. | +| Expressão cron | `expressão cron` | `cron_invalid_expr`, `error_cron_invalid`, `tasks_cron` | Identifica a sintaxe aceita. | +| Expressão | `expressão` | `value_export_expression`, `cookie_export_expression`, `expression_format_error` | Preserva o significado técnico de valor avaliado/fornecido. | +| Tipo String | `String`; em explicação, `cadeia de caracteres` | `type_string` | Não traduzir o tipo como o genérico `Texto`. | +| Declaração de metadata | `declaração` | `error_metadata_line_duplicated` | Corresponde a uma declaração sintática. | +| Storage API | `Storage API` | `storage_api` | Nome técnico usado na documentação e nas APIs. | +| Identificadores de metadata | Preserve `@match`, `@exclude`, `@grant`, `@connect`, `@resource`, `@require`, `@antifeature` | Várias | Não traduzir, alterar caixa ou remover `@`. | +| Produtos, APIs e formatos | Preserve `ESLint`, `VSCode`, `Cookie`, `GM API`, `JSON`, `URL`, `OPFS`, `MCP`, `TTFT`, `SKILL.md`, `SkillScript` | Várias | Devem continuar reconhecíveis para usuários e desenvolvedores. | +| Placeholders e tags | Preserve `{{...}}`, `${...}`, HTML/React e URLs | Várias | Alterações podem quebrar a execução ou o destino. | + +## E. Pontos de revisão + +Os itens abaixo descrevem riscos observados ou decisões que exigem contexto. Não devem ser tratados como uma ordem de substituição global. + +| Tema | Situação a evitar | Direção recomendada | Exemplos de chaves | +| --- | --- | --- | --- | +| Capitalização | `Nova Versão Disponível`, `Falha na Instalação` | Use caixa de frase: `Nova versão disponível`, `Falha na instalação`. | Presente em vários namespaces | +| Assinatura | Usar `Inscrição` para ação e objeto | `Assinar` para a ação; `Assinatura` para a entidade. | `subscribe`, `subscribe_url`, `count_subscribes` | +| Skill | Traduzir todos os rótulos como `Habilidade` | Preserve `Skill` para a entidade ligada a `SKILL.md`. | `skills_add`, `skill_install`, `import_skill` | +| Origem | Usar `Fonte` para qualquer ocorrência de `source` | Use `Origem` para procedência e nomes mais específicos conforme o contexto. | `source`, `col_source`, `loading_desc` | +| Abas do navegador | Rótulo genérico `Todos` | Use `Todas as abas` quando o campo se refere a browser tabs. | `script_run_env.all` | +| Refresh vs update | Traduzir ambos como `Atualizar` | Use `Recarregar` para refresh e `Atualizar` para versão/conteúdo. | `skills_refresh`, `update` | +| Ação vs estado | `Redefinir configuração` em mensagem de sucesso | Use estado concluído: `Configuração redefinida`. | `*_reset`, `*_saved` | +| Links localizados | Inventar `/pt-BR/` a partir de uma URL em inglês | Preserve a URL até o destino pt-BR ser confirmado. | `guide.json` | +| Navegador específico | Copiar `Chrome` em comportamento que vale para vários navegadores | Use `navegador`, salvo se o comportamento for comprovadamente exclusivo do Chrome. | `enable_background.description` | +| Interpolação e concordância | `{{count}} selecionados` sem saber o substantivo | Inclua um substantivo neutro (`itens`) ou revise a concordância na tela real. | Contadores em vários namespaces | +| Texto dividido | Traduzir cada fragmento isoladamente | Monte e teste a frase completa na interface. | `menu_expand_num_before`, `menu_expand_num_after` | +| Fonte inglês/chinês divergente | Escolher uma versão sem verificar o produto | Confirme o comportamento e depois alinhe `en-US`, `zh-CN` e `pt-BR`. | `setting_sync_content`, `latest_version`, descrição de script em segundo plano | + +## Vocabulário preferido + +| Prefira | Evite, salvo contexto comprovado | +| --- | --- | +| `ScriptCat` | `Scriptcat` | +| `Script de usuário`, `Script de página`, `Script em segundo plano`, `Script agendado` | Misturar os tipos ou usar `script crontab` | +| `Assinar` (ação), `Assinatura` (objeto) | `Inscrição` para todos os contextos | +| `Skill` para a entidade de produto | Traduzir a entidade como `Habilidade` enquanto `SKILL.md`/`SkillScript` permanecem em inglês | +| `Configurações` para opções; `Configuração` para dados/objeto | `Config` em texto comum | +| `Origem` para procedência | `Fonte` como tradução automática de todo `source` | +| `Aba` para browser tab | Rótulos sem objeto como `Todos` | +| `Menu de contexto` | `Menu de clique com o botão direito` | +| `Entre origens (CORS)` | `Origem cruzada`, `cors` em minúsculas | +| `Monitorar arquivo` | `Observar arquivo` em contexto técnico contínuo | +| `Expressão regular` / `regex` | `Condição` quando a sintaxe aceita é regex | +| `Storage API` | Renomear o identificador técnico | +| `String` | `Texto` como nome do tipo técnico | +| `Clique` em interface de desktop | `Toque` fora de uma superfície móvel | +| `Em tempo real` para logs | `Ao vivo` | +| Caixa de frase | Capitalizar todas as palavras | +| `@require`, `@resource`, `@match`, `@exclude`, `@grant`, `@connect`, `@antifeature` | Traduzir ou alterar os identificadores | + +## Checklist para IA e colaboradores + +Ao adicionar ou editar textos em `pt-BR`: + +1. Confirme que o locale de destino é `pt-BR` e leia este documento e `docs/translation.md`. +2. Compare a string com `en-US` e `zh-CN`; se houver divergência, verifique o comportamento da interface antes de escolher uma versão. +3. Preserve as diferenças entre os tipos de script e reutilize os termos de produto definidos aqui. +4. Diferencie ação, objeto e estado, especialmente em `Assinar`/`Assinatura` e mensagens `*_reset`/`*_saved`. +5. Use caixa de frase e português brasileiro natural; evite calques como `puxar dados`, `origem cruzada` e `menu de clique com o botão direito`. +6. Preserve placeholders, tags, interpolação, URLs, nomes técnicos e identificadores de metadata. +7. Não localize uma URL sem confirmar que o destino existe. +8. Verifique concordância de gênero e número em textos com contadores. +9. Teste strings divididas e textos longos na interface real. +10. Antes da entrega, procure no conteúdo editado por: + - `Scriptcat` + - `Inscrição` + - `Habilidade` em rótulos da entidade Skill + - `Fonte` usado como procedência + - `lista negra` + - `origem cruzada` + - `Ao Vivo` + - `Toque` em controles de desktop + - capitalização excessiva + - identificadores ou URLs alterados diff --git a/docs/translation.md b/docs/translation.md index 600dc91bd..7a2ac5683 100644 --- a/docs/translation.md +++ b/docs/translation.md @@ -37,6 +37,7 @@ | `de-DE` | Deutsch | [terminology-de-DE.md](./references/terminology-de-DE.md) | | `vi-VN` | Tiếng Việt | [terminology-vi-VN.md](./references/terminology-vi-VN.md) | | `tr-TR` | Türkçe | [terminology-tr-TR.md](./references/terminology-tr-TR.md) | +| `pt-BR` | Português (Brasil) | [terminology-pt-BR.md](./references/terminology-pt-BR.md) | > `en-US` 是运行时的回退语言(fallback),也是新翻译的模板。其措辞应被刻意校准而非将含糊或不通顺的英文直接传播到其他 locale。 @@ -65,4 +66,4 @@ 2. 使用目标语言的自然表达;对同一 ScriptCat 概念使用规范中的固定术语,不要基于相近措辞合并不同的脚本类型。 3. 对需结合语境的术语,先核对实际功能、控件类型与上下文文案再决定用词。 4. 保留 i18next 插值、程序标识符、HTML/React 标记、URL 与元数据标识符(`@match`、`@require` 等)。 -5. 完成后复查本次修改,确认符合对应术语规范,并检查命名一致性、名词/动词混用等问题。 +5. 完成后复查本次修改,确认符合对应术语规范,并检查命名一致性、名词/动词混用等问题。 \ No newline at end of file diff --git a/src/locales/locales.ts b/src/locales/locales.ts index 6db946b30..d9af407fc 100644 --- a/src/locales/locales.ts +++ b/src/locales/locales.ts @@ -11,6 +11,7 @@ import * as deDE from "./de-DE"; import * as viVN from "./vi-VN"; import * as ruRU from "./ru-RU"; import * as trTR from "./tr-TR"; +import * as ptBR from "./pt-BR"; import { changeRelativeTimeLanguage } from "./relative-date"; export let localePath = ""; @@ -57,6 +58,7 @@ export function initLanguage(lng: string = "en-US"): void { "vi-VN": { title: "Tiếng Việt", ...viVN }, "ru-RU": { title: "Русский", ...ruRU }, "tr-TR": { title: "Türkçe", ...trTR }, + "pt-BR": { title: "Português (Brasil)", ...ptBR }, }, }); diff --git a/src/locales/pt-BR/agent.json b/src/locales/pt-BR/agent.json new file mode 100644 index 000000000..d778352c6 --- /dev/null +++ b/src/locales/pt-BR/agent.json @@ -0,0 +1,223 @@ +{ + "title": "Agente de IA", + "docs": "Documentação", + "chat": "Conversa", + "provider": "Serviço de modelo", + "mcp": "MCP", + "skills": "Skills", + "provider_title": "Serviço de modelo", + "provider_subtitle": "Gerencie provedores e conexões de modelos de IA", + "provider_select": "Provedor de IA", + "provider_api_base_url": "URL base da API", + "provider_api_key": "Chave da API", + "provider_model": "Modelo padrão", + "provider_test_connection": "Testar conexão", + "provider_test_success": "Conexão bem-sucedida", + "provider_test_failed": "Falha na conexão", + "provider_test_hint": "O teste envia uma requisição mínima para verificar a configuração", + "provider_docs": "Documentação", + "provider_count_hint": "O modelo padrão é usado para novas conversas", + "model_count": "{{count}} modelos", + "model_fetch": "Buscar modelos", + "model_name": "Nome", + "model_add": "Adicionar modelo", + "model_edit": "Editar", + "model_copy": "Copiar", + "model_delete": "Excluir", + "model_set_default": "Definir como padrão", + "model_default_label": "Padrão", + "model_max_tokens": "Máximo de tokens de saída", + "model_context_window": "Janela de contexto", + "model_no_models": "Nenhum modelo configurado", + "model_no_models_desc": "Adicione seu primeiro modelo para começar a usar o Agente de IA", + "model_capabilities": "Capacidades", + "model_supports_vision": "Entrada visual", + "model_supports_image_output": "Saída de imagem", + "skills_title": "Gerenciamento de Skills", + "skills_subtitle": "Gerencie pacotes de Skills do agente (prompts SKILL.md, scripts, referências)", + "skills_add": "Adicionar Skill", + "skills_empty": "Nenhuma Skill instalada", + "skills_empty_desc": "Faça upload de um ZIP ou importe sua primeira Skill de uma URL", + "skills_tools": "Ferramentas", + "skills_references": "Referências", + "skills_detail": "Detalhes da Skill", + "skills_install_url": "Importar da URL", + "skills_uninstall": "Desinstalar", + "skills_uninstall_confirm": "Tem certeza de que deseja desinstalar a Skill \"{{name}}\"?", + "skills_install_zip": "Fazer upload do ZIP", + "skills_prompt": "Prompt", + "skills_installed_at": "Instalado em", + "skills_refresh": "Recarregar", + "skills_refresh_success": "Recarregamento bem-sucedido", + "skills_tool_code": "Código da ferramenta", + "skills_click_to_view_code": "Clique no nome da ferramenta para ver o código", + "skills_config": "Configuração", + "skills_config_saved": "Configuração salva", + "skills_check_updates": "Verificar atualizações", + "skills_no_updates": "Todas as Skills estão atualizadas", + "skills_updates_available": "Atualizações disponíveis", + "skills_update": "Atualizar", + "skills_docs": "Documentação", + "skills_count": "{{count}} Skills instaladas", + "skills_update_count": "{{count}} atualizações disponíveis", + "skills_update_available": "Atualizar {{version}}", + "skills_references_short": "Refs", + "skills_configurable": "Configurável", + "skills_open_config": "Abrir configuração", + "skills_update_success": "Atualizado com sucesso", + "skills_url_placeholder": "Digite a URL do arquivo SKILL.cat.md", + "chat_new": "Nova conversa", + "chat_delete": "Excluir conversa", + "chat_delete_confirm": "Excluir esta conversa?", + "chat_no_conversations": "Nenhuma conversa", + "chat_search_placeholder": "Buscar conversas…", + "chat_search_no_results": "Nenhuma conversa correspondente", + "chat_export": "Exportar", + "chat_input_placeholder": "Digite uma mensagem...", + "chat_send": "Enviar", + "chat_stop": "Parar", + "chat_thinking": "Pensando", + "chat_tool_arguments": "Argumentos", + "chat_tool_result": "Resultado", + "chat_no_model": "Nenhum modelo configurado. Por favor, adicione um no serviço de modelo primeiro.", + "chat_model_select": "Selecionar modelo", + "chat_rename": "Renomear", + "chat_copy": "Copiar", + "chat_copy_success": "Copiado", + "chat_regenerate": "Gerar novamente", + "chat_streaming": "Gerando...", + "chat_loading_audio": "Carregando áudio...", + "chat_starting": "Iniciando...", + "chat_retrying": "Tentando novamente ({{attempt}}/{{max}})...", + "chat_attach_file": "Anexar arquivo", + "chat_welcome_hint": "Pergunte-me qualquer coisa sobre seus scripts", + "chat_welcome_start": "Crie uma conversa para começar", + "chat_first_token": "TTFT", + "chat_tools_count": "{{count}} chamadas de ferramenta", + "chat_tools_enabled": "Ferramentas ativadas", + "chat_tools_disabled": "Ferramentas desativadas", + "chat_tools_enabled_tip": "Ferramentas ativadas — clique para desativar.", + "chat_tools_disabled_tip": "Ferramentas desativadas — clique para ativar.", + "chat_background_enabled_tip": "Execução em segundo plano ATIVADA — a conversa continua em execução após fechar a página. Clique para desativar.", + "chat_background_disabled_tip": "Execução em segundo plano DESATIVADA — a conversa para quando a página é fechada. Clique para ativar.", + "chat_delete_round": "Excluir", + "chat_copy_message": "Copiar", + "chat_edit_message": "Editar", + "chat_save_and_send": "Salvar e enviar", + "chat_cancel_edit": "Cancelar", + "chat_message_queued": "Na fila", + "chat_cancel_message": "Cancelar envio", + "permission_title": "O script está solicitando o uso da conversa do Agente", + "permission_describe": "Este script solicita acesso à conversa do Agente, o que consumirá tokens da API. Conceda acesso apenas a scripts confiáveis.", + "permission_content": "Conversa do Agente", + "opfs": "OPFS", + "opfs_title": "Navegador de arquivos OPFS", + "opfs_empty": "Diretório vazio", + "opfs_name": "Nome", + "opfs_size": "Tamanho", + "opfs_type": "Tipo", + "opfs_modified": "Última modificação", + "opfs_delete_confirm": "Tem certeza de que deseja excluir?", + "opfs_delete_success": "Excluído", + "opfs_preview": "Visualizar", + "opfs_subtitle": "Origin Private File System · Armazenamento privado do Agente", + "opfs_refresh": "Atualizar", + "opfs_upload": "Fazer upload", + "opfs_actions": "Ações", + "opfs_item_count": "{{count}} itens", + "opfs_empty_desc": "Nenhum arquivo neste diretório ainda", + "opfs_upload_success": "Upload concluído", + "opfs_upload_failed": "Falha no upload", + "opfs_uploading": "Fazendo upload…", + "opfs_type_directory": "Pasta", + "opfs_type_image": "Imagem", + "opfs_type_text": "Texto", + "opfs_type_binary": "Binário", + "opfs_root": "Raiz", + "dom_permission_title": "O script solicita permissão para manipular o DOM", + "dom_permission_describe": "Este script solicita a capacidade de ler e manipular o DOM da página da web (clicar, preencher formulários, navegar, capturar tela, etc.). Conceda acesso apenas a scripts confiáveis.", + "dom_permission_content": "Operações do Agente no DOM", + "mcp_title": "Servidores MCP", + "mcp_subtitle": "Conecte servidores MCP para estender as ferramentas, recursos e prompts do agente", + "mcp_add_server": "Adicionar servidor", + "mcp_no_servers": "Nenhum servidor MCP configurado", + "mcp_no_servers_desc": "Adicione seu primeiro servidor MCP para conectar ferramentas e dados externos", + "mcp_status_connected": "Conectado", + "mcp_status_failed": "Falha na conexão", + "mcp_status_untested": "Não testado", + "mcp_has_key": "Chave secreta", + "mcp_headers_count": "{{count}} cabeçalho(s)", + "mcp_count_servers": "{{count}} servidores", + "mcp_count_connected": "{{count}} conectados", + "mcp_count_tools": "{{count}} ferramentas disponíveis", + "mcp_docs": "Documentação", + "mcp_test_connection": "Testar", + "mcp_optional": "opcional", + "mcp_custom_headers": "Cabeçalhos personalizados", + "mcp_enabled": "Ativado", + "mcp_detail": "Detalhes", + "mcp_tools": "Ferramentas", + "mcp_resources": "Recursos", + "mcp_prompts": "Prompts", + "mcp_no_tools": "Nenhuma ferramenta disponível", + "mcp_no_resources": "Nenhum recurso disponível", + "mcp_no_prompts": "Nenhum prompt disponível", + "mcp_loading": "Carregando...", + "tasks": "Tarefas", + "tasks_title": "Tarefas agendadas", + "tasks_subtitle": "Execute tarefas do agente automaticamente de acordo com uma expressão cron", + "tasks_docs": "Documentação", + "tasks_count_total": "{{count}} tarefas", + "tasks_count_enabled": "{{count}} ativadas", + "tasks_create": "Criar tarefa", + "tasks_edit": "Editar tarefa", + "tasks_mode": "Modo", + "tasks_mode_internal_short": "Interno", + "tasks_mode_event_short": "Evento", + "tasks_cron": "Expressão cron", + "tasks_next_run": "Próxima execução", + "tasks_run_now": "Executar agora", + "tasks_history": "Histórico", + "tasks_prompt": "Prompt", + "tasks_max_iterations": "Máximo de iterações", + "tasks_notify": "Notificar ao concluir", + "tasks_notify_desc": "Enviar uma notificação do navegador quando a tarefa for concluída", + "tasks_no_tasks": "Nenhuma tarefa agendada", + "tasks_no_tasks_desc": "Crie sua primeira tarefa agendada para executar o agente automaticamente", + "tasks_no_runs": "Nenhum histórico de execução ainda", + "tasks_clear_runs": "Limpar histórico", + "tasks_clear_runs_confirm": "Tem certeza de que deseja limpar o histórico de execução?", + "tasks_event_hint": "Quando acionado, o script que criou esta tarefa será notificado", + "tasks_event_trigger": "Gatilho de evento", + "tasks_model_select": "Selecionar modelo", + "tasks_skills_auto": "Carregar tudo automaticamente", + "tasks_run_status_success": "Sucesso", + "tasks_run_status_error": "Erro", + "tasks_run_status_running": "Em execução", + "tasks_run_duration": "Duração", + "tasks_run_usage": "Uso", + "tasks_run_time": "Hora", + "tasks_run_status": "Status", + "tasks_never_run": "Ainda não executada", + "settings": "Configurações", + "settings_title": "Configurações do agente", + "settings_subtitle": "Modelo, pesquisa e preferências gerais · as alterações são aplicadas instantaneamente", + "settings_cat_model": "Modelo", + "settings_cat_search": "Pesquisa", + "summary_model": "Modelo de resumo", + "summary_model_desc": "Modelo para sumarização, usa o modelo padrão se não estiver definido", + "summary_model_placeholder": "Usar modelo padrão", + "search_engine": "Mecanismo de pesquisa", + "search_engine_desc": "A fonte de busca usada pela ferramenta web_search.", + "search_engine_baidu": "Baidu", + "search_google_api_key": "Chave da API do Google", + "search_google_api_key_desc": "Usado para chamar a API JSON de Pesquisa Personalizada.", + "search_google_cse_id": "ID do mecanismo de pesquisa personalizada", + "search_google_cse_id_desc": "O parâmetro cx do Mecanismo de Pesquisa Programável.", + "settings_saved": "Configurações salvas", + "settings_save_failed": "Falha ao salvar as configurações", + "search_engine_tip_bing": "Mecanismo de pesquisa padrão com ampla cobertura global, sem necessidade de configuração extra.", + "search_engine_tip_duckduckgo": "Mecanismo de pesquisa focado em privacidade, não requer chave de API.", + "search_engine_tip_baidu": "Otimizado para conteúdo em chinês, melhores resultados para consultas em chinês.", + "search_engine_tip_google": "Resultados de pesquisa de alta qualidade, requer uma Chave de API do Google e um ID de Mecanismo de Pesquisa Personalizada." +} diff --git a/src/locales/pt-BR/common.json b/src/locales/pt-BR/common.json new file mode 100644 index 000000000..ed59c3cba --- /dev/null +++ b/src/locales/pt-BR/common.json @@ -0,0 +1,97 @@ +{ + "user_guide": "Guia do usuário", + "api_docs": "Documentação da API", + "development_guide": "Guia de desenvolvimento", + "script_gallery": "Galeria de scripts", + "community_forum": "Fórum da comunidade", + "external_links": "Links externos", + "no_data": "Sem dados", + "logs": "Logs", + "tools": "Ferramentas", + "settings": "Configurações", + "change_theme": "Mudar tema", + "hide_main_sidebar": "Recolher barra lateral", + "show_main_sidebar": "Expandir barra lateral", + "menu": "Menu", + "notifications": "Notificações", + "more_menu": "Mais opções", + "helpcenter": "Central de ajuda", + "save": "Salvar", + "save_success": "Salvo com sucesso", + "update": "Atualizar", + "check_update": "Verificar atualização", + "confirm_delete": "Confirmar exclusão", + "delete_success": "Exclusão bem-sucedida", + "enable": "Ativar", + "disable": "Desativar", + "name": "Nome", + "version": "Versão", + "source": "Origem", + "action": "Ação", + "export": "Exportar", + "delete": "Excluir", + "pin_to_top": "Fixar no topo", + "confirm": "Confirmar", + "close": "Fechar", + "key": "Chave", + "value": "Valor", + "add": "Adicionar", + "type": "Tipo", + "size": "Tamanho", + "download": "Baixar", + "edit_value": "Editar valor", + "add_value": "Adicionar valor", + "update_success": "Atualização bem-sucedida", + "add_success": "Adição bem-sucedida", + "clear": "Limpar", + "type_string": "String", + "type_number": "Número", + "type_boolean": "Booleano", + "type_object": "Objeto", + "confirm_delete_resource": "Tem certeza de que deseja excluir este recurso? Este recurso será recarregado na próxima inicialização.", + "confirm_clear_resource": "Tem certeza de que deseja limpar estes recursos? Os recursos serão recarregados na próxima inicialização.", + "yes": "Sim", + "no": "Não", + "confirm_delete_permission": "Tem certeza de que deseja excluir esta permissão?", + "reset": "Redefinir", + "run_once": "Executar uma vez", + "stop": "Parar", + "edit": "Editar", + "copy": "Copiar", + "exclude_on": "Restaurar a execução de $0", + "exclude_off": "Impedir a execução em $0", + "confirm_error": "Falha na confirmação", + "import": "Importar", + "error": "Erro", + "get_script": "Obter script", + "report_issue": "Reportar problema", + "project_docs": "Documentação do projeto", + "community": "Comunidade", + "domain": "Domínio", + "script_name": "Nome do script", + "skip": "Pular", + "next": "Próximo", + "back": "Voltar", + "auto": "Automático", + "collapse": "Recolher", + "expand": "Expandir", + "no_message_content": "Nenhum conteúdo de mensagem", + "loading": "Carregando...", + "no_scripts": "Nenhum script", + "no_subscribes": "Nenhuma assinatura", + "no_subscribes_hint": "Coleções de scripts assinados aparecerão aqui", + "clear_filter": "Limpar filtro", + "batch_selected": "{{count}} selecionados", + "stopped": "Parado", + "auth_type": "Tipo de autenticação", + "url": "URL", + "username": "Nome de usuário", + "password": "Senha", + "access_token_bearer": "Token de acesso (Bearer)", + "s3_bucket_name": "Nome do bucket", + "s3_region": "Região", + "s3_access_key_id": "ID da chave de acesso", + "s3_secret_access_key": "Chave de acesso secreta", + "s3_custom_endpoint": "Endpoint personalizado (opcional)", + "cancel": "Cancelar" +} \ No newline at end of file diff --git a/src/locales/pt-BR/editor.json b/src/locales/pt-BR/editor.json new file mode 100644 index 000000000..5ae16d9a8 --- /dev/null +++ b/src/locales/pt-BR/editor.json @@ -0,0 +1,138 @@ +{ + "save": "Salvar", + "save_success": "Salvo com sucesso", + "copy": "Copiar", + "find": "Localizar", + "replace": "Substituir", + "select_all": "Selecionar tudo", + "format": "Formatar", + "back": "Voltar", + "more": "Mais", + "file": "Arquivo", + "edit": "Editar", + "settings": "Configurações", + "run_settings": "Configurações de Execução", + "code": "Código", + "script_setting": "Configurações do Script", + "storage": "Armazenamento", + "resource": "Recursos", + "script_storage_tooltip": "Gerenciar os dados armazenados do script (GM_value)", + "script_resource_tooltip": "Gerenciar recursos baixados via @resource e @require", + "script_setting_tooltip": "Personalizar configurações para este script", + "search_resource": "Buscar recursos", + "search_storage": "Buscar chave", + "record_count": "{{count}} registro(s)", + "resource_count": "{{count}} recursos · {{size}}", + "script_list": "Lista de scripts", + "search_scripts": "Buscar script...", + "new_script": "Novo Script", + "source": "Origem", + "from_user": "Usuário", + "from_script": "Script", + "last_updated": "Última Atualização", + "run_at": "Momento da execução", + "run_in": "Ambiente de execução", + "line_col": "Ln {{line}}, Col {{col}}", + "script_not_found": "Script não encontrado", + "script_name_cannot_be_set_to_empty": "O nome do script não pode estar vazio", + "confirm_delete_script": "Excluir o script \"{{name}}\"?", + "delete_success": "Excluído com sucesso", + "delete_failed": "Falha ao excluir", + "cancel": "Cancelar", + "confirm": "Confirmar", + "save_as": "Salvar como", + "run": "Executar", + "script_storage": "Armazenamento do Script", + "key_placeholder": "Chave", + "value_placeholder": "Quando o tipo for objeto, por favor, insira dados que possam ser analisados como JSON.", + "clear_success": "Limpeza bem-sucedida", + "confirm_clear": "Tem certeza de que deseja limpar este espaço de armazenamento?", + "basic_info": "Informações básicas", + "update_url": "URL de atualização", + "add_permission": "Adicionar permissão", + "match": "Correspondência", + "add_match": "Adicionar correspondência", + "add_exclude": "Adicionar exclusão", + "bulk_match_desc": "Cole um padrão por linha. Espaços em branco são removidos e entradas em branco ou duplicadas são ignoradas.", + "bulk_permission_desc": "Escolha um tipo de permissão e um estado de permissão, depois cole um valor de permissão por linha.", + "bulk_values": "Valores em lote", + "bulk_empty_preview": "Cole valores para visualizar o resultado analisado", + "bulk_status_new": "Novo", + "bulk_status_duplicate": "Duplicado", + "preview": "Visualizar", + "status": "Status", + "website_match": "Correspondência de site (@match)", + "website_exclude": "Exclusão de site (@exclude)", + "confirm_reset": "Confirmar redefinição?", + "confirm_delete_match": "Confirmar a exclusão desta correspondência?", + "confirm_delete_exclude": "Excluir esta regra de exclusão?", + "after_deleting_match_item": "Após a edição, suas regras de correspondência personalizadas serão usadas; clique em Redefinir para restaurar as regras de correspondência integradas ao script.", + "after_deleting_exclude_item": "Após a edição, suas regras de exclusão personalizadas serão usadas; clique em Redefinir para restaurar as regras de exclusão integradas ao script.", + "undo": "Desfazer", + "redo": "Refazer", + "cut": "Recortar", + "paste": "Colar", + "user_config": "Configuração do usuário", + "storage_api": "Storage API", + "use_file_system": "Sistema de arquivos em uso", + "open_directory": "Abrir diretório", + "account_validation_failed": "Falha na validação da conta", + "not_set": "Não definido", + "in_use": "Em uso", + "storage_error": "Erro de armazenamento", + "upload_to_cloud": "Enviar para a nuvem", + "save_failed": "Falha ao salvar", + "exporting": "Exportando...", + "upload_to": "Enviar para", + "value_export_expression": "Expressão de exportação de valor", + "overwrite_original_value_on_import": "Sobrescrever valor original na importação", + "cookie_export_expression": "Expressão de exportação de cookie", + "overwrite_original_cookie_on_import": "Sobrescrever cookie original na importação", + "restore_default_values": "Restaurar valores padrão", + "edit_conflict": "Conflito de edição", + "confirm_override_when_edit_conflict": "Este script foi editado em outra instância. Substituí-lo irá sobrescrever essas alterações. Você gostaria de manter esta versão?", + "scriptname_conflict": "Conflito de Nome de Script", + "confirm_save_when_scriptname_conflict": "Este nome de script já está sendo usado por outro script. Você ainda deseja salvá-lo?", + "eslint_config_format_error": "Erro no formato da configuração do eslint", + "create_success_note": "Novo script criado com sucesso. Note que o script em segundo plano não será ativado por padrão.", + "save_as_failed": "Falha ao salvar como", + "save_as_success": "Salvo como com sucesso", + "only_background_scheduled_can_run": "Apenas scripts em segundo plano ou agendados podem ser executados", + "build_success_message": "Compilado com sucesso, abra as ferramentas de desenvolvedor para ver a saída no console", + "script_modified_close_confirm": "O script foi modificado. As alterações serão perdidas após o fechamento, continuar?", + "close_current_tab": "Fechar aba atual", + "close_other_tabs": "Fechar outras", + "close_left_tabs": "Fechar abas à esquerda", + "close_right_tabs": "Fechar abas à direita", + "invalid_script_code": "Código inválido", + "build_failed": "Falha na compilação", + "watch_file": "Monitorar arquivo", + "stop_watch_file": "Parar de monitorar", + "watch_file_description": "Monitore o arquivo para alterações e atualize o script automaticamente. Mantenha o caminho do arquivo de script inalterado e não feche esta página enquanto observa.", + "individual_edit": "Edição individual", + "batch_edit": "Edição em lote", + "script_code": "Código do script", + "editor_config": "Configuração do editor", + "editor_type_definition": "Definição de tipo do editor", + "font_size": "Tamanho da fonte", + "font_size_description": "Controla o tamanho da fonte do editor em pixels.", + "mouse_wheel_scroll_sensitivity": "Sensibilidade da roda do mouse", + "mouse_wheel_scroll_sensitivity_description": "Multiplicador aplicado ao delta de rolagem da roda do mouse.", + "smooth_scrolling": "Rolagem suave", + "smooth_scrolling_description": "Anima a rolagem do editor.", + "editor_config_description": "Configure via compilerOptions. Veja", + "editor_type_definition_description": "Você pode personalizar suas próprias definições de tipos, e o editor de script carregará automaticamente essas definições", + "eslint_rules_reset": "Regras do ESLint redefinidas", + "eslint_rules_saved": "Regras do ESLint salvas", + "editor_config_reset": "Configuração do editor redefinida", + "editor_config_saved": "Configuração do editor salva", + "editor_config_format_error": "Erro no formato da configuração do editor", + "editor_type_definition_reset": "Definição de tipos do editor redefinida", + "editor_type_definition_saved": "Definição de tipos do editor salva", + "trash_restore_prompt_title": "Restaurar o script excluído?", + "trash_restore_prompt_description": "Há um script com o mesmo nome e namespace na lixeira. Ao restaurá-lo, sua identidade e os dados preservados serão reutilizados. Cancele para continuar editando sem salvar.", + "editor": { + "show_script_list": "Mostrar lista de scripts", + "hide_script_list": "Ocultar lista de scripts" + } +} diff --git a/src/locales/pt-BR/guide.json b/src/locales/pt-BR/guide.json new file mode 100644 index 000000000..3e9d06337 --- /dev/null +++ b/src/locales/pt-BR/guide.json @@ -0,0 +1,33 @@ +{ + "installed_scripts": "Os scripts que você instalou serão exibidos aqui. Consulte o guia de início rápido para o básico.", + "script_list_title": "Mercado de scripts", + "script_list_content": "Você pode instalar scripts do Mercado de Scripts. Além de suportar scripts de usuário, o ScriptCat também suporta scripts em segundo plano.", + "script_list_enable_title": "Ativar scripts", + "script_list_enable_content": "Os scripts precisam ser ativados para serem usados. Os scripts de página são ativados por padrão na instalação, enquanto os scripts em segundo plano são desativados por padrão.", + "script_list_action_title": "Ação", + "script_list_action_content": "A barra de operação permite acesso à edição de scripts, controle de execução e término de scripts (scripts em segundo plano) e configurações (consulte UserConfig). Os botões à direita permitem acesso à filtragem avançada e à alternância de modos de visualização.", + "tools_backup_title": "Backup", + "tools_backup_content": "O backup permite que você salve scripts para evitar perdas. Você pode exportar arquivos de script para sua máquina local ou carregar arquivos de script de sua máquina local. Você também pode fazer backup na nuvem para maior conveniência. Migrando de outro gerenciador? Consulte o guia de migração.", + "setting_sync_title": "Atualização e sincronização", + "setting_sync_content": "O recurso de sincronização de scripts permite que você sincronize facilmente o conteúdo do script deste dispositivo para a nuvem. Se você selecionar a opção de sincronizar exclusões, quando um script for excluído neste dispositivo, ele também será excluído da nuvem. Você também pode atualizar a versão do script aqui para obter recursos mais poderosos.", + "installed_scripts_title": "Scripts instalados", + "subscribe_title": "Assinaturas", + "subscribe_content": "Após assinar um link de script, o script permanece atualizado automaticamente. Saiba mais na documentação de assinaturas.", + "welcome_title": "Bem-vindo ao ScriptCat 🎉", + "welcome_subtitle": "Um poderoso gerenciador de scripts de usuário — vamos começar em alguns passos.", + "welcome_feature_manage_title": "Gerencie os scripts instalados", + "welcome_feature_manage_desc": "Todos os seus scripts ficam juntos na página \"Scripts Instalados\"", + "welcome_feature_market_title": "Instale a partir do mercado de scripts", + "welcome_feature_market_desc": "Descubra e instale scripts de scriptcat.org com um clique", + "welcome_feature_backup_title": "Nunca perca seus scripts", + "welcome_feature_backup_desc": "Faça backup de scripts localmente ou na nuvem e troque de dispositivo sem preocupações", + "welcome_start": "Iniciar tour", + "welcome_later": "Talvez mais tarde", + "tour_finish": "Concluir", + "tour_progress": "{{current}} / {{total}}", + "title": "Guia de primeiros passos", + "demo_normal_name": "Script de exemplo", + "demo_normal_desc": "Um script de exemplo para este guia", + "demo_background_name": "Script de exemplo em segundo plano", + "demo_background_desc": "Um script de exemplo em segundo plano para este guia" +} diff --git a/src/locales/pt-BR/index.ts b/src/locales/pt-BR/index.ts new file mode 100644 index 000000000..bacd6d096 --- /dev/null +++ b/src/locales/pt-BR/index.ts @@ -0,0 +1,11 @@ +export { default as agent } from "./agent.json"; +export { default as common } from "./common.json"; +export { default as editor } from "./editor.json"; +export { default as guide } from "./guide.json"; +export { default as install } from "./install.json"; +export { default as logs } from "./logs.json"; +export { default as permission } from "./permission.json"; +export { default as popup } from "./popup.json"; +export { default as script } from "./script.json"; +export { default as settings } from "./settings.json"; +export { default as tools } from "./tools.json"; diff --git a/src/locales/pt-BR/install.json b/src/locales/pt-BR/install.json new file mode 100644 index 000000000..58c40e923 --- /dev/null +++ b/src/locales/pt-BR/install.json @@ -0,0 +1,214 @@ +{ + "script": "Instalar script", + "update_script": "Atualizar script", + "subscribe": "Instalar assinatura", + "update_subscribe": "Atualizar assinatura", + "update_script_no_close": "Atualizar script sem fechar a janela", + "script_no_close": "Instalar script sem fechar a janela", + "update_script_no_more_update": "Atualizar script e desativar verificação de atualização", + "close_update_script_no_more_update": "Fechar e não verificar atualizações", + "script_no_more_update": "Instalar script e desativar verificação de atualização", + "subscribe_scripts_title": "Esta assinatura instalará os seguintes scripts", + "subscribe_scripts_empty": "Esta assinatura ainda não declara nenhum script", + "perm_card_title": "A este script serão concedidas as seguintes permissões", + "perm_card_hint": "Por favor, confirme antes de instalar", + "perm_card_empty": "Este script não solicita nenhuma permissão especial", + "perm_match_label": "Executa em", + "perm_match_summary": "O script é executado nestes sites e modifica as páginas", + "perm_connect_label": "Acesso entre origens (CORS)", + "perm_connect_summary": "Pode enviar solicitações e ler dados dos seguintes domínios", + "perm_grant_label": "Permissões GM", + "perm_grant_summary": "Pode chamar as seguintes APIs GM", + "perm_require_label": "Recursos externos", + "perm_require_summary": "Carrega os seguintes scripts e recursos de terceiros", + "badge_background": "Segundo plano", + "badge_scheduled": "Agendado", + "enabled_label": "Ativado", + "schedule_cron_label": "Tarefa agendada", + "schedule_next_run": "Próxima execução", + "schedule_background_desc": "Executa automaticamente enquanto o navegador estiver aberto", + "background_script_description": "Este é um script em segundo plano. Uma vez ativado, ele é executado automaticamente quando o navegador inicia e pode ser controlado manualmente no painel.", + "scheduled_script_description_title": "Este é um script agendado. Uma vez ativado, ele é executado automaticamente no horário especificado e pode ser controlado manualmente no painel.", + "code_lines": "{{count}} linhas", + "code_copy": "Copiar código", + "code_collapse": "Recolher", + "code_expand": "Expandir", + "loading_title": "Carregando script", + "loading_desc": "Baixando e analisando o conteúdo da origem do script", + "error_retry": "Tentar novamente", + "error_invalid_desc": "Falta um parâmetro de origem de instalação válido, então o script não pode ser carregado.", + "context_install": "Instalar script", + "context_update": "Atualizar script", + "background_script": "Script em segundo plano", + "scheduled_script": "Script agendado", + "watching_chip": "Monitorando", + "watching_title": "Monitorando alterações do arquivo", + "watching_file_desc": "Salvar {{file}} reinstalará e sincronizará o script automaticamente", + "watching_last_sync": "Última sincronização {{time}}", + "warning_title": "Por favor, confirme que o script vem de uma origem confiável", + "warning_risk_connect": "ele pode acessar todos os domínios", + "warning_risk_antifeature": "ele declara metadados @antifeature", + "warning_risk_join": " e ", + "warning_risk_tail": " — instale com cautela.", + "action_note_install": "Instalar significa que você confia na origem e no autor deste script", + "action_note_update": "Atualizar significa que você aceita esta alteração de código e permissão", + "action_note_subscribe": "Instalar significa que você confia nesta assinatura e em seu autor", + "action_note_watching": "Monitorando — salvar o arquivo atualiza automaticamente; pare o monitoramento para agir manualmente", + "context_skill_install": "Instalar Skill", + "context_skill_update": "Atualizar Skill", + "skill_kind": "Skill de IA", + "skill_prompt_title": "Prompt", + "skill_prompt_chip": "SKILL.md", + "skill_tools_title": "Ferramentas", + "skill_config_title": "Configuração", + "skill_references_title": "Referências", + "skill_required": "Obrigatório", + "skill_secret": "Secreto", + "skill_install": "Instalar Skill", + "skill_update": "Atualizar Skill", + "skill_warning": "A Skill injeta um prompt na IA e concede permissão para chamar as seguintes ferramentas, capacidades GM e configuração. Instale apenas de fontes legítimas!", + "skill_warning_title": "Por favor, confirme que esta Skill vem de uma fonte confiável", + "skill_warning_desc": "Após a instalação, a Skill injeta um prompt na IA e concede as ferramentas listadas (incl. permissões GM) e leitura/escrita de configuração — instale com cautela.", + "success": "Instalação bem-sucedida", + "install": {}, + "failed": "Falha na instalação", + "subscribe_success": "Assinatura bem-sucedida", + "updatepage": { + "title": "Atualização em lote", + "main_header": "Verificar atualizações", + "last_check": "Última verificação {{time}}", + "status_checking_updates": "Verificando as atualizações...", + "updates_available": "{{count}} atualizações disponíveis", + "ignored_count": "{{count}} ignoradas", + "selected_count": "{{selected}} / {{total}} selecionados", + "update_selected": "Atualizar selecionados ({{count}})", + "ignore_selected": "Ignorar selecionados", + "update": "Atualizar", + "ignore": "Ignorar", + "restore": "Restaurar", + "restore_all": "Restaurar todos", + "ignored_section": "Atualizações ignoradas", + "auto_close": "Fechando automaticamente em {{count}} s", + "col_script": "Script", + "col_version": "Versão", + "col_change": "Alterações", + "col_source": "Origem", + "col_action": "Ações", + "enabled": "Ativado", + "disabled": "Desativado", + "codechange_major": "Alteração maior", + "codechange_noticeable": "Alteração notável", + "codechange_tiny": "Alteração menor", + "tag_new_connect": "Novo @connect", + "empty_title": "Nenhuma atualização encontrada", + "empty_desc": "Verificados {{count}} scripts · Nenhuma atualização disponível", + "recheck": "Verificar novamente", + "tap_to_expand": "Clique para expandir", + "similarity": "Similaridade", + "new_connects": "Novos @connect", + "toast_found": "Encontrados {{count}} scripts com atualizações", + "toast_uptodate": "Todos os scripts estão atualizados" + }, + "importpage": { + "title": "Importação de dados", + "context_review": "Importação de dados", + "context_importing": "Importando", + "context_done": "Importação concluída", + "selected_count": "{{selected}} / {{total}} selecionados", + "unimportable_count": "{{count}} itens não podem ser importados", + "count_scripts": "{{count}} script(s)", + "count_subscribes": "{{count}} assinaturas", + "col_script": "Script", + "col_version": "Versão", + "col_source": "Origem", + "col_data": "Dados", + "col_status": "Status", + "col_enabled": "Ativado", + "op_add": "Novo", + "op_update": "Atualizar", + "op_error": "Falha na análise", + "source_local": "Criado localmente", + "data_values": "{{count}} itens", + "data_resources": "com recursos", + "enable_after_import": "Ativar após a importação", + "row_error": "Arquivo corrompido, não é possível importar", + "unknown_script": "Script desconhecido", + "subscribe_section": "Assinatura(s)", + "trust_hint": "Apenas os itens selecionados serão restaurados", + "import_selected": "Importar selecionados ({{count}})", + "importing_progress": "Restaurando backup · {{done}} / {{total}} concluídos", + "importing_hint": "Mantenha esta página aberta", + "importing_actionbar_hint": "Restaurando scripts e dados, por favor, não feche esta página", + "importing_button": "Importando…", + "cancel": "Cancelar", + "status_pending": "Pendente", + "status_importing": "Importando", + "status_done": "Importado", + "status_skipped": "Ignorado", + "status_warning": "Falha em alguns recursos", + "resource_import_failed": "Não foi possível importar os seguintes recursos:", + "overwrite_local": "Excluir todos os scripts locais antes de importar", + "include_settings": "Restaurar também as configurações", + "restore_settings_title": "Restaurar configurações", + "restore_settings_note": "A restauração substitui as preferências locais correspondentes; configurações locais do dispositivo, como credenciais de sincronização na nuvem, não estão incluídas.", + "restore_settings_select_all": "Selecionar tudo", + "restore_settings_clear_all": "Desmarcar tudo", + "restore_settings_customize": "Personalizar", + "restore_settings_selected": "{{selected}} de {{total}} selecionados", + "settings_group_app": "Configurações do aplicativo", + "settings_group_agent": "Assistente de IA", + "settings_count_keys": "{{count}} itens", + "settings_count_units": "{{count}} entrada(s)", + "section_appearance_title": "Aparência e interface", + "section_appearance_desc": "Menu, emblema, serviço de favicon", + "section_update_title": "Atualizações e sincronização", + "section_update_desc": "Ciclo de verificação, atualização silenciosa, sincronização automática", + "section_editor_title": "Editor e lint", + "section_editor_desc": "Configuração e preferências do editor, ESLint", + "section_other_title": "Outros", + "section_other_desc": "Lista de bloqueio de sites, limpeza de logs, etc.", + "section_models_title": "Modelos de IA", + "section_models_desc": "Configuração de modelo/credencial, modelo padrão e de resumo", + "section_mcp_title": "Servidores MCP", + "section_mcp_desc": "Conexões MCP configuradas", + "section_tasks_title": "Tarefas agendadas", + "section_tasks_desc": "Definições de tarefas agendadas do agente", + "import_all_settings": "Importar selecionados ({{count}} · todas as configurações)", + "import_partial_settings": "Importar selecionados ({{count}} · configurações {{selected}}/{{sections}})", + "done_title": "Importação concluída", + "done_desc": "Os scripts e dados selecionados foram restaurados", + "done_stat_scripts": "{{count}} scripts", + "done_stat_subscribes": "{{count}} assinaturas", + "done_stat_values": "{{count}} itens de dados", + "view_scripts": "Ver lista de scripts", + "loading_title": "Analisando arquivo de backup", + "loading_desc": "Lendo e verificando o conteúdo do backup", + "error_title": "Não é possível ler o arquivo de backup", + "error_desc": "O arquivo de backup pode estar corrompido ou o link de importação expirou", + "invalid_desc": "O link de importação é inválido ou expirou", + "retry": "Tentar novamente", + "empty_title": "Nada para importar neste backup", + "empty_desc": "Este arquivo de backup não contém scripts ou assinaturas" + }, + "downloading_status_text": "Baixando. Recebidos {{bytes}}.", + "downloading_status_percent": "Baixando. Recebidos {{bytes}} / {{total}} ({{percent}}%).", + "page_load_failed": "Falha ao carregar a página de instalação", + "invalid_page": "Página inválida", + "from_legitimate_sources_warning": "Por favor, instale scripts de fontes legítimas! Scripts desconhecidos podem invadir sua privacidade ou realizar operações maliciosas.", + "referral_link_title": "Link de indicação", + "ads_title": "Anúncios", + "payment_title": "Pagamento", + "miner_title": "Mineração", + "membership_title": "Recursos para membros", + "tracking_title": "Rastreamento", + "referral_link_description": "Este script modifica ou redireciona para o link de indicação do autor", + "ads_description": "Este script insere anúncios nas páginas que você visita", + "payment_description": "Este script requer pagamento para ser usado corretamente", + "miner_description": "Este script realiza atividades de mineração", + "membership_description": "Este script requer registro como membro para ser usado corretamente", + "tracking_description": "Este script rastreia suas informações de usuário", + "script_info_load_failed": "Falha ao carregar informações do script", + "btn_restore": "Restaurar script", + "btn_restore_update": "Restaurar e atualizar script", + "in_trash_hint": "Este script está na lixeira. Ao instalá-lo, ele será restaurado e seus dados existentes serão mantidos." +} diff --git a/src/locales/pt-BR/logs.json b/src/locales/pt-BR/logs.json new file mode 100644 index 000000000..135264ae0 --- /dev/null +++ b/src/locales/pt-BR/logs.json @@ -0,0 +1,59 @@ +{ + "log_title": "Logs de execução", + "last_5_minutes": "Últimos 5 minutos", + "last_15_minutes": "Últimos 15 minutos", + "last_30_minutes": "Últimos 30 minutos", + "last_1_hour": "Última hora", + "last_3_hours": "Últimas 3 horas", + "last_6_hours": "Últimas 6 horas", + "last_12_hours": "Últimas 12 horas", + "last_24_hours": "Últimas 24 horas", + "last_7_days": "Últimos 7 dias", + "query": "Consulta", + "labels": "Rótulos", + "search_regex": "Pesquisar (suporta Regex)", + "clean_schedule": "Limpar automaticamente logs mais antigos que", + "days_ago_logs": "dias", + "delete_completed": "Exclusão concluída", + "delete_current_logs": "Excluir logs atuais", + "clear_completed": "Limpeza concluída", + "clear_logs": "Limpar logs", + "now": "Agora", + "last_updated": "Última atualização", + "runtime": "Tempo de execução", + "advanced": "Avançado", + "label_filter": "Filtro de rótulo", + "add_label": "Adicionar rótulo", + "back_to_top": "Voltar ao topo", + "refresh": "Atualizar", + "all_levels": "Todos", + "total_count": "{{count}} no total", + "filtered_count": "{{count}} filtrados", + "clear_logs_confirm": "Limpar todos os logs? Esta ação não pode ser desfeita.", + "no_logs": "Nenhum log", + "refresh_off": "Desligado", + "interval_5s": "5s", + "interval_10s": "10s", + "interval_30s": "30s", + "interval_1m": "1 min", + "interval_5m": "5 min", + "quick_range": "Intervalos rápidos", + "absolute_range": "Intervalo absoluto", + "from_start": "De (início)", + "to_end": "Até (fim)", + "apply_range": "Aplicar intervalo", + "auto_refresh_hint": "Quando o fim é definido como \"Agora\", a atualização automática continua buscando os logs mais recentes.", + "group_minutes": "Minutos", + "group_hours": "Horas", + "group_days": "Dias", + "weekdays_short": "Dom,Seg,Ter,Qua,Qui,Sex,Sáb", + "year_month": "{{month}}/{{year}}", + "time": "Horário", + "prev_month": "Mês anterior", + "next_month": "Próximo mês", + "live": "Em tempo real", + "total_logs": "Foram encontrados {{length}} logs no total", + "filtered_logs": "{{length}} logs após a filtragem", + "enter_filter_conditions": "Insira as condições de filtro para a consulta", + "custom_range": "Intervalo personalizado" +} diff --git a/src/locales/pt-BR/permission.json b/src/locales/pt-BR/permission.json new file mode 100644 index 000000000..0824328ab --- /dev/null +++ b/src/locales/pt-BR/permission.json @@ -0,0 +1,39 @@ +{ + "permission": "Permissão", + "permission_value": "Valor da permissão", + "allow": "Permitir", + "permission_management": "Gerenciamento de permissões", + "script_accessing_cross_origin_resource": "O script está tentando acessar um recurso entre origens", + "confirm_operation_description": "Por favor, confirme se você permite que o script execute esta operação. O script também pode adicionar a tag @connect para ignorar esta opção.", + "request_domain": "Domínio da requisição", + "request_url": "URL da requisição", + "access_cookie_content": "O script está tentando acessar o conteúdo dos cookies do site", + "confirm_script_operation": "Por favor, confirme se você permite que o script execute esta operação. Cookies contêm dados importantes do usuário, portanto, conceda acesso apenas a scripts confiáveis.", + "cookie_domain": "Domínio do cookie", + "script_operation_title": "O script está tentando acessar o armazenamento de sincronização de scripts", + "script_operation_description": "Por favor, confirme se você permite que o script execute esta operação. Se permitido, o script poderá acessar o espaço de armazenamento que você configurou e criar um diretório app/${dir} dentro dele.", + "script_permission_content": "Script", + "extension_site_access_title": "O ScriptCat precisa de acesso ao site", + "extension_site_access_description": "Conceda acesso do navegador a esta origem para que o ScriptCat possa realizar a solicitação. Isso altera a configuração de acesso ao site da extensão.", + "extension_site_access_content": "Site", + "request_permission": "Solicitar permissão", + "user_script_type": "Script de usuário", + "auth_duration": "Duração da autorização", + "duration_once": "Apenas uma vez", + "duration_temporary": "Temporária", + "duration_permanent": "Permanente", + "apply_to_all_domains": "Aplicar a todos os domínios solicitados", + "apply_to_all_domains_desc": "Aplica-se a todas as solicitações deste script (curinga)", + "allow_action": "Permitir", + "deny_action": "Negar", + "ignore_action": "Ignorar", + "cancel_action": "Cancelar", + "loading_confirm": "Carregando solicitação de autorização…", + "cookie_warning_title": "Permissão altamente sensível", + "cookie_warning_desc": "Cookies contêm dados sensíveis, como o estado de login. Autorize apenas scripts confiáveis.", + "confirm_expired_title": "A solicitação de autorização expirou", + "confirm_expired_desc": "Esta solicitação de autorização expirou ou já foi tratada. Por favor, retorne à página e acione-a novamente.", + "auto_close_in": "A janela fechará automaticamente em {{second}} s", + "permission_cors": "Entre origens (CORS)", + "permission_cookie": "Gerenciar cookies" +} diff --git a/src/locales/pt-BR/popup.json b/src/locales/pt-BR/popup.json new file mode 100644 index 000000000..ee33dcc57 --- /dev/null +++ b/src/locales/pt-BR/popup.json @@ -0,0 +1,27 @@ +{ + "new_version_available": "Nova versão disponível", + "current_page_scripts": "Scripts em execução na página atual", + "enabled_background_scripts": "Scripts em segundo plano ativados e em execução", + "develop_mode_guide": "O 'Modo de Desenvolvedor' não está ativado, então os scripts não podem ser executados corretamente. 👉clique para saber como ativar", + "lower_version_browser_guide": "Seu navegador está muito desatualizado, então os scripts não podem ser executados corretamente. 👉Clique aqui para saber mais", + "click_to_reload": "👉Clique para recarregar", + "page_in_blacklist": "A página atual está na lista de bloqueio, não é possível usar scripts", + "ext_update_notification": "Extensão ScriptCat atualizada", + "ext_update_notification_desc": "Versão atual: {{version}}, por favor, veja o log de atualizações para mais detalhes", + "script_menu_display": "Menu criado do script", + "badge_type_none": "Não exibir", + "badge_type_run_count": "Contagem de execuções", + "badge_type_script_count": "Contagem de scripts", + "script_menu": "Menu de scripts", + "display_right_click_menu": "Exibir menu de contexto", + "display_right_click_menu_desc": "Exibe o menu de scripts no menu de contexto do navegador.", + "expand_count": "Limite de itens visíveis", + "auto_collapse_when_exceeds": "Recolher automaticamente quando exceder este número", + "allow_user_script_guide": "A opção 'Permitir Scripts de Usuário' não está ativada, então os scripts não podem ser executados corretamente. 👉clique para saber como ativar", + "request_permission": "Solicitar permissão", + "show_more_scripts": "+{{count}} scripts", + "use_on_mobile": "Use o ScriptCat no celular", + "scan_qr_to_install": "Escaneie o QR code para instalar o ScriptCat no seu celular", + "menu_expand_num_before": "Itens do menu acima de", + "menu_expand_num_after": "serão ocultados." +} diff --git a/src/locales/pt-BR/script.json b/src/locales/pt-BR/script.json new file mode 100644 index 000000000..252ac11bc --- /dev/null +++ b/src/locales/pt-BR/script.json @@ -0,0 +1,115 @@ +{ + "create_user_script": "Criar script de usuário", + "create_background_script": "Criar script em segundo plano", + "create_scheduled_script": "Criar script agendado", + "create_script": "Criar script", + "installed_scripts": "Scripts instalados", + "nav_scripts": "Scripts", + "subscribe": "Assinaturas", + "subscribe_scripts_count": "{{count}} scripts", + "enter_subscribe_name": "Por favor, insira o nome da assinatura", + "subscribe_url": "URL da assinatura", + "confirm_delete_subscription": "Tem certeza de que deseja excluir esta assinatura? Os scripts relacionados também serão excluídos.", + "list": {}, + "apply_to_run_status": "Sites / status de execução", + "running": "Em execução", + "source_subscribe_link": "Link da assinatura", + "source_local_script": "Script local", + "source_script_link": "Link do script", + "confirm_delete_scripts_content": "Tem certeza de que deseja excluir os {{count}} scripts selecionados? Esta ação não pode ser desfeita.", + "confirm_delete_scripts_trash_content": "Tem certeza de que deseja excluir os {{count}} scripts selecionados? Eles serão movidos para a lixeira e poderão ser restaurados a qualquer momento.", + "confirm_delete_script_content": "Tem certeza de que deseja excluir o script \"{{name}}\"? Esta ação não pode ser desfeita.", + "confirm_delete_script_trash_content": "Tem certeza de que deseja excluir o script \"{{name}}\"? Ele será movido para a lixeira e poderá ser restaurado a qualquer momento.", + "delete_failed": "Falha na exclusão", + "checking_for_updates": "Verificando atualizações...", + "new_version_available": "Nova versão disponível", + "latest_version": "Já está na versão mais recente", + "update_check_failed": "Falha na verificação de atualização", + "operation_failed": "A operação falhou", + "scripts_pinned_to_top": "O script selecionado foi fixado", + "homepage": "Página do script", + "script_total_runs": "O script foi executado {{runNum}} vezes, {{runNumByIframe}} vezes em iframes", + "script_total_runs_single": "O script foi executado {{runNum}} vezes", + "script_disabled": "O script não está ativado", + "cron_oncetype": { + "minute": "{{next}} (executa a cada minuto)", + "hour": "{{next}} (executa a cada hora)", + "day": "{{next}} (executa todo dia)", + "month": "{{next}} (executa todo mês)", + "week": "{{next}} (executa toda semana)" + }, + "cron_invalid_expr": "Expressão cron inválida", + "background_script": "Script em segundo plano", + "scheduled_script": "Script agendado", + "next_run": "Próxima execução", + "background_script_tooltip": "Script em segundo plano. É executado em segundo plano quando ativado.", + "scheduled_script_tooltip": "Script agendado. Executa automaticamente no horário configurado.", + "search_scripts": "Buscar script", + "script_list": { + "sidebar": { + "stopped": "Parado", + "all": "Todos os scripts", + "normal_script": "Script normal", + "status": "Status" + } + }, + "tags": "Tags", + "input_tags_placeholder": "Digite as tags, pressione Enter para confirmar", + "error_metadata_invalid": "Bloco de metadados inválido", + "error_script_name_required": "O nome do script é obrigatório", + "error_script_namespace_required": "O @namespace do script é obrigatório", + "error_cron_invalid": "Expressão cron inválida: {{expr}}", + "error_script_type_mismatch": "Incompatibilidade de tipo de script: não é possível converter entre scripts normais e scripts em segundo plano", + "error_old_script_code_missing": "Código do script anterior não encontrado", + "error_subscribe_name_required": "O nome da assinatura é obrigatório", + "error_grant_conflict": "@grant declara 'none' e também uma API GM", + "error_metadata_line_duplicated": "Existem declarações duplicadas nos metadados.", + "create_group": "Criar", + "import_group": "Importar", + "import_local_script": "Importar script local", + "link_import": "Importar de URL", + "import_skill": "Importar Skill", + "link_import_desc": "Cole as URLs do script ou assinatura, uma por linha", + "link_import_placeholder": "https://example.com/script.user.js", + "link_import_hint": "Suporta URLs de scripts de usuário, assinaturas ou Skills", + "not_a_valid_script": "Não é um script de usuário ou SkillScript válido", + "import_done": "Importação concluída: {{success}} com êxito · {{fail}} com falha", + "drop_to_install": "Arraste scripts ou Skills aqui para instalar", + "drop_to_install_hint": "Arraste scripts de usuário ou assinaturas (.js) e pacotes de Skill (.zip)", + "trash_tab": "Lixeira", + "tab_installed": "Instalados", + "trash_empty_title": "A lixeira está vazia", + "trash_empty_desc": "Os scripts excluídos permanecem aqui por {{days}} dias e podem ser restaurados a qualquer momento durante esse período", + "trash_empty_desc_never": "Os scripts excluídos permanecem aqui até serem excluídos permanentemente", + "trash_hint": "Scripts na lixeira não serão executados · Limpeza automática após {{days}} dias", + "trash_hint_never": "Scripts na lixeira não serão executados · Sem limpeza automática", + "trash_hint_disabled": "Lixeira desativada · Scripts recém-excluídos são removidos permanentemente de imediato", + "trash_search_placeholder": "Buscar scripts excluídos", + "trash_col_name": "Nome", + "trash_col_source": "Origem da exclusão", + "trash_col_time": "Excluído em", + "trash_col_expire": "Limpeza automática", + "trash_col_actions": "Ações", + "trash_source_local": "Excluído localmente", + "trash_source_other_device": "Outro dispositivo", + "trash_source_subscribe": "Assinatura", + "trash_source_other": "Outra", + "trash_filter_all": "Todos", + "trash_expire_in": "Em {{days}} dias", + "trash_expire_today": "Hoje", + "trash_restore": "Restaurar", + "trash_purge": "Excluir permanentemente", + "trash_empty_all": "Esvaziar lixeira", + "trash_restore_success": "Scripts restaurados: {{count}}", + "trash_restore_conflict": "Já existe um script chamado \"{{name}}\"; não é possível restaurá-lo", + "trash_purge_success": "Scripts excluídos permanentemente: {{count}}", + "trash_purge_one_confirm": "Isso excluirá permanentemente \"{{name}}\", juntamente com os dados armazenados, os recursos baixados e as permissões concedidas. Esta ação não pode ser desfeita.", + "trash_purge_confirm_title": "Esvaziar a lixeira?", + "trash_purge_confirm_body": "Isso excluirá permanentemente os scripts da lixeira ({{count}}), juntamente com os dados armazenados, os recursos baixados e as permissões concedidas.", + "trash_purge_confirm_warn": "Esta ação não pode ser desfeita", + "trash_moved_single": "Movido para a lixeira", + "trash_moved_batch": "Scripts movidos para a lixeira: {{count}}", + "trash_undo": "Desfazer", + "trash_undo_success": "Restaurado", + "trash_undo_failed": "Falha ao restaurar" +} diff --git a/src/locales/pt-BR/settings.json b/src/locales/pt-BR/settings.json new file mode 100644 index 000000000..f1d30d1ef --- /dev/null +++ b/src/locales/pt-BR/settings.json @@ -0,0 +1,140 @@ +{ + "general": "Geral", + "language": "Idioma", + "help_translate": "Ajude-nos a traduzir", + "script_sync": "Sincronização de scripts", + "sync_delete": "Sincronizar exclusões", + "sync_delete_desc": "Quando ativado, os scripts serão marcados como excluídos ao serem removidos, e outros dispositivos detectarão esse status e excluirão o script. Quando desativado, os scripts serão excluídos diretamente do armazenamento local e na nuvem, o que pode causar problemas de sincronização repetida se vários dispositivos estiverem em uso.", + "enable_script_sync_to": "Ativar sincronização de scripts para", + "never": "Nunca", + "6_hours": "6 horas", + "12_hours": "12 horas", + "every_day": "Todos os dias", + "every_week": "Toda semana", + "update_disabled_scripts": "Atualizar scripts desativados", + "silent_update_non_critical_changes": "Atualizar silenciosamente alterações não críticas", + "enable_eslint": "Ativar ESLint", + "eslint_rules": "Regras do ESLint", + "custom_eslint_rules_config": "Configuração personalizada de regras do ESLint (formato JSON)", + "enter_eslint_rules": "Insira as regras do ESLint. Você pode baixar uma configuração de https://eslint.org/play/", + "language_change_tip": "Idioma alterado com sucesso", + "backup": "Backup", + "local": "Local", + "export_file": "Exportar arquivo", + "import_file": "Importar arquivo", + "cloud": "Nuvem", + "backup_to": "Fazer backup para", + "preparing_backup": "Preparando backup para a nuvem", + "backup_success": "Backup realizado com sucesso", + "backup_failed": "Falha no backup", + "no_backup_files": "Nenhum arquivo de backup", + "backup_list": "Lista de backups", + "open_backup_dir": "Abrir diretório de backup", + "confirm_delete_backup_file": "Confirmar exclusão do arquivo de backup", + "backup_strategy": "Estratégia de backup", + "under_construction": "Em construção", + "sync_system_connect_failed": "Falha na conexão do sistema de sincronização", + "sync_system_closed": "Sincronização desativada", + "sync_system_closed_description": "A sincronização está desativada, por favor, configure novamente", + "export_success": "Exportação bem-sucedida", + "get_backup_dir_url_failed": "Falha ao obter o endereço do diretório de backup", + "get_backup_files_failed": "Falha ao buscar os backups", + "baidu_netdisk": "Baidu Netdisk", + "netdisk_unbind": "Desvincular {{provider}}", + "netdisk_unbind_confirm": "Desvincular a conta {{provider}}?", + "netdisk_unbind_success": "Conta {{provider}} desvinculada", + "netdisk_unbind_error": "Falha ao desvincular a conta {{provider}}", + "save_only_current_group": "Salvar apenas para o grupo atual", + "security": "Segurança", + "blacklist_pages": "Páginas bloqueadas", + "blacklist_placeholder": "Impeça o ScriptCat de executar scripts em páginas como\nhttps://*.example.com", + "expression_format_error": "Erro no formato da expressão de condição", + "migration_confirm_message": "Tentar novamente a migração do mecanismo de armazenamento modificará os dados existentes. Confirme. Consulte: https://docs.scriptcat.org/docs/change/v0.17/", + "retry_migration": "Tentar novamente a migração do motor de armazenamento", + "sync_status": "Status da sincronização", + "interface_settings": "Interface", + "select_interface_language": "Selecione o idioma de exibição da interface", + "extension_icon_badge": "Indicador do ícone da extensão", + "display_type": "Tipo de exibição", + "extension_icon_badge_type": "Tipo de número exibido no ícone da extensão", + "background_color": "Cor de fundo", + "badge_background_color_desc": "Cor de fundo do indicador", + "text_color": "Cor do texto", + "badge_text_color_desc": "Cor do texto do indicador", + "badge_type_none": "Não exibir", + "badge_type_run_count": "Contagem de execuções", + "badge_type_script_count": "Contagem de scripts", + "script_menu": "Menu de scripts", + "display_right_click_menu": "Exibir no menu de contexto", + "display_right_click_menu_desc": "Exibe o menu de scripts no menu de contexto do navegador", + "expand_count": "Limite de itens visíveis", + "auto_collapse_when_exceeds": "Recolher automaticamente quando exceder este número", + "popup_layout": "Layout do popup", + "compact_popup_layout": "Layout compacto do popup", + "compact_popup_layout_desc": "Reduzir o espaçamento entre as seções do popup e as linhas de scripts", + "script_update_check_frequency": "Frequência de verificação de atualização de scripts", + "script_auto_update_frequency": "Frequência de verificação automática de atualização de scripts", + "control_script_update_behavior": "Controlar o comportamento de atualização de scripts", + "blacklist_pages_desc": "Impedir que scripts sejam executados nas páginas especificadas, com suporte a curingas", + "development_tools": "Ferramentas de desenvolvimento", + "check_script_code_quality": "Verificar a qualidade e os erros do código do script", + "script_run_env": { + "title": "Ambiente de execução", + "all": "Todas as abas", + "normal-tabs": "Abas normais", + "incognito-tabs": "Abas anônimas" + }, + "script_run_at": {}, + "script_setting": { + "default": "padrão" + }, + "notification": { + "script_sync_delete": "Sincronizar exclusão de script", + "script_sync_delete_desc": "O script {{scriptName}} foi excluído", + "script_sync_conflict": "Conflito de sincronização na nuvem", + "script_sync_conflict_desc": "As versões local e na nuvem de {{scriptNames}} foram modificadas. A sincronização do script está pausada; resolva o conflito manualmente", + "subscribe_update": "A assinatura {{subscribeName}} foi atualizada", + "subscribe_update_desc": "Novos scripts: {{newScripts}}\nScripts excluídos: {{deletedScripts}}" + }, + "enable_background": { + "title": "Ativar execução em segundo plano", + "description": "Quando ativado, o navegador continua em execução em segundo plano depois que você fecha todas as janelas, minimizando para a bandeja até que você o encerre manualmente. Isso permite que os scripts em segundo plano continuem em execução.", + "enable_failed": "Falha ao ativar", + "disable_failed": "Falha ao desativar", + "prompt_title": "Ativar execução em segundo plano?", + "prompt_description": "Este é um {{scriptType}}. Ativar a execução em segundo plano permite que o script continue em execução após o fechamento do navegador.", + "enable_now": "Ativar agora", + "maybe_later": "Talvez mais tarde", + "settings_hint": "Você pode alterar esta opção nas configurações a qualquer momento." + }, + "favicon_service": "Serviço de favicon", + "favicon_service_desc": "Escolha o serviço para buscar os ícones dos sites", + "favicon_service_scriptcat": "ScriptCat", + "favicon_service_google": "Google", + "favicon_service_duckduckgo": "DuckDuckGo", + "favicon_service_icon-horse": "Icon Horse", + "favicon_service_local": "Busca local", + "cloud_sync_account_verification": "Verificação da conta de sincronização na nuvem em andamento...", + "cloud_sync_verification_failed": "Falha na verificação da conta de sincronização na nuvem", + "trash_retention": "Período de retenção da lixeira", + "trash_retention_desc": "Por quanto tempo os scripts excluídos permanecem na lixeira antes de serem excluídos permanentemente de forma automática", + "trash_retention_7": "7 dias", + "trash_retention_30": "30 dias", + "trash_retention_90": "90 dias", + "trash_retention_never": "Nunca", + "trash_enabled": "Ativar lixeira", + "trash_enabled_desc": "Os scripts excluídos vão primeiro para a lixeira e podem ser restaurados a qualquer momento. Quando ela está desativada, excluir um script o remove permanentemente de imediato.", + "trash_retention_custom": "Personalizado", + "trash_retention_days_unit": "dias", + "sync_view_logs": "Ver logs", + "sync_now": "Sincronizar agora", + "sync_state_idle": "Sincronização funcionando corretamente", + "sync_last_at": "Última sincronização: {{time}}", + "sync_never": "Nenhuma sincronização ainda", + "sync_state_syncing": "Sincronizando…", + "sync_state_attention": "É necessário revisar a última sincronização", + "sync_state_attention_desc": "Scripts pausados por conflitos durante a sincronização: {{conflict}}. Abra os logs para revisar.", + "sync_state_overwrite_info": "Scripts sobrescritos durante a última sincronização: {{overwrite}}. Veja os logs para obter detalhes.", + "sync_state_error": "Sincronização pausada após falha", + "sync_state_failed_desc": "Scripts cuja sincronização falhou: {{failed}}. Abra os logs para ver os detalhes." +} diff --git a/src/locales/pt-BR/tools.json b/src/locales/pt-BR/tools.json new file mode 100644 index 000000000..cc927b549 --- /dev/null +++ b/src/locales/pt-BR/tools.json @@ -0,0 +1,18 @@ +{ + "development_tool": "Ferramenta de desenvolvimento", + "vscode_url": "URL do VSCode", + "auto_connect_vscode_service": "Conectar automaticamente ao serviço do VSCode", + "connect": "Conectar", + "connection_success": "Conexão bem-sucedida", + "connection_failed": "Falha na conexão", + "select_import_script": "Por favor, selecione o script para importar na nova página", + "import_error": "Erro de importação", + "pulling_data_from_cloud": "Obtendo dados da nuvem", + "pull_failed": "Falha ao obter dados", + "restore": "Restaurar", + "manual_download": "Faça o download manualmente se o download não iniciar", + "local_backup": "Backup local", + "cloud_backup": "Backup na nuvem", + "auto_backup": "Backup automático", + "data_migration": "Migração de dados" +} \ No newline at end of file