style: keep status code descriptions and actions in English with clean spacing formatting

This commit is contained in:
Silas Brito
2026-07-13 21:23:12 -03:00
parent f01deebffb
commit ae410f40c6
2 changed files with 8373 additions and 8563 deletions
+12 -202
View File
@@ -28,195 +28,6 @@ def compile_status_codes_if_needed():
import pdfplumber
import re
PHRASE_TRANSLATIONS = {
"cannot connect on socket": "Não foi possível conectar ao socket",
"client connection refused": "Conexão com o cliente recusada",
"unable to allocate new media for backup, storage unit has none available": "Não foi possível alocar nova mídia para o backup; a unidade de armazenamento não tem nenhuma disponível",
"none of the requested files were backed up": "Nenhum dos arquivos solicitados foi salvo (backup falhou)",
"client/server handshaking failed": "Falha no handshake (aperto de mão) entre cliente e servidor",
"snapshot error encountered": "Erro de snapshot encontrado",
"disk is full": "O disco está cheio",
"file open failed": "Falha ao abrir o arquivo",
"file read failed": "Falha ao ler o arquivo",
"file write failed": "Falha ao gravar o arquivo",
"file close failed": "Falha ao fechar o arquivo",
"user backup failed": "Falha no backup solicitado pelo usuário",
"unimplemented feature": "Recurso não implementado",
"invalid command parameter": "Parâmetro de comando inválido",
"invalid command usage": "Uso de comando inválido",
"request timed out": "Tempo limite da requisição esgotado",
"system call failed": "Falha na chamada de sistema",
"permission denied": "Permissão negada",
"write open failed": "Falha ao abrir para gravação",
"read open failed": "Falha ao abrir para leitura",
"no storage units available": "Nenhuma unidade de armazenamento disponível",
"cannot connect to server": "Não foi possível conectar ao servidor",
"connection timed out": "Tempo limite de conexão esgotado",
"host is unreachable": "Host/Servidor de destino inacessível",
"network is unreachable": "Rede inacessível",
"bad file descriptor": "Descritor de arquivo inválido",
"no space left on device": "Sem espaço livre no dispositivo",
"broken pipe": "Pipe quebrado (conexão interrompida)",
"connection reset by peer": "Conexão redefinida pelo host de destino",
"address already in use": "Endereço já em uso",
"host is down": "O host de destino está desligado ou inacessível",
"too many open files": "Muitos arquivos abertos no sistema",
"file too large": "Arquivo muito grande",
"disk quota exceeded": "Cota de disco excedida",
"stale nfs file handle": "Manipulador de arquivo NFS obsoleto",
"directory not empty": "O diretório não está vazio",
"too many users": "Muitos usuários conectados",
"process limit reached": "Limite de processos atingido",
"operation canceled": "Operação cancelada",
"operation now in progress": "Operação em progresso",
"already in progress": "Já em progresso",
"bad message": "Mensagem inválida",
"identifier removed": "Identificador removido",
"no data available": "Nenhum dado disponível",
"device not configured": "Dispositivo não configurado",
"media not present": "Mídia não inserida",
"write protected": "Mídia protegida contra gravação",
"hardware error": "Erro de hardware",
"driver error": "Erro de driver de dispositivo",
"configuration error": "Erro de configuração",
"license key expired": "Chave de licença expirada",
"invalid license key": "Chave de licença inválida",
"no matching devices found": "Nenhum dispositivo correspondente encontrado",
"device busy": "Dispositivo ocupado",
"drive needs cleaning": "A unidade de fita precisa de limpeza",
"tape alert detected": "Alerta de fita detectado",
"robotic failure": "Falha na robótica (biblioteca de fitas)",
"robotic communication failed": "Falha na comunicação com a robótica",
"robotic device offline": "Dispositivo robótico offline",
"volume not found": "Volume não encontrado",
"volume in use": "Volume em uso",
"volume is read-only": "Volume configurado como somente leitura",
"cannot mount volume": "Não foi possível montar o volume",
"cannot unmount volume": "Não foi possível desmontar o volume",
"drive offline": "Unidade de drive offline",
"drive in use": "Unidade de drive em uso",
"drive not ready": "Unidade de drive não pronta",
"mount failed": "Falha na montagem",
"unmount failed": "Falha na desmontagem",
"positioning failed": "Falha no posicionamento da fita",
"rewind failed": "Falha ao rebobinar",
"unload failed": "Falha ao descarregar a fita",
"format failed": "Falha na formatação",
"database open failed": "Falha ao abrir banco de dados",
"database read failed": "Falha ao ler banco de dados",
"database write failed": "Falha ao gravar banco de dados",
"database close failed": "Falha ao fechar banco de dados",
"active backup already running": "Backup ativo já em execução para este cliente/política",
"the requested operation was successfully completed": "A operação solicitada foi concluída com sucesso",
"the requested operation was partially successful": "A operação solicitada foi parcialmente bem-sucedida",
"valid archive image produced, but no files deleted due to non-fatal problems": "Imagem de arquivo válida produzida, mas nenhum arquivo foi excluído devido a problemas não fatais",
"archive file removal failed": "Falha na remoção do arquivo de arquivamento",
"restore failed completely": "A restauração falhou completamente",
"the archive failed to backup the requested files": "O arquivamento falhou ao salvar os arquivos solicitados",
"unable to determine the status of rbak": "Incapaz de determinar o status do rbak",
"anecessary extension package is not installed or not configured properly": "Um pacote de extensão necessário não está instalado ou configurado corretamente",
"allocation failed": "Falha de alocação de memória",
"system call failed": "Falha na chamada de sistema",
"valid archive image produced but no files deleted due to nonfatal problems": "Imagem de arquivo válida produzida, mas nenhum arquivo foi excluído devido a problemas não fatais",
"can't connect to client": "Não foi possível conectar ao cliente",
"none of the requested connections were successful": "Nenhuma das conexões solicitadas foi bem-sucedida"
}
SENTENCE_TRANSLATIONS = {
"verify that bpcompatd, vnetd, and private branch exchange (pbx) are running.": "Verifique se os serviços bpcompatd, vnetd e Private Branch Exchange (PBX) estão em execução.",
"verify that the required extension product is installed and configured.": "Verifique se o produto de extensão requerido está instalado e configurado.",
"free up memory by terminating any unneeded processes that consume memory.": "Libere memória física encerrando quaisquer processos desnecessários em execução.",
"check the alllogentries and problems reports to determine the system call that failed.": "Verifique os relatórios de 'All Log Entries' (Todos os Logs) e 'Problems' (Problemas) para determinar qual chamada de sistema falhou.",
"if you want the path for the disk storage unit to reside in the root filesystem:": "Se você deseja que o caminho da unidade de armazenamento de disco resida no sistema de arquivos raiz:",
"check the netbackup problems report for clues on where and why the problem occurred.": "Consulte o relatório de Problemas do NetBackup para obter pistas sobre onde e por que o problema ocorreu.",
"check the netbackup problems report to determine the storage unit that is out of media.": "Verifique o relatório de Problemas do NetBackup para determinar qual unidade de armazenamento está sem mídia.",
"perform the following, as appropriate:": "Execute os seguintes passos conforme apropriado:",
"do the following, as appropriate:": "Execute os seguintes passos conforme apropriado:",
"ensure that the appropriate plug-in is configured in the web ui with the appropriate credentials.": "Certifique-se de que o plug-in correto está configurado no painel Web com as credenciais apropriadas.",
"try to ping the client from the server.": "Tente realizar um teste de ping bidirecional entre o servidor e o cliente.",
"resolve network communication problems.": "Resolva os problemas de comunicação de rede e liberação de portas.",
"no action is needed, unless a database was backed up": "Nenhuma ação é necessária, a menos que um banco de dados tenha sido copiado.",
"a file or a directory path is more than 1023 characters long.": "O caminho de um arquivo ou diretório possui mais de 1023 caracteres.",
"verify that you have permission to delete the files and that": "Verifique se você possui permissões de exclusão de arquivos aplicadas e que o atributo de somente leitura não está ativo.",
"verify that you have read access to the files.": "Verifique se o usuário executor possui permissões de acesso de leitura aos arquivos.",
"check for a new core file to see if rbak quit abnormally.": "Verifique por novos arquivos de dump (core dump) para analisar se o processo rbak terminou de forma anormal.",
"free up space on the disks where netbackup catalogs reside": "Libere espaço livre nos volumes de disco onde residem os catálogos do NetBackup e tente a operação novamente."
}
WORD_TRANSLATIONS = {
"cannot": "não é possível", "unable": "não foi possível", "failed": "falhou", "failure": "falha",
"connection": "conexão", "connect": "conectar", "refused": "recusada", "error": "erro", "client": "cliente",
"server": "servidor", "socket": "socket", "disk": "disco", "full": "cheio", "file": "arquivo",
"open": "abrir", "read": "ler", "write": "gravar", "close": "fechar", "media": "mídia",
"storage": "armazenamento", "unit": "unidade", "available": "disponível", "none": "nenhum",
"requested": "solicitado", "files": "arquivos", "backed": "salvo", "handshaking": "handshake",
"snapshot": "snapshot", "encountered": "encontrado", "invalid": "inválido", "parameter": "parâmetro",
"command": "comando", "usage": "uso", "timeout": "tempo limite esgotado", "database": "banco de dados",
"volume": "volume", "pool": "pool", "job": "job", "running": "executando", "restore": "restauração",
"delete": "excluir", "removal": "remoção", "user": "usuário", "permission": "permissão",
"denied": "negada", "directory": "diretório", "path": "caminho", "unimplemented": "não implementado",
"feature": "recurso", "empty": "vazio", "exceeded": "excedido", "limit": "limite", "device": "dispositivo",
"busy": "ocupado", "offline": "offline", "online": "online", "network": "rede", "timed": "esgotado",
"out": "fora", "verify": "verifique", "check": "verifique", "ensure": "garanta", "please": "por favor",
"resolving": "resolvendo", "problems": "problemas", "action": "ação", "recommended": "recomendada",
"the": "o", "and": "e", "or": "ou", "for": "para", "with": "com", "by": "por", "of": "de",
"is": "está", "are": "estão", "was": "foi", "were": "foram", "that": "que", "not": "não", "no": "não",
"an": "um", "a": "um", "following": "seguinte", "information": "informação", "applies": "aplica-se",
"only": "apenas", "using": "usando", "contact": "contate", "your": "seu", "increase": "aumentar",
"limit": "limite", "see": "veja", "quit": "sair", "abnormally": "anormalmente", "required": "requerido",
"product": "produto", "installed": "instalado", "configured": "configurado", "free": "liberar",
"memory": "memória", "terminating": "encerrando", "any": "qualquer", "unneeded": "desnecessário",
"processes": "processos", "all": "todos", "entries": "entradas", "reports": "relatórios",
"determine": "determinar", "want": "desejar", "reside": "residir", "root": "raiz", "filesystem": "sistema de arquivos",
"report": "relatório", "clues": "pistas", "where": "onde", "why": "por que", "problem": "problema",
"occurred": "ocorreu", "perform": "executar", "as": "como"
}
def translate_sentence(text):
if not text:
return ""
clean_txt = text.strip()
lower_txt = clean_txt.lower().replace(" ", " ")
lookup_txt = lower_txt.rstrip(".")
if lookup_txt in PHRASE_TRANSLATIONS:
res = PHRASE_TRANSLATIONS[lookup_txt]
if lower_txt.endswith("."):
res += "."
return res
if lookup_txt in SENTENCE_TRANSLATIONS:
res = SENTENCE_TRANSLATIONS[lookup_txt]
if lower_txt.endswith("."):
res += "."
return res
bullet_match = re.match(r'^([■•\-\*]\s*)(.*)', clean_txt)
if bullet_match:
bullet_symbol = bullet_match.group(1)
sub_text = bullet_match.group(2)
return bullet_symbol + translate_sentence(sub_text)
words = clean_txt.split()
translated_words = []
for w in words:
w_clean = re.sub(r'[^a-zA-Z\']', '', w).lower()
if w_clean in WORD_TRANSLATIONS:
trans = WORD_TRANSLATIONS[w_clean]
w_trans = w.lower().replace(w_clean, trans)
if w[0].isupper():
w_trans = w_trans.capitalize()
translated_words.append(w_trans)
else:
translated_words.append(w)
return " ".join(translated_words)
def translate_text(multiline_text):
if not multiline_text:
return ""
lines = multiline_text.splitlines()
translated_lines = [translate_sentence(line) for line in lines]
return "\n".join(translated_lines)
def clean_spacing(text):
if not text:
return ""
@@ -224,10 +35,10 @@ def compile_status_codes_if_needed():
def get_first_action(action_text):
if not action_text:
return "Nenhuma ação recomendada específica encontrada no manual."
return "No specific recommended action found in the manual."
lines = [line.strip() for line in action_text.splitlines() if line.strip()]
if not lines:
return "Nenhuma ação recomendada específica encontrada no manual."
return "No specific recommended action found in the manual."
bullets = ['', '-', '*', '']
first_bullet = None
for line in lines:
@@ -298,21 +109,20 @@ def compile_status_codes_if_needed():
lines = [line.strip() for line in action_full.splitlines() if line.strip()]
action_clean = "\n".join(lines)
desc_pt = translate_sentence(desc)
action_clean_pt = translate_text(action_clean)
first_action_eng = get_first_action(action_clean)
first_action_pt = translate_sentence(first_action_eng)
desc_eng = desc
action_clean_eng = action_clean
first_action_eng = get_first_action(action_clean_eng)
if desc_pt and desc_pt[0].islower():
desc_pt = desc_pt[0].upper() + desc_pt[1:]
if first_action_pt and first_action_pt[0].islower():
first_action_pt = first_action_pt[0].upper() + first_action_pt[1:]
if desc_eng and desc_eng[0].islower():
desc_eng = desc_eng[0].upper() + desc_eng[1:]
if first_action_eng and first_action_eng[0].islower():
first_action_eng = first_action_eng[0].upper() + first_action_eng[1:]
parsed[code_num] = {
"code": code_num,
"desc": desc_pt,
"first_action": first_action_pt,
"full_action": action_clean_pt
"desc": desc_eng,
"first_action": first_action_eng,
"full_action": action_clean_eng
}
with open(STATUS_CODES_FILE, "w", encoding="utf-8") as f: