From 159c483cb383848365b35cc7019dc9fc338ad682 Mon Sep 17 00:00:00 2001 From: lshbluesky <61459016+lshbluesky@users.noreply.github.com> Date: Fri, 1 Aug 2025 12:52:29 +0900 Subject: [PATCH 1/5] Add Korean localization file by @lshbluesky --- SimpleLoader/Languages/LanguageManager.swift | 3 +- .../Languages/en.lproj/Localizable.strings | 1 + .../Languages/es.lproj/Localizable.strings | 1 + .../Languages/it.lproj/Localizable.strings | 1 + .../Languages/ko.lproj/Localizable.strings | 140 ++++++++++++++++++ .../zh-Hans.lproj/Localizable.strings | 1 + .../zh-Hant.lproj/Localizable.strings | 1 + 7 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 SimpleLoader/Languages/ko.lproj/Localizable.strings diff --git a/SimpleLoader/Languages/LanguageManager.swift b/SimpleLoader/Languages/LanguageManager.swift index bd0eaef..307449c 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", "ko"] // 支持的语言列表 } 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 "ko": return "Korean" default: return language } } diff --git a/SimpleLoader/Languages/en.lproj/Localizable.strings b/SimpleLoader/Languages/en.lproj/Localizable.strings index cf391a5..79aa277 100644 --- a/SimpleLoader/Languages/en.lproj/Localizable.strings +++ b/SimpleLoader/Languages/en.lproj/Localizable.strings @@ -52,6 +52,7 @@ "contributor1" = "laobamac - Developer"; "contributor2" = "perez987 - Partial English translation"; "contributor3" = "Anto65 - Partial Italian translations"; +"contributor4" = "lshbluesky - Partial Korean translation"; "auto_detect" = "Auto Detect"; "language_settings" = "Language Settings"; "language" = "Language"; diff --git a/SimpleLoader/Languages/es.lproj/Localizable.strings b/SimpleLoader/Languages/es.lproj/Localizable.strings index e83aefa..320989d 100644 --- a/SimpleLoader/Languages/es.lproj/Localizable.strings +++ b/SimpleLoader/Languages/es.lproj/Localizable.strings @@ -52,6 +52,7 @@ "contributor1" = "laobamac - Desarrollador"; "contributor2" = "perez987 - Traducción parcial al inglés"; "contributor3" = "Anto65 - proporciona algunas traducciones al italiano"; +"contributor4" = "lshbluesky - Traducción parcial al coreano"; "auto_detect" = "Detección automática"; "language_settings" = "Configuración de idioma"; "language" = "Idioma"; diff --git a/SimpleLoader/Languages/it.lproj/Localizable.strings b/SimpleLoader/Languages/it.lproj/Localizable.strings index 5119dc9..a9024af 100644 --- a/SimpleLoader/Languages/it.lproj/Localizable.strings +++ b/SimpleLoader/Languages/it.lproj/Localizable.strings @@ -52,6 +52,7 @@ "contributor1" = "laobamac - Sviluppatore"; "contributor2" = "perez987 - Traduzione parziale in inglese"; "contributor3" = "Anto65 - con traduzione parziale in italiano disponibile"; +"contributor4" = "lshbluesky - Traduzione parziale in coreano"; "auto_detect" = "Rilevamento automatico"; "language_settings" = "Configurazione della lingua"; "language" = "Lingua"; diff --git a/SimpleLoader/Languages/ko.lproj/Localizable.strings b/SimpleLoader/Languages/ko.lproj/Localizable.strings new file mode 100644 index 0000000..7ca2d4c --- /dev/null +++ b/SimpleLoader/Languages/ko.lproj/Localizable.strings @@ -0,0 +1,140 @@ +// +// Localizable.strings +// SimpleLoader +// +// Created by laobamac on 2025/7/28. +// + +/* + Localizable.strings (Korean) + SimpleLoader +*/ + +"app_title" = "SimpleLoader 시스템 확장 설치 프로그램"; +"app_subtitle" = "KDK를 자동으로 병합하고, /System/Library/Extensions 경로에 Kext/Bundle 파일을 설치합니다."; +"installation_options" = "설치 옵션"; +"show_advanced" = "고급 설정 표시"; +"hide_advanced" = "고급 설정 숨기기"; +"force_overwrite" = "기존 파일을 강제로 덮어쓰기"; +"backup_existing" = "기존 Kext/Framework 백업"; +"advanced_options" = "고급 옵션"; +"install_to_le" = "/Library/Extensions 경로에 설치"; +"install_to_private" = "/System/Library/PrivateFrameworks 경로에 프레임워크 설치 허용"; +"private_warning" = "경고: PrivateFrameworks에 설치할 경우 시스템 오류가 발생할 수 있습니다."; +"full_kdk_merge" = "(커널을 포함하여) 완전한 KDK 병합"; +"kdk_warning" = "권장하지 않음: 완전한 KDK를 병합하면 추가적인 공간을 차지하고 보안 위험을 초래할 수 있습니다."; +"status" = "상태"; +"ready" = "준비"; +"installing_kext" = "/System/Library/Extensions 경로에 Kext 설치"; +"merging_kdk" = "KDK 파일 병합"; +"starting_merge_and_install" = "KDK 병합 및 Kext 설치 시작..."; +"starting_install_kext" = "Kext 설치 시작..."; +"select_kext" = "Kext/Framework 파일 선택"; +"drop_files" = "Kext/Framework 파일을 여기에 드래그 앤 드롭하십시오."; +"select_files" = "클릭하여 파일 선택..."; +"operation_log" = "작업 로드"; +"waiting" = "작업을 위해 대기 중..."; +"open_kdk" = "KDK 디렉터리 열기"; +"merge_kdk" = "KDK만 병합"; +"start_install" = "설치 시작"; +"cancel" = "취소"; +"about" = "이에 관하여"; +"rebuild_cache" = "캐시 재생성"; +"create_snapshot" = "스냅샷 생성"; +"restore_snapshot" = "스냅샷 복원"; +"version" = "버전"; +"author" = "저자"; +"copyright" = "저작권"; +"contributors" = "기여자"; +"visit_github" = "GitHub 저장소 방문"; +"close" = "닫기"; +"rights_reserved" = "모든 권리 보유"; +"contributor1" = "laobamac - 개발자"; +"contributor2" = "perez987 - 일부 스페인어 및 영어 번역"; +"contributor3" = "Anto65 - 일부 이탈리아어 번역"; +"contributor4" = "lshbluesky - 일부 한국어 번역"; +"auto_detect" = "자동으로 감지"; +"language_settings" = "언어 설정"; +"language" = "언어"; +"change_language" = "언어 변경"; +"opLogs" = "작업 로그"; +"installing" = "설치 중..."; +"merging" = "KDK 병합 중..."; +"found" = "발견됨"; +"warning_no_kdk" = "경고: KDK를 찾을 수 없습니다. KDK를 먼저 설치해 주시기 바랍니다."; +"warning" = "경고"; +"error" = "오류"; +"none_out" = "출력 없음"; +"unkn_error" = "알 수 없는 오류"; +"error_cant_read_kdk_dir" = "오류: KDK 디렉터리를 읽을 수 없습니다."; +"error_not_selected_kdk" = "오류: KDK를 선택하지 않았습니다."; +"error_merged_kdk_failed" = "오류: KDK를 병합하는 도중에 오류가 발생하였습니다."; +"error_not_selected_bundle" = "오류: Kext 파일을 선택하지 않았습니다."; +"error_installed_failed" = "오류: 설치하는 도중에 오류가 발생하였습니다."; +"not_selected_kdk" = "KDK를 선택하지 않았습니다."; +"starting_merging" = "KDK 병합을 시작합니다."; +"locating_root_vol" = "루트 볼륨을 탐색하는 중..."; +"starting_merging_to_root_vol" = "루트 볼륨에 KDK 병합 시작"; +"slow_step" = "이 작업은 시간이 다소 걸리므로, 강제로 종료하지 마십시오!"; +"merged_completed_umounted" = "병합이 완료되었으며, 루트 볼륨이 마운트 해제되었습니다."; +"merged_successfully" = "성공적으로 병합되었습니다."; +"merged_failed" = "병합하는 도중에 오류가 발생하였습니다."; +"kdk_merged_successfully" = "KDK가 성공적으로 병합되었습니다."; +"whether_select_kdk" = "KDK 선택 여부"; +"info_not_selected_kdk" = "알림: KDK를 선택하지 않았습니다."; +"options" = "옵션"; +"force" = "강제로 덮어쓰기"; +"backup" = "백업"; +"rebuild" = "캐시 재생성"; +"about" = "이에 관하여"; +"install_completed" = "설치가 완료되었습니다."; +"op_successfully" = "작업이 완료되었습니다."; +"op_failed" = "작업하는 도중에 오류가 발생하였습니다."; +"kext_has_been_installed" = "지정된 커널 확장이 설치되었습니다."; +"op_canceled" = "작업이 취소되었습니다."; +"open_kdk_dir" = "KDK 디렉터리 열기"; +"opened_kdk_dir" = "KDK 디렉터리를 열었습니다."; +"kdk_dir_exists" = "KDK 디렉터리가 존재합니다."; +"warning_kdk_dir_doesnt_exist" = "KDK 디렉터리가 존재하지 않습니다."; +"error_cant_gr_as" = "AppleScript 개체를 생성할 수 없습니다."; +"starting_rebuild" = "커널 캐시를 재생성하는 중..."; +"rebuild_successfully" = "커널 캐시가 성공적으로 재구성되었습니다."; +"rebuild_failed" = "커널 캐시를 재생성하는 도중에 오류가 발생하였습니다."; +"starting_snapshot" = "시스템 스냅샷을 생성하는 중..."; +"snapshot_successfully" = "시스템 스냅샷이 성공적으로 생성되었습니다."; +"snapshot_failed" = "시스템 스냅샷을 생성하는 도중에 오류가 발생하였습니다."; +"last_sealed_snapshot" = "마지막 스냅샷을 복원하는 중..."; +"revert_successfully" = "스냅샷이 성공적으로 복원되었습니다."; +"revert_failed" = "스냅샷을 복원하는 도중에 오류가 발생하였습니다."; +"selected_kdk" = "KDK가 선택되었습니다."; +"cancel" = "취소"; +"only_merge_kdk" = "KDK만 병합"; +"creat_snapshot" = "스냅샷 생성"; +"restore_snapshot" = "스냅샷 복원"; +"select_kdk" = "KDK 선택"; +"select_installed_kdk" = "설치된 KDK 선택"; +"not_selected" = "선택되지 않음"; +"refresh" = "새로 고침"; +"effective_kdk" = "올바른 KDK가 선택되었습니다."; +"choose_bundle" = "Kext/Framework 파일 선택"; +"drag_here" = "Kext/Framework 파일을 여기에 드래그 앤 드롭하십시오."; +"or" = "또는"; +"click_to_choose" = "클릭하여 파일 선택..."; +"operation_success_title" = "작업 성공"; +"operation_success_restart_message" = "작업이 성공적으로 완료되었습니다. 변경 사항을 적용하려면 컴퓨터를 재시동해야 합니다."; +"restart_now" = "지금 재시동하기"; +"restart_later" = "나중에 재시동하기"; +"operation_canceled_title" = "작업 취소"; +"operation_canceled_message" = "작업이 취소되었습니다. 시스템의 안정성을 위해 스냅샷을 복원한 후 캐시를 재생성하는 것을 권장합니다."; +"presets" = "프리셋 패치"; +"select_preset_instruction" = "프리셋 패치를 선택하여 설치 옵션을 자동으로 구성하십시오."; +"author" = "저자"; +"requires_kdk" = "KDK 필요"; +"rebuilds_cache" = "캐시 재생성"; +"error_preset_files_dir_not_found" = "오류: 프리셋 파일의 디렉터리를 찾을 수 없습니다."; +"error_preset_requires_kdk" = "오류: 이 프리셋은 KDK를 먼저 선택해야 합니다."; +"warning_file_not_found" = "경고: 파일을 찾을 수 없습니다."; +"error_no_system_version_selected" = "오류: 시스템 버전이 선택되지 않았습니다."; +"warning_version_not_found" = "경고: 시스템 버전을 찾을 수 없습니다."; +"confirm_install_preset" = "프리셋 설치 확인"; +"install" = "설치"; diff --git a/SimpleLoader/Languages/zh-Hans.lproj/Localizable.strings b/SimpleLoader/Languages/zh-Hans.lproj/Localizable.strings index c1e7eb6..7acada9 100644 --- a/SimpleLoader/Languages/zh-Hans.lproj/Localizable.strings +++ b/SimpleLoader/Languages/zh-Hans.lproj/Localizable.strings @@ -52,6 +52,7 @@ "contributor1" = "laobamac - 开发者"; "contributor2" = "perez987 - 提供部分英语翻译"; "contributor3" = "Anto65 - 提供部分意大利语翻译"; +"contributor4" = "lshbluesky - 提供部分韩语翻译"; "auto_detect" = "自动检测"; "language_settings" = "语言设置"; "language" = "语言"; diff --git a/SimpleLoader/Languages/zh-Hant.lproj/Localizable.strings b/SimpleLoader/Languages/zh-Hant.lproj/Localizable.strings index 2eb970e..74ffe59 100644 --- a/SimpleLoader/Languages/zh-Hant.lproj/Localizable.strings +++ b/SimpleLoader/Languages/zh-Hant.lproj/Localizable.strings @@ -52,6 +52,7 @@ "contributor1" = "laobamac - 開發者"; "contributor2" = "perez987 - 提供部分英文翻譯"; "contributor3" = "Anto65 - 提供部分意大利語翻譯"; +"contributor4" = "lshbluesky - 提供部分韓語翻譯"; "auto_detect" = "自動偵測"; "language_settings" = "語言設定"; "language" = "語言"; From 3b57a9ed8dda7e5c524ab1f942c0e01cc8bed7eb Mon Sep 17 00:00:00 2001 From: lshbluesky <61459016+lshbluesky@users.noreply.github.com> Date: Fri, 1 Aug 2025 12:58:34 +0900 Subject: [PATCH 2/5] Add credit for @lshbluesky --- SimpleLoader/Views/AboutView.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SimpleLoader/Views/AboutView.swift b/SimpleLoader/Views/AboutView.swift index 2e024c9..7baf9f2 100644 --- a/SimpleLoader/Views/AboutView.swift +++ b/SimpleLoader/Views/AboutView.swift @@ -16,6 +16,7 @@ struct AboutView: View { "contributor1".localized, "contributor2".localized, "contributor3".localized, + "contributor4".localized ] var body: some View { @@ -92,7 +93,7 @@ struct AboutView: View { .frame(width: 120) } .padding() - .frame(width: 325, height: 425) + .frame(width: 325, height: 475) } } From 2affe3e9adc00e76da4d4e2b4d2e1817908afbf8 Mon Sep 17 00:00:00 2001 From: lshbluesky <61459016+lshbluesky@users.noreply.github.com> Date: Fri, 1 Aug 2025 21:50:05 +0900 Subject: [PATCH 3/5] Update the Contributors line in the localization files --- SimpleLoader/Languages/Base.lproj/Localizable.strings | 4 +++- SimpleLoader/Languages/en.lproj/Localizable.strings | 4 ++-- SimpleLoader/Languages/it.lproj/Localizable.strings | 4 ++-- SimpleLoader/Languages/zh-Hans.lproj/Localizable.strings | 6 +++--- SimpleLoader/Languages/zh-Hant.lproj/Localizable.strings | 6 +++--- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/SimpleLoader/Languages/Base.lproj/Localizable.strings b/SimpleLoader/Languages/Base.lproj/Localizable.strings index 744540e..d3ac04e 100644 --- a/SimpleLoader/Languages/Base.lproj/Localizable.strings +++ b/SimpleLoader/Languages/Base.lproj/Localizable.strings @@ -50,7 +50,9 @@ "close" = "关闭"; "rights_reserved" = "保留所有权利"; "contributor1" = "laobamac - 开发者"; -"contributor2" = "perez987 - 提供英语翻译"; +"contributor2" = "perez987 - 部分西班牙语和英语翻译"; +"contributor3" = "Anto65 - 部分意大利语翻译"; +"contributor4" = "lshbluesky - 部分韩语翻译"; "auto_detect" = "自动检测"; "language_settings" = "语言设置"; "language" = "语言"; diff --git a/SimpleLoader/Languages/en.lproj/Localizable.strings b/SimpleLoader/Languages/en.lproj/Localizable.strings index 79aa277..1eb367a 100644 --- a/SimpleLoader/Languages/en.lproj/Localizable.strings +++ b/SimpleLoader/Languages/en.lproj/Localizable.strings @@ -50,8 +50,8 @@ "close" = "Close"; "rights_reserved" = "All Rights Reserved"; "contributor1" = "laobamac - Developer"; -"contributor2" = "perez987 - Partial English translation"; -"contributor3" = "Anto65 - Partial Italian translations"; +"contributor2" = "perez987 - Partial Spanish and English translation"; +"contributor3" = "Anto65 - Partial Italian translation"; "contributor4" = "lshbluesky - Partial Korean translation"; "auto_detect" = "Auto Detect"; "language_settings" = "Language Settings"; diff --git a/SimpleLoader/Languages/it.lproj/Localizable.strings b/SimpleLoader/Languages/it.lproj/Localizable.strings index a9024af..a3e83db 100644 --- a/SimpleLoader/Languages/it.lproj/Localizable.strings +++ b/SimpleLoader/Languages/it.lproj/Localizable.strings @@ -50,8 +50,8 @@ "close" = "Chiudere"; "rights_reserved" = "Tutti i diritti riservati"; "contributor1" = "laobamac - Sviluppatore"; -"contributor2" = "perez987 - Traduzione parziale in inglese"; -"contributor3" = "Anto65 - con traduzione parziale in italiano disponibile"; +"contributor2" = "perez987 - Traduzione parziale in inglese i spagnolo"; +"contributor3" = "Anto65 - Traduzione parziale in italiano"; "contributor4" = "lshbluesky - Traduzione parziale in coreano"; "auto_detect" = "Rilevamento automatico"; "language_settings" = "Configurazione della lingua"; diff --git a/SimpleLoader/Languages/zh-Hans.lproj/Localizable.strings b/SimpleLoader/Languages/zh-Hans.lproj/Localizable.strings index 7acada9..a017d16 100644 --- a/SimpleLoader/Languages/zh-Hans.lproj/Localizable.strings +++ b/SimpleLoader/Languages/zh-Hans.lproj/Localizable.strings @@ -50,9 +50,9 @@ "close" = "关闭"; "rights_reserved" = "保留所有权利"; "contributor1" = "laobamac - 开发者"; -"contributor2" = "perez987 - 提供部分英语翻译"; -"contributor3" = "Anto65 - 提供部分意大利语翻译"; -"contributor4" = "lshbluesky - 提供部分韩语翻译"; +"contributor2" = "perez987 - 部分西班牙语和英语翻译"; +"contributor3" = "Anto65 - 部分意大利语翻译"; +"contributor4" = "lshbluesky - 部分韩语翻译"; "auto_detect" = "自动检测"; "language_settings" = "语言设置"; "language" = "语言"; diff --git a/SimpleLoader/Languages/zh-Hant.lproj/Localizable.strings b/SimpleLoader/Languages/zh-Hant.lproj/Localizable.strings index 74ffe59..846e7f1 100644 --- a/SimpleLoader/Languages/zh-Hant.lproj/Localizable.strings +++ b/SimpleLoader/Languages/zh-Hant.lproj/Localizable.strings @@ -50,9 +50,9 @@ "close" = "關閉"; "rights_reserved" = "保留所有權利"; "contributor1" = "laobamac - 開發者"; -"contributor2" = "perez987 - 提供部分英文翻譯"; -"contributor3" = "Anto65 - 提供部分意大利語翻譯"; -"contributor4" = "lshbluesky - 提供部分韓語翻譯"; +"contributor2" = "perez987 - 部分西班牙文和英文翻譯"; +"contributor3" = "Anto65 - 部分義大利文翻譯"; +"contributor4" = "lshbluesky - 部分韓文翻譯"; "auto_detect" = "自動偵測"; "language_settings" = "語言設定"; "language" = "語言"; From 47b6a9958d8dbf4b8d97bafae9630c7ebc0ee382 Mon Sep 17 00:00:00 2001 From: lshbluesky <61459016+lshbluesky@users.noreply.github.com> Date: Sat, 2 Aug 2025 22:24:44 +0900 Subject: [PATCH 4/5] Fix the issue where the copyright icon does not appear --- SimpleLoader/Views/AboutView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SimpleLoader/Views/AboutView.swift b/SimpleLoader/Views/AboutView.swift index 7baf9f2..1725dc9 100644 --- a/SimpleLoader/Views/AboutView.swift +++ b/SimpleLoader/Views/AboutView.swift @@ -41,7 +41,7 @@ struct AboutView: View { VStack(alignment: .leading, spacing: 8) { InfoRow(icon: "number", title: "version".localized, value: "1.0.0") InfoRow(icon: "person", title: "author".localized, value: "laobamac") - InfoRow(icon: "c", title: "copyright".localized, value: "© 2025 " + "rights_reserved".localized) + InfoRow(icon: "c.circle", title: "copyright".localized, value: "© 2025 " + "rights_reserved".localized) InfoRow(icon: "globe", title: "language".localized, value: languageManager.currentLanguage == "auto" ? "auto_detect".localized : From 45be319ba36462cefbc16f09787492398c0d8ebd Mon Sep 17 00:00:00 2001 From: lshbluesky <61459016+lshbluesky@users.noreply.github.com> Date: Mon, 11 Aug 2025 20:09:02 +0900 Subject: [PATCH 5/5] Update the English localization file --- .../Languages/en.lproj/Localizable.strings | 109 ++++++++++-------- 1 file changed, 62 insertions(+), 47 deletions(-) diff --git a/SimpleLoader/Languages/en.lproj/Localizable.strings b/SimpleLoader/Languages/en.lproj/Localizable.strings index 1eb367a..3ec609f 100644 --- a/SimpleLoader/Languages/en.lproj/Localizable.strings +++ b/SimpleLoader/Languages/en.lproj/Localizable.strings @@ -10,45 +10,45 @@ SimpleLoader */ -"app_title" = "SimpleLoader System Extension Installer"; +"app_title" = "SimpleLoader System Extension Installation Tool"; "app_subtitle" = "Automatically merge KDK and install Kext/Bundle to /System/Library/Extensions"; "installation_options" = "Installation Options"; "show_advanced" = "Show Advanced Options"; "hide_advanced" = "Hide Advanced Options"; -"force_overwrite" = "Force overwrite existing files"; +"force_overwrite" = "Force overwrite duplicate files"; "backup_existing" = "Backup existing Kext/Framework"; "advanced_options" = "Advanced Options"; "install_to_le" = "Install to /Library/Extensions"; -"install_to_private" = "Allow installing Framework to /System/Library/PrivateFrameworks"; -"private_warning" = "Warning: Installing to PrivateFrameworks may cause system crash"; -"full_kdk_merge" = "Merge complete KDK (including Kernel)"; -"kdk_warning" = "Not recommended: Merging complete KDK will occupy extra space and bring security risks"; +"install_to_private" = "Allow installation of frameworks to /System/Library/PrivateFrameworks"; +"private_warning" = "Warning: Installing to PrivateFrameworks may cause system crashes"; +"full_kdk_merge" = "Merge complete KDK (including kernel)"; +"kdk_warning" = "Not recommended: Merging complete KDKs takes up extra space and poses security risks"; "status" = "Status"; "ready" = "Ready"; -"installing_kext" = "Installing Kext to /System/Library/Extensions"; +"installing_kext" = "Installing kext to /System/Library/Extensions"; "merging_kdk" = "Merging KDK files"; -"starting_merge_and_install" = "Starting KDK merge and Kext installation..."; -"starting_install_kext" = "Starting Kext file installation..."; -"select_kext" = "Select Kext/Framework file"; -"drop_files" = "Drag and drop Kext/Framework files here"; +"starting_merge_and_install" = "Starting merging KDK and installing kext..."; +"starting_install_kext" = "Starting installing kext files..."; +"select_kext" = "Select kext/framework files"; +"drop_files" = "Drag and drop kext/framework files here"; "select_files" = "Click to select files..."; -"operation_log" = "Operation Log"; +"operation_log" = "Operation log"; "waiting" = "Waiting for operation..."; -"open_kdk" = "Open KDK Directory"; -"merge_kdk" = "Merge KDK Only"; -"start_install" = "Start Installation"; +"open_kdk" = "Open KDK directory"; +"merge_kdk" = "Merge KDK only"; +"start_install" = "Start installation"; "cancel" = "Cancel"; "about" = "About"; -"rebuild_cache" = "Rebuild Cache"; -"create_snapshot" = "Create Snapshot"; -"restore_snapshot" = "Restore Snapshot"; +"rebuild_cache" = "Rebuild cache"; +"create_snapshot" = "Create snapshot"; +"restore_snapshot" = "Restore snapshot"; "version" = "Version"; "author" = "Author"; "copyright" = "Copyright"; "contributors" = "Contributors"; -"visit_github" = "Visit GitHub Repository"; +"visit_github" = "Visit GitHub repository"; "close" = "Close"; -"rights_reserved" = "All Rights Reserved"; +"rights_reserved" = "All rights reserved"; "contributor1" = "laobamac - Developer"; "contributor2" = "perez987 - Partial Spanish and English translation"; "contributor3" = "Anto65 - Partial Italian translation"; @@ -61,65 +61,80 @@ "installing" = "Installing..."; "merging" = "Merging KDK..."; "found" = "Found"; -"warning_no_kdk" = "Warning: No KDK found, please install KDK first"; +"warning_no_kdk" = "Warning: KDK not found, please install KDK first"; "warning" = "Warning"; "error" = "Error"; "none_out" = "No output"; "unkn_error" = "Unknown error"; -"error_cant_read_kdk_dir" = "Error: Cannot read KDK directory"; +"error_cant_read_kdk_dir" = "Error: Unable to read KDK directory"; "error_not_selected_kdk" = "Error: No KDK selected"; -"error_merged_kdk_failed" = "Error: KDK merge failed"; -"error_not_selected_bundle" = "Error: No Kext file selected"; +"error_merged_kdk_failed" = "Error: Merging KDK failed"; +"error_not_selected_bundle" = "Error: No kext selected"; "error_installed_failed" = "Error: Installation failed"; "not_selected_kdk" = "No KDK selected"; -"starting_merging" = "Starting KDK merge"; -"locating_root_vol" = "Locating root volume..."; -"starting_merging_to_root_vol" = "Starting KDK merge to root volume"; +"starting_merging" = "Starting merging KDK"; +"locating_root_vol" = "Locate root volume"; +"starting_merging_to_root_vol" = "Starting merging KDK to root volume"; "slow_step" = "This step is slow, do not force stop!"; -"merged_completed_umounted" = "Merge completed, root volume unmounted"; -"merged_successfully" = "Merge successful"; +"merged_completed_umounted" = "Merging completed, root volume unmounted"; +"merged_successfully" = "Merging successfully"; "merged_failed" = "Merge failed"; "kdk_merged_successfully" = "KDK merged successfully"; -"whether_select_kdk" = "Whether to select KDK"; +"whether_select_kdk" = "Whether to select a KDK"; "info_not_selected_kdk" = "Info: No KDK selected"; "options" = "Options"; -"force" = "Force Overwrite"; +"force" = "Force overwrite"; "backup" = "Backup"; -"rebuild" = "Rebuild Cache"; +"rebuild" = "Rebuild cache"; "about" = "About"; "install_completed" = "Installation completed"; "op_successfully" = "Operation successful"; "op_failed" = "Operation failed"; "kext_has_been_installed" = "The specified kernel extension has been installed"; "op_canceled" = "Operation canceled"; -"open_kdk_dir" = "Open KDK Directory"; +"open_kdk_dir" = "Open KDK directory"; "opened_kdk_dir" = "KDK directory opened"; "kdk_dir_exists" = "KDK directory exists"; -"warning_kdk_dir_doesnt_exist" = "KDK directory doesn't exists"; -"error_cant_gr_as" = "Cannot create AppleScript object"; -"starting_rebuild" = "Starting kernel cache rebuild..."; -"rebuild_successfully" = "Kernel cache rebuilt successfully"; +"warning_kdk_dir_doesnt_exist" = "KDK directory does not exist"; +"error_cant_gr_as" = "Unable to create AppleScript object"; +"starting_rebuild" = "Starting to rebuild kernel cache..."; +"rebuild_successfully" = "Kernel cache rebuild successful"; "rebuild_failed" = "Kernel cache rebuild failed"; -"starting_snapshot" = "Starting system snapshot creation..."; +"starting_snapshot" = "Starting to create system snapshot..."; "snapshot_successfully" = "System snapshot created successfully"; -"snapshot_failed" = "System snapshot creation failed"; +"snapshot_failed" = "System snapshot created failed"; "last_sealed_snapshot" = "Starting to restore last snapshot..."; "revert_successfully" = "Snapshot restored successfully"; "revert_failed" = "Snapshot restore failed"; "selected_kdk" = "KDK selected"; "cancel" = "Cancel"; -"only_merge_kdk" = "Merge KDK Only"; -"creat_snapshot" = "Create Snapshot"; -"restore_snapshot" = "Restore Snapshot"; +"only_merge_kdk" = "Merge only KDK"; +"create_snapshot" = "Create snapshot"; +"restore_snapshot" = "Restore snapshot"; "select_kdk" = "Select KDK"; "select_installed_kdk" = "Select installed KDK"; "not_selected" = "Not selected"; "refresh" = "Refresh"; "effective_kdk" = "Valid KDK selected"; "choose_bundle" = "Select Kext/Framework file"; -"drag_here" = "Drag and drop Kext/Framework files here"; +"drag_here" = "Drag and drop Kext/Framework file here"; "or" = "Or"; -"click_to_choose" = "Click to select files..."; -"rebuilding_cache" = "Rebuilding kernel cache."; -"creating_snapshot" = "Creating system snapshot."; -"restore_snapshot" = "Restoring snapshot."; +"click_to_choose" = "Click to choose file..."; +"operation_success_title" = "Operation Successful"; +"operation_success_restart_message" = "The operation completed successfully. We recommend restarting your computer immediately for the changes to take effect."; +"restart_now" = "Restart Now"; +"restart_later" = "Restart Later"; +"operation_canceled_title" = "Operation Cancelled"; +"operation_canceled_message" = "The current operation was aborted. To ensure system integrity, we recommend restoring the snapshot and rebuilding the cache."; +"presets" = "Presets"; +"select_preset_instruction" = "Select a preset to automatically configure installation options"; +"author" = "Author"; +"requires_kdk" = "Requires KDK"; +"rebuilds_cache" = "Rebuild Cache"; +"error_preset_files_dir_not_found" = "Error: Preset files directory not found"; +"error_preset_requires_kdk" = "Error: This preset requires a KDK to be selected"; +"warning_file_not_found" = "Warning: File not found"; +"error_no_system_version_selected" = "Error: No system version selected"; +"warning_version_not_found" = "Warning: No system version found"; +"confirm_install_preset" = "Confirm Install Preset"; +"install" = "Install";