From 63209d6ed6b60c18b4018fbb89ff525b6dde2bad Mon Sep 17 00:00:00 2001 From: Ricardo Negreiros <75104283+httpmerak@users.noreply.github.com> Date: Thu, 20 Mar 2025 05:25:29 -0300 Subject: [PATCH] feat: Add Brazilian Portuguese language --- locales/de.json | 3 +- locales/fr.json | 3 +- locales/nl.json | 3 +- locales/pt.json | 382 +++++++++++++++++++++++++++++++++++++++++++++ locales/vi.json | 3 +- locales/zh_cn.json | 3 +- locales/zh_tw.json | 3 +- logo.py | 2 +- main.py | 4 + 9 files changed, 399 insertions(+), 7 deletions(-) create mode 100644 locales/pt.json diff --git a/locales/de.json b/locales/de.json index beea12c..ec0dbcb 100644 --- a/locales/de.json +++ b/locales/de.json @@ -25,7 +25,8 @@ "vi": "Tiếng Việt", "nl": "Nederlands", "de": "Deutsch", - "fr": "Français" + "fr": "Français", + "pt": "Brazilian Portuguese" }, "quit_cursor": { "start": "Beginne Cursor zu Beenden", diff --git a/locales/fr.json b/locales/fr.json index e40c889..ac279d2 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -25,7 +25,8 @@ "vi": "Tiếng Việt", "nl": "Nederlands", "de": "Deutsch", - "fr": "Français" + "fr": "Français", + "pt": "Brazilian Portuguese" }, "quit_cursor": { "start": "Début de la Fermeture de Cursor", diff --git a/locales/nl.json b/locales/nl.json index 8dc4821..cff049b 100644 --- a/locales/nl.json +++ b/locales/nl.json @@ -25,7 +25,8 @@ "vi": "Tiếng Việt", "nl": "Nederlands", "de": "Deutsch", - "fr": "Français" + "fr": "Français", + "pt": "Brazilian Portuguese" }, "quit_cursor": { "start": "Start met afsluiten van Cursor", diff --git a/locales/pt.json b/locales/pt.json new file mode 100644 index 0000000..73624b2 --- /dev/null +++ b/locales/pt.json @@ -0,0 +1,382 @@ +{ + "menu": { + "title": "Opções Disponíveis", + "exit": "Sair do Programa", + "reset": "Redefinir ID da Máquina", + "register": "Registrar Nova Conta no Cursor", + "register_google": "Registrar com Conta do Google", + "register_github": "Registrar com Conta do GitHub", + "register_manual": "Registrar Cursor com E-mail Personalizado", + "quit": "Fechar Cursor", + "select_language": "Alterar Idioma", + "input_choice": "Por favor, insira sua escolha ({choices})", + "invalid_choice": "Seleção inválida. Insira um número de {choices}", + "program_terminated": "Programa encerrado pelo usuário", + "error_occurred": "Ocorreu um erro: {error}. Por favor, tente novamente", + "press_enter": "Pressione Enter para Sair", + "disable_auto_update": "Desativar Atualização Automática do Cursor", + "lifetime_access_enabled": "ACESSO VITALÍCIO HABILITADO", + "totally_reset": "Redefinir Cursor Completamente" + }, + "languages": { + "en": "Inglês", + "zh_cn": "Chinês Simplificado", + "zh_tw": "Chinês Tradicional", + "vi": "Vietnamita", + "nl": "Holandês", + "de": "Alemão", + "fr": "Francês", + "pt": "Português do Brasil" + }, + "quit_cursor": { + "start": "Iniciando fechamento do Cursor", + "no_process": "Nenhum processo do Cursor em execução", + "terminating": "Encerrando processo {pid}", + "waiting": "Aguardando o processo ser finalizado", + "success": "Todos os processos do Cursor foram encerrados", + "timeout": "Tempo limite do processo: {pids}", + "error": "Ocorreu um erro: {error}" + }, + "reset": { + "title": "Ferramenta de Redefinição de ID da Máquina", + "checking": "Verificando arquivo de configuração", + "not_found": "Arquivo de configuração não encontrado", + "no_permission": "Não é possível ler ou escrever no arquivo de configuração. Verifique as permissões do arquivo", + "reading": "Lendo configuração atual", + "creating_backup": "Criando backup da configuração", + "backup_exists": "Arquivo de backup já existe, pulando etapa de backup", + "generating": "Gerando novo ID da máquina", + "saving_json": "Salvando nova configuração no JSON", + "success": "ID da Máquina redefinido com sucesso", + "new_id": "Novo ID da Máquina", + "permission_error": "Erro de permissão: {error}", + "run_as_admin": "Tente executar este programa como Administrador", + "process_error": "Erro no processo de redefinição: {error}", + "updating_sqlite": "Atualizando banco de dados SQLite", + "updating_pair": "Atualizando chave-valor", + "sqlite_success": "Banco de dados SQLite atualizado com sucesso", + "sqlite_error": "Falha na atualização do banco de dados SQLite: {error}", + "press_enter": "Pressione Enter para sair", + "unsupported_os": "Sistema operacional não suportado: {os}", + "linux_path_not_found": "Caminho do Linux não encontrado", + "updating_system_ids": "Atualizando IDs do sistema", + "system_ids_updated": "IDs do sistema atualizados com sucesso", + "system_ids_update_failed": "Falha na atualização dos IDs do sistema: {error}", + "windows_guid_updated": "GUID do Windows atualizado com sucesso", + "windows_permission_denied": "Permissão negada no Windows", + "windows_guid_update_failed": "Falha na atualização do GUID do Windows", + "macos_uuid_updated": "UUID do macOS atualizado com sucesso", + "plutil_command_failed": "Falha no comando plutil", + "start_patching": "Iniciando correção de getMachineId", + "macos_uuid_update_failed": "Falha na atualização do UUID do macOS", + "current_version": "Versão atual do Cursor: {version}", + "patch_completed": "Correção de getMachineId concluída", + "patch_failed": "Falha na correção de getMachineId: {error}", + "version_check_passed": "Verificação de versão do Cursor aprovada", + "file_modified": "Arquivo modificado", + "version_less_than_0_45": "Versão do Cursor < 0.45.0, pulando correção de getMachineId", + "detecting_version": "Detectando versão do Cursor", + "patching_getmachineid": "Corrigindo getMachineId", + "version_greater_than_0_45": "Versão do Cursor >= 0.45.0, corrigindo getMachineId", + "permission_denied": "Permissão negada: {error}", + "backup_created": "Backup criado", + "update_success": "Atualização concluída com sucesso", + "update_failed": "Falha na atualização: {error}", + "windows_machine_guid_updated": "GUID da máquina do Windows atualizado com sucesso", + "reading_package_json": "Lendo package.json {path}", + "invalid_json_object": "Objeto JSON inválido", + "no_version_field": "Campo de versão não encontrado no package.json", + "version_field_empty": "Campo de versão está vazio", + "invalid_version_format": "Formato de versão inválido: {version}", + "found_version": "Versão encontrada: {version}", + "version_parse_error": "Erro ao analisar versão: {error}", + "package_not_found": "Package.json não encontrado: {path}", + "check_version_failed": "Falha ao verificar versão: {error}", + "stack_trace": "Rastreamento de pilha", + "version_too_low": "Versão do Cursor muito baixa: {version} < 0.45.0" + }, + "register": { + "title": "Ferramenta de Registro do Cursor", + "start": "Iniciando o processo de registro...", + "handling_turnstile": "Processando verificação de segurança...", + "retry_verification": "Tentando novamente a verificação...", + "detect_turnstile": "Verificando validação de segurança...", + "verification_success": "Verificação de segurança bem-sucedida", + "starting_browser": "Abrindo navegador...", + "form_success": "Formulário enviado com sucesso", + "browser_started": "Navegador aberto com sucesso", + "waiting_for_second_verification": "Aguardando verificação por e-mail...", + "waiting_for_verification_code": "Aguardando código de verificação...", + "password_success": "Senha definida com sucesso", + "password_error": "Não foi possível definir a senha: {error}. Por favor, tente novamente", + "waiting_for_page_load": "Carregando página...", + "first_verification_passed": "Verificação inicial bem-sucedida", + "mailbox": "Caixa de entrada de e-mail acessada com sucesso", + "register_start": "Iniciar Registro", + "form_submitted": "Formulário Enviado, Iniciando Verificação...", + "filling_form": "Preenchendo Formulário", + "visiting_url": "Visitando URL", + "basic_info": "Informações básicas enviadas", + "handle_turnstile": "Processar Turnstile", + "no_turnstile": "Turnstile Não Detectado", + "turnstile_passed": "Turnstile Passado", + "verification_start": "Iniciando Obtenção do Código de Verificação", + "verification_timeout": "Tempo Esgotado para Obter Código de Verificação", + "verification_not_found": "Nenhum Código de Verificação Encontrado", + "try_get_code": "Tentativa | {attempt} Obter Código de Verificação | Tempo Restante: {time}s", + "get_account": "Obtendo Informações da Conta", + "get_token": "Obtendo Token da Sessão do Cursor", + "token_success": "Token Obtido com Sucesso", + "token_attempt": "Tentativa | {attempt} de obter o Token | Tentando novamente em {time}s", + "token_max_attempts": "Número máximo de tentativas atingido ({max}) | Falha ao obter o Token", + "token_failed": "Falha ao Obter Token: {error}", + "account_error": "Falha ao Obter Informações da Conta: {error}", + "press_enter": "Pressione Enter para sair", + "browser_start": "Iniciando Navegador", + "open_mailbox": "Abrindo Página da Caixa de Entrada", + "email_error": "Falha ao obter endereço de e-mail", + "setup_error": "Erro de configuração do e-mail: {error}", + "start_getting_verification_code": "Iniciando obtenção do código de verificação, tentará em 60s", + "get_verification_code_timeout": "Tempo Esgotado para Obter Código de Verificação", + "get_verification_code_success": "Código de Verificação Obtido com Sucesso", + "try_get_verification_code": "Tentativa | {attempt} Obter Código de Verificação | Tempo Restante: {remaining_time}s", + "verification_code_filled": "Código de Verificação Preenchido", + "login_success_and_jump_to_settings_page": "Login bem-sucedido, indo para a página de configurações", + "detect_login_page": "Página de login detectada, iniciando login...", + "cursor_registration_completed": "Registro do Cursor Concluído!", + "set_password": "Definir Senha", + "basic_info_submitted": "Informações Básicas Enviadas", + "cursor_auth_info_updated": "Informações de Autenticação do Cursor Atualizadas", + "cursor_auth_info_update_failed": "Falha ao Atualizar Informações de Autenticação do Cursor", + "reset_machine_id": "Reiniciar ID da Máquina", + "account_info_saved": "Informações da Conta Salvas", + "save_account_info_failed": "Falha ao Salvar Informações da Conta", + "get_email_address": "Obtendo Endereço de E-mail", + "update_cursor_auth_info": "Atualizar Informações de Autenticação do Cursor", + "register_process_error": "Erro no Processo de Registro: {error}", + "setting_password": "Configurando Senha", + "manual_code_input": "Inserção Manual do Código", + "manual_email_input": "Inserção Manual de E-mail", + "password": "Senha", + "first_name": "Nome", + "last_name": "Sobrenome", + "exit_signal": "Sinal para Sair", + "email_address": "Endereço de E-mail", + "config_created": "Configuração Criada", + "verification_failed": "Falha na Verificação", + "verification_error": "Erro de Verificação: {error}", + "config_option_added": "Opção de Configuração Adicionada: {option}", + "config_updated": "Configuração Atualizada", + "password_submitted": "Senha Enviada", + "total_usage": "Uso Total: {usage}", + "setting_on_password": "Configurando Senha", + "getting_code": "Obtendo Código de Verificação, Tentará em 60s" + }, + "auth": { + "title": "Gerenciador de Autenticação do Cursor", + "checking_auth": "Verificando arquivo de autenticação", + "auth_not_found": "Arquivo de autenticação não encontrado", + "auth_file_error": "Erro no arquivo de autenticação: {error}", + "reading_auth": "Lendo arquivo de autenticação", + "updating_auth": "Atualizando informações de autenticação", + "auth_updated": "Informações de autenticação atualizadas com sucesso", + "auth_update_failed": "Falha ao atualizar informações de autenticação: {error}", + "auth_file_created": "Arquivo de autenticação criado", + "auth_file_create_failed": "Falha ao criar arquivo de autenticação: {error}", + "press_enter": "Pressione Enter para sair", + "reset_machine_id": "Redefinir ID da máquina", + "database_connection_closed": "Conexão com o banco de dados fechada", + "database_updated_successfully": "Banco de dados atualizado com sucesso", + "connected_to_database": "Conectado ao banco de dados", + "updating_pair": "Atualizando par chave-valor", + "db_not_found": "Arquivo do banco de dados não encontrado em: {path}", + "db_permission_error": "Não é possível acessar o arquivo do banco de dados. Verifique as permissões", + "db_connection_error": "Falha ao conectar ao banco de dados: {error}" + }, + "control": { + "generate_email": "Gerando novo e-mail", + "blocked_domain": "Domínio bloqueado", + "select_domain": "Selecionando domínio aleatório", + "copy_email": "Copiando endereço de e-mail", + "enter_mailbox": "Entrando na caixa de entrada", + "refresh_mailbox": "Atualizando caixa de entrada", + "check_verification": "Verificando código de verificação", + "verification_found": "Código de verificação encontrado", + "verification_not_found": "Nenhum código de verificação encontrado", + "browser_error": "Erro no controle do navegador: {error}", + "navigation_error": "Erro de navegação: {error}", + "email_copy_error": "Erro ao copiar e-mail: {error}", + "mailbox_error": "Erro na caixa de entrada: {error}", + "token_saved_to_file": "Token salvo em cursor_tokens.txt", + "navigate_to": "Navegando para {url}", + "generate_email_success": "E-mail gerado com sucesso", + "select_email_domain": "Selecionar domínio de e-mail", + "select_email_domain_success": "Domínio de e-mail selecionado com sucesso", + "get_email_name": "Obtendo nome do e-mail", + "get_email_name_success": "Nome do e-mail obtido com sucesso", + "get_email_address": "Obtendo endereço de e-mail", + "get_email_address_success": "Endereço de e-mail obtido com sucesso", + "enter_mailbox_success": "Entrada na caixa de entrada bem-sucedida", + "found_verification_code": "Código de verificação encontrado", + "get_cursor_session_token": "Obtendo token da sessão do Cursor", + "get_cursor_session_token_success": "Token da sessão do Cursor obtido com sucesso", + "get_cursor_session_token_failed": "Falha ao obter token da sessão do Cursor", + "save_token_failed": "Falha ao salvar o token", + "database_updated_successfully": "Banco de dados atualizado com sucesso", + "database_connection_closed": "Conexão com o banco de dados fechada", + "no_valid_verification_code": "Nenhum código de verificação válido" + }, + "email": { + "starting_browser": "Iniciando navegador", + "visiting_site": "Visitando domínios de e-mail", + "create_success": "E-mail criado com sucesso", + "create_failed": "Falha ao criar e-mail", + "create_error": "Erro ao criar e-mail: {error}", + "refreshing": "Atualizando e-mail", + "refresh_success": "E-mail atualizado com sucesso", + "refresh_error": "Erro ao atualizar e-mail: {error}", + "refresh_button_not_found": "Botão de atualização não encontrado", + "verification_found": "Verificação encontrada", + "verification_not_found": "Verificação não encontrada", + "verification_error": "Erro na verificação: {error}", + "verification_code_found": "Código de verificação encontrado", + "verification_code_not_found": "Código de verificação não encontrado", + "verification_code_error": "Erro no código de verificação: {error}", + "address": "Endereço de e-mail", + "all_domains_blocked": "Todos os domínios bloqueados, alternando serviço", + "no_available_domains_after_filtering": "Nenhum domínio disponível após filtragem", + "switching_service": "Alternando para o serviço {service}", + "domains_list_error": "Falha ao obter lista de domínios: {error}", + "failed_to_get_available_domains": "Falha ao obter domínios disponíveis", + "domains_excluded": "Domínios excluídos: {domains}", + "failed_to_create_account": "Falha ao criar conta", + "account_creation_error": "Erro na criação da conta: {error}", + "blocked_domains": "Domínios bloqueados: {domains}", + "blocked_domains_loaded": "Domínios bloqueados carregados: {count}", + "blocked_domains_loaded_error": "Erro ao carregar domínios bloqueados: {error}", + "blocked_domains_loaded_success": "Domínios bloqueados carregados com sucesso", + "blocked_domains_loaded_timeout": "Tempo esgotado ao carregar domínios bloqueados: {timeout}s", + "blocked_domains_loaded_timeout_error": "Erro de tempo esgotado ao carregar domínios bloqueados: {error}", + "available_domains_loaded": "Domínios disponíveis carregados: {count}", + "domains_filtered": "Domínios filtrados: {count}", + "trying_to_create_email": "Tentando criar e-mail: {email}", + "domain_blocked": "Domínio bloqueado: {domain}" + }, + "update": { + "title": "Desativar atualização automática do Cursor", + "disable_success": "Atualização automática desativada com sucesso", + "disable_failed": "Falha ao desativar atualização automática: {error}", + "press_enter": "Pressione Enter para sair", + "start_disable": "Iniciando desativação da atualização automática", + "killing_processes": "Finalizando processos", + "processes_killed": "Processos finalizados", + "removing_directory": "Removendo diretório", + "directory_removed": "Diretório removido", + "creating_block_file": "Criando arquivo de bloqueio", + "block_file_created": "Arquivo de bloqueio criado" + }, + "updater": { + "checking": "Verificando atualizações...", + "new_version_available": "Nova versão disponível! (Atual: {current}, Última: {latest})", + "updating": "Atualizando para a última versão. O programa será reiniciado automaticamente.", + "up_to_date": "Você está usando a versão mais recente.", + "check_failed": "Falha ao verificar atualizações: {error}", + "continue_anyway": "Continuando com a versão atual...", + "update_confirm": "Deseja atualizar para a última versão? (Y/n)", + "update_skipped": "Atualização ignorada.", + "invalid_choice": "Escolha inválida. Por favor, digite 'Y' ou 'n'.", + "development_version": "Versão de desenvolvimento {current} > {latest}", + "changelog_title": "Registro de mudanças" + }, + "totally_reset": { + "title": "Redefinir Cursor Completamente", + "checking_config": "Verificando Arquivo de Configuração", + "config_not_found": "Arquivo de Configuração Não Encontrado", + "no_permission": "Não é possível Ler ou Escrever o Arquivo de Configuração, Verifique as Permissões do Arquivo", + "reading_config": "Lendo Configuração Atual", + "creating_backup": "Criando Backup da Configuração", + "backup_exists": "Arquivo de Backup Já Existe, Pulando Etapa de Backup", + "generating_new_machine_id": "Gerando Novo ID da Máquina", + "saving_new_config": "Salvando Nova Configuração no JSON", + "success": "Cursor Redefinido com Sucesso", + "error": "Falha ao Redefinir Cursor: {error}", + "press_enter": "Pressione Enter para Sair", + "reset_machine_id": "Redefinir ID da Máquina", + "database_connection_closed": "Conexão com o Banco de Dados Fechada", + "database_updated_successfully": "Banco de Dados Atualizado com Sucesso", + "connected_to_database": "Conectado ao Banco de Dados", + "updating_pair": "Atualizando Par Chave-Valor", + "db_not_found": "Arquivo de banco de dados não encontrado em: {path}", + "db_permission_error": "Não é possível acessar o arquivo do banco de dados. Verifique as permissões", + "db_connection_error": "Falha ao conectar ao banco de dados: {error}", + "feature_title": "RECURSOS", + "feature_1": "Remoção completa das configurações e preferências do Cursor AI", + "feature_2": "Limpa todos os dados em cache, incluindo histórico e prompts de IA", + "feature_3": "Redefine o ID da máquina para contornar a detecção de período de teste", + "feature_4": "Cria novos identificadores de máquina aleatórios", + "feature_5": "Remove extensões e preferências personalizadas", + "feature_6": "Redefine informações de período de teste e dados de ativação", + "feature_7": "Varredura profunda por arquivos ocultos relacionados à licença e período de teste", + "feature_8": "Preserva com segurança arquivos e aplicativos não relacionados ao Cursor", + "feature_9": "Compatível com Windows, macOS e Linux", + "disclaimer_title": "AVISO", + "disclaimer_1": "Esta ferramenta excluirá permanentemente todas as configurações,", + "disclaimer_2": "preferências e dados em cache do Cursor AI. Essa ação não pode ser desfeita.", + "disclaimer_3": "Seus arquivos de código NÃO serão afetados, e a ferramenta é projetada", + "disclaimer_4": "para atingir somente os arquivos do editor Cursor AI e mecanismos de detecção de teste.", + "disclaimer_5": "Outros aplicativos em seu sistema não serão afetados.", + "disclaimer_6": "Será necessário configurar o Cursor AI novamente após executar esta ferramenta.", + "disclaimer_7": "Use por sua conta e risco", + "confirm_title": "Tem certeza que deseja prosseguir?", + "confirm_1": "Esta ação excluirá todas as configurações do Cursor AI,", + "confirm_2": "preferências e dados em cache. Essa ação não pode ser desfeita.", + "confirm_3": "Seus arquivos de código NÃO serão afetados, e a ferramenta é projetada", + "confirm_4": "para atingir somente os arquivos do editor Cursor AI e mecanismos de detecção de teste.", + "confirm_5": "Outros aplicativos em seu sistema não serão afetados.", + "confirm_6": "Será necessário configurar o Cursor AI novamente após executar esta ferramenta.", + "confirm_7": "Use por sua conta e risco", + "invalid_choice": "Por favor, digite 'Y' ou 'n'", + "skipped_for_safety": "Ignorado por segurança (não relacionado ao Cursor): {path}", + "deleted": "Excluído: {path}", + "error_deleting": "Erro ao excluir {path}: {error}", + "not_found": "Arquivo não encontrado: {path}", + "resetting_machine_id": "Redefinindo identificadores da máquina para contornar a detecção de período de teste...", + "created_machine_id": "Novo ID da máquina criado: {path}", + "error_creating_machine_id": "Erro ao criar arquivo de ID da máquina {path}: {error}", + "error_searching": "Erro ao procurar arquivos em {path}: {error}", + "created_extended_trial_info": "Novas informações de período de teste criadas: {path}", + "error_creating_trial_info": "Erro ao criar arquivo de informações de teste {path}: {error}", + "resetting_cursor_ai_editor": "Redefinindo Editor Cursor AI... Por favor, aguarde.", + "reset_cancelled": "Redefinição cancelada. Saindo sem realizar alterações.", + "windows_machine_id_modification_skipped": "Modificação de ID da máquina no Windows ignorada: {error}", + "linux_machine_id_modification_skipped": "Modificação do machine-id do Linux ignorada: {error}", + "note_complete_machine_id_reset_may_require_running_as_administrator": "Nota: Redefinir totalmente o ID da máquina pode exigir a execução como administrador", + "note_complete_system_machine_id_reset_may_require_sudo_privileges": "Nota: Redefinir totalmente o machine-id do sistema pode exigir privilégios sudo", + "windows_registry_instructions": "📝 NOTA: Para uma redefinição completa no Windows, talvez você precise também limpar entradas do registro.", + "windows_registry_instructions_2": " Execute 'regedit', pesquise chaves contendo 'Cursor' ou 'CursorAI' em HKEY_CURRENT_USER\\Software\\ e exclua-as.\n", + "reset_log_1": "Cursor AI foi completamente redefinido e a detecção de teste foi contornada!", + "reset_log_2": "Por favor, reinicie o sistema para que as alterações tenham efeito.", + "reset_log_3": "Você precisará reinstalar o Cursor AI e deverá ter um novo período de teste disponível.", + "reset_log_4": "Para melhores resultados, considere também:", + "reset_log_5": "Utilizar um endereço de e-mail diferente ao registrar um novo período de teste", + "reset_log_6": "Se disponível, utilizar uma VPN para alterar seu endereço IP", + "reset_log_7": "Limpar cookies e cache do navegador antes de acessar o site do Cursor AI", + "reset_log_8": "Se os problemas persistirem, tente instalar o Cursor AI em outro local", + "reset_log_9": "Se encontrar problemas, abra uma issue no Github em https://github.com/yeongpin/cursor-free-vip/issues", + "unexpected_error": "Ocorreu um erro inesperado: {error}", + "report_issue": "Por favor, relate este problema no Github em https://github.com/yeongpin/cursor-free-vip/issues", + "keyboard_interrupt": "Processo interrompido pelo usuário. Saindo...", + "return_to_main_menu": "Retornando ao menu principal...", + "process_interrupted": "Processo interrompido. Saindo...", + "press_enter_to_return_to_main_menu": "Pressione Enter para retornar ao menu principal...", + "removing_known": "Removendo arquivos conhecidos de teste/licença", + "performing_deep_scan": "Realizando varredura profunda por arquivos adicionais de teste/licença", + "found_additional_potential_license_trial_files": "{count} arquivos adicionais de licença/teste potencialmente encontrados", + "checking_for_electron_localstorage_files": "Verificando arquivos localStorage do Electron", + "no_additional_license_trial_files_found_in_deep_scan": "Nenhum arquivo adicional de licença/teste encontrado na varredura profunda", + "removing_electron_localstorage_files": "Removendo arquivos localStorage do Electron", + "electron_localstorage_files_removed": "Arquivos localStorage do Electron removidos", + "electron_localstorage_files_removal_error": "Erro ao remover arquivos localStorage do Electron: {error}", + "removing_electron_localstorage_files_completed": "Remoção dos arquivos localStorage do Electron concluída" + } +} diff --git a/locales/vi.json b/locales/vi.json index f8917f8..a700ec2 100644 --- a/locales/vi.json +++ b/locales/vi.json @@ -23,7 +23,8 @@ "vi": "Tiếng Việt", "nl": "Dutch", "de": "Germa", - "fr": "French" + "fr": "French", + "pt": "Brazilian Portuguese" }, "quit_cursor": { "start": "Bắt Đầu Thoát Cursor", diff --git a/locales/zh_cn.json b/locales/zh_cn.json index ccfac40..aac3893 100644 --- a/locales/zh_cn.json +++ b/locales/zh_cn.json @@ -25,7 +25,8 @@ "vi": "Vietnamese", "nl": "Dutch", "de": "German", - "fr": "French" + "fr": "French", + "pt": "Brazilian Portuguese" }, "quit_cursor": { "start": "开始退出 Cursor", diff --git a/locales/zh_tw.json b/locales/zh_tw.json index 833aeea..1a71886 100644 --- a/locales/zh_tw.json +++ b/locales/zh_tw.json @@ -23,7 +23,8 @@ "vi": "Vietnamese", "nl": "Dutch", "de": "German", - "fr": "French" + "fr": "French", + "pt": "Brazilian Portuguese" }, "quit_cursor": { "start": "開始退出 Cursor", diff --git a/logo.py b/logo.py index 9c25a5b..7dcb255 100644 --- a/logo.py +++ b/logo.py @@ -30,7 +30,7 @@ CURSOR_LOGO = f""" Github: https://github.com/yeongpin/cursor-free-vip {Fore.RED} - Press 5 to change language | 按下 5 键切换语言 + Press 5 to change language | 按下 5 键切换语言 | Pressione 5 para alterar o idioma {Style.RESET_ALL} """ diff --git a/main.py b/main.py index 3ca82a4..ffd1437 100644 --- a/main.py +++ b/main.py @@ -139,6 +139,8 @@ class Translator: return 'de' elif system_locale.startswith('fr'): return 'fr' + elif system_locale.startswith('pt'): + return 'pt' @@ -156,6 +158,8 @@ class Translator: return 'de' elif 'fr' in env_lang: return 'fr' + elif 'pt' in env_lang: + return 'pt' return 'en' except: