diff --git a/SimpleLoader/Languages/LanguageManager.swift b/SimpleLoader/Languages/LanguageManager.swift index bd0eaef..da5ff69 100644 --- a/SimpleLoader/Languages/LanguageManager.swift +++ b/SimpleLoader/Languages/LanguageManager.swift @@ -33,7 +33,7 @@ class LanguageManager: ObservableObject { } func availableLanguages() -> [String] { - return ["en", "zh-Hans", "zh-Hant", "es", "it"] // 支持的语言列表 + return ["en", "zh-Hans", "zh-Hant", "es", "it", "pt-BR"] // 支持的语言列表 } func displayName(for language: String) -> String { @@ -43,6 +43,7 @@ class LanguageManager: ObservableObject { case "zh-Hant": return "繁体中文" case "es": return "Español" case "it": return "Italian" + case "pt-BR": return "Brazilian" default: return language } } diff --git a/SimpleLoader/Languages/pt-BR.lproj/Localizable.strings b/SimpleLoader/Languages/pt-BR.lproj/Localizable.strings new file mode 100644 index 0000000..9612d4e --- /dev/null +++ b/SimpleLoader/Languages/pt-BR.lproj/Localizable.strings @@ -0,0 +1,140 @@ +// +// Localizable_pt_br.strings +// SimpleLoader +// +// Created by laobamac on 2025/7/28. +// + +/* + Localizable.strings (Brazilian Potuguese) + SimpleLoader +*/ + +"app_title" = "SimpleLoader Instalador de Extensões do Sistema"; +"app_subtitle" = "Mescla KDK automaticamente e instala Kext/Bundle em /System/Library/Extensions"; +"installation_options" = "Opções de Instalação"; +"show_advanced" = "Mostrar Opções Avançadas"; +"hide_advanced" = "Ocultar Opções Avançadas"; +"force_overwrite" = "Forçar sobrescrever arquivos existentes"; +"backup_existing" = "Backup Kext/Framework existentes"; +"advanced_options" = "Opções Avançadas"; +"install_to_le" = "Instalar em /Library/Extensions"; +"install_to_private" = "Premitir instalação do Framework em /System/Library/PrivateFrameworks"; +"private_warning" = "Atenção:Instalar em PrivateFrameworks pode causar intermitencias no sistema"; +"full_kdk_merge" = "Mesclar KDK completamente(incluindo Kernel)"; +"kdk_warning" = "Não recomendado:Mesclar KDK completo pode ocupar espaço extra e trazem riscos de segurança"; +"status" = "Status"; +"ready" = "Pronto"; +"installing_kext" = "Instalando Kexts em /System/Library/Extensions"; +"merging_kdk" = "Mesclando Arquivos KDK"; +"starting_merge_and_install" = "Iniciandi mesclagem KDK e instalação de Kext..."; +"starting_install_kext" = "Iniciando a instalação do arquivo Kext..."; +"select_kext" = "Selecione o arquivo Kext/Framework"; +"drop_files" = "Arraste e solte aqui os arquivos Kext/Framework"; +"select_files" = "Click aqui para selecionar arquivos..."; +"operation_log" = "Logs da Operação"; +"waiting" = "Aguardando operação..."; +"open_kdk" = "Abrir Diretório KDK"; +"merge_kdk" = "Mesclar Somente KDK"; +"start_install" = "Iniciar Instalação"; +"cancel" = "Cancelar"; +"about" = "Sobre"; +"rebuild_cache" = "Reconstruir Cache"; +"create_snapshot" = "Criar Snapshot"; +"restore_snapshot" = "Restaurar Snapshor"; +"version" = "Versão"; +"author" = "Autor"; +"copyright" = "Copyright"; +"contributors" = "Contribuidores"; +"visit_github" = "Visitar o Repositório do GitHub"; +"close" = "Fechar"; +"rights_reserved" = "Todos os Direitos Reservados"; +"contributor1" = "laobamac - 开发者"; +"contributor2" = "perez987 - 提供英语翻译"; +"contributor3" = "Anto65 - Partial Italian translation"; +"contributor4" = "lshbluesky - Partial Korean translation"; +"contributor5" = "JonasW8 - Brazilian Portuguese"; +"auto_detect" = "Auto Detectar"; +"language_settings" = "Configurações de Idioma"; +"language" = "Idioma"; +"change_language" = "Mudar Idioma"; +"opLogs" = "Logs da Operação"; +"installing" = "Instalando..."; +"merging" = "Mesclando KDK..."; +"found" = "Encontrado"; +"warning_no_kdk" = "Atenção: KDK não encontrado,por favor instale o KDK primeiro"; +"warning" = "Atenção"; +"error" = "Erro"; +"none_out" = "Sem Saída"; +"unkn_error" = "Erro desconhecido"; +"error_cant_read_kdk_dir" = "Erro: Não é possível ler o diretório KDK"; +"error_not_selected_kdk" = "Erro: KDK não selecionado"; +"error_merged_kdk_failed" = "Erro: Mesclar o KDK falhou"; +"error_not_selected_bundle" = "Erro: Kext não selecionado"; +"error_installed_failed" = "Erro: Instalação falhou"; +"not_selected_kdk" = "KDK não selecionado"; +"starting_merging" = "Iniciando mesclagem KDK"; +"locating_root_vol" = "Localizando volume root..."; +"starting_merging_to_root_vol" = "Iniciando a mesclagem do KDK no volume root"; +"slow_step" = "Esta etapa é lenta, não force o desligat!"; +"merged_completed_umounted" = "Mesclagem completa,volume root desmontado"; +"merged_successfully" = "Mesclagem com sucesso"; +"merged_failed" = "Mesclagem falhou"; +"kdk_merged_successfully" = "KDK mesclado com sucesso"; +"whether_select_kdk" = "Deve-se selecionar o KDK"; +"info_not_selected_kdk" = "Informação: KDK não selecionado"; +"options" = "Opções"; +"force" = "Forçar Sobrescrever"; +"backup" = "Cópia de Segurança"; +"rebuild" = "Reconstruir Cache"; +"install_completed" = "Instalação Completada"; +"op_successfully" = "Operação satistatória"; +"op_failed" = "Operação falhou"; +"kext_has_been_installed" = "A extensão de kernel especificada foi bem instalada"; +"op_canceled" = "Operação cancelada"; +"open_kdk_dir" = "Abrir Diretório KDK"; +"opened_kdk_dir" = "Diretório KDK aberto"; +"kdk_dir_exists" = "O diretório KDK existe"; +"warning_kdk_dir_doesnt_exist" = "O diretório KDK não existe"; +"error_cant_gr_as" = "Não é possível criar objeto AppleScript"; +"starting_rebuild" = "Iniciando a reconstrução do kernel cache..."; +"rebuild_successfully" = "Cache do kernel reconstruído com sucesso"; +"rebuild_failed" = "A reconstrução do kernel cache falhou"; +"starting_snapshot" = "Iniciando a criação do snapshop do sistema..."; +"snapshot_successfully" = "Snapshot do sistema criado com sucesso"; +"snapshot_failed" = "A criação do snapshot do sistema falho"; +"last_sealed_snapshot" = "Iniciando a restauração do ultimo snapshot..."; +"revert_successfully" = "Snapshot restaurado com sucesso"; +"revert_failed" = "Restauração do snapshot falhou"; +"selected_kdk" = "KDK selecionado"; +"only_merge_kdk" = "Somente Mesclar KDK"; +"creat_snapshot" = "Criar Snapshot"; +"restore_snapshot" = "Restaurar Snapshot"; +"select_kdk" = "Selecionar KDK"; +"select_installed_kdk" = "Selecionar KDK instalado"; +"not_selected" = "Não selecionado"; +"refresh" = "Atualizar"; +"effective_kdk" = "KDK válido selecionado"; +"choose_bundle" = "Selecionar arquivo Kext/Framework"; +"drag_here" = "Arraste e solte os arquivos Kext/Framework aqui"; +"or" = "Ou"; +"click_to_choose" = "Click para selecionar aquivos..."; +"operation_success_title" = "Operação com Sucesso"; +"operation_success_restart_message" = "Operação completada com sucesso.Nós recomendamos reiniciar seu computador imediatamente para que as alterações tenham efeito."; +"restart_now" = "Reiniciar Agora"; +"restart_later" = "Reiniciar Depois"; +"operation_canceled_title" = "Operação Cancelada"; +"operation_canceled_message" = "A operação atual foi abortada. Para garantir a integridade do sistema, recomendamos restaurar o snapshot e reconstruir o cache."; +"presets" = "Predefinições"; +"select_preset_instruction" = "Selecione uma predefinição para configurar automaticamente as opções de instalação"; +"requires_kdk" = "Requer KDK"; +"rebuilding_cache" = "Reconstruindo kernel cache."; +"error_preset_files_dir_not_found" = "Erro: Diretório de arquivos predefinidos não encontrado"; +"error_preset_requires_kdk" = "Erro: Esta predefinição requer que um KDK seja selecionado"; +"warning_file_not_found" = "Atenção: Arquivo não encontrado"; +"error_no_system_version_selected" = "Erro: Versão do sistema não selecionada"; +"warning_version_not_found" = "Atenção: Versão do sistema não encontrada"; +"confirm_install_preset" = "Confirmar Instalação do Preset"; +"install" = "Instalar"; +"creating_snapshot" = "Criando snapshot do sistema."; +"restore_snapshot" = "Restaurando snapshot."; diff --git a/SimpleLoader/Views/AboutView.swift b/SimpleLoader/Views/AboutView.swift index 2e024c9..76b4d65 100644 --- a/SimpleLoader/Views/AboutView.swift +++ b/SimpleLoader/Views/AboutView.swift @@ -16,6 +16,8 @@ struct AboutView: View { "contributor1".localized, "contributor2".localized, "contributor3".localized, + "contributor4".localized, + "contributor5".localized, ] var body: some View {