Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion Sources/MacOptimizer/Models/InstalledApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public enum AppArchitecture: String, Sendable, Equatable {
case .universal: return "Universal"
case .appleSilicon: return "Apple Silicon"
case .intel: return "Intel"
case .unknown: return "Diğer"
case .unknown: return L10n.string("Other", table: .services)
}
}

Expand Down Expand Up @@ -43,6 +43,14 @@ public struct AppUpdateInfo: Sendable, Equatable {
case homebrew = "Homebrew Cask"
case appStore = "Mac App Store"
case directCheck = "Doğrudan Kontrol"

/// Localized display label. Raw values are kept stable and must not be shown in the UI.
public var localizedTitle: String {
switch self {
case .sparkle, .homebrew, .appStore: return rawValue
case .directCheck: return L10n.string("Direct Check", table: .services)
}
}
}

public init(
Expand Down
28 changes: 14 additions & 14 deletions Sources/MacOptimizer/Models/JunkItem.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,25 @@ public enum JunkCategoryType: String, CaseIterable, Identifiable, Sendable {

public var title: String {
switch self {
case .systemCache: return "Sistem ve Uygulama Önbelleği"
case .systemLogs: return "Sistem ve Hata Günlükleri"
case .developerCache: return "Geliştirici & Build Kalıntıları"
case .browserCache: return "Tarayıcı Önbellekleri"
case .trashBin: return "Çöp Sepeti"
case .largeFiles: return "Büyük ve Eski Dosyalar"
case .appLeftovers: return "Kaldırılmış Uygulama Kalıntıları"
case .systemCache: return L10n.string("System and App Cache", table: .services)
case .systemLogs: return L10n.string("System and Error Logs", table: .services)
case .developerCache: return L10n.string("Developer & Build Leftovers", table: .services)
case .browserCache: return L10n.string("Browser Caches", table: .services)
case .trashBin: return L10n.string("Trash", table: .services)
case .largeFiles: return L10n.string("Large and Old Files", table: .services)
case .appLeftovers: return L10n.string("Removed App Leftovers", table: .services)
}
}

public var description: String {
switch self {
case .systemCache: return "Uygulamalar ve macOS tarafından oluşturulan geçici önbellek dosyaları."
case .systemLogs: return "Eski sistem çökme raporları, hata logları ve tanı dosyaları."
case .developerCache: return "Xcode DerivedData, Archives, DeviceSupport, Node/NPM, CocoaPods ve Cargo önbellekleri."
case .browserCache: return "Safari, Chrome, Arc, Firefox ve Edge tarayıcılarının web önbellekleri."
case .trashBin: return "Kullanıcı çöp kutusunda bekleyen silinmiş dosyalar."
case .largeFiles: return "İndirilenler ve Belgeler'de yer kaplayan büyük boyutlu dosyalar (>100 MB)."
case .appLeftovers: return "Silinmiş uygulamalardan geriye kalan artık klasör ve ayar dosyaları."
case .systemCache: return L10n.string("Temporary cache files created by apps and macOS.", table: .services)
case .systemLogs: return L10n.string("Old system crash reports, error logs, and diagnostic files.", table: .services)
case .developerCache: return L10n.string("Xcode DerivedData, Archives, DeviceSupport, Node/NPM, CocoaPods, and Cargo caches.", table: .services)
case .browserCache: return L10n.string("Web caches of the Safari, Chrome, Arc, Firefox, and Edge browsers.", table: .services)
case .trashBin: return L10n.string("Deleted files waiting in the user's Trash.", table: .services)
case .largeFiles: return L10n.string("Large files (>100 MB) taking up space in Downloads and Documents.", table: .services)
case .appLeftovers: return L10n.string("Leftover folders and settings files from deleted apps.", table: .services)
}
}

Expand Down
106 changes: 106 additions & 0 deletions Sources/MacOptimizer/Resources/en.lproj/services.strings
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,109 @@
"Critical" = "Critical";
"Warning" = "Warning";
"Secure" = "Secure";
"Trash must be emptied separately with explicit confirmation: %@" = "Trash must be emptied separately with explicit confirmation: %@";
"Protected file was not added to the plan: %@" = "Protected file was not added to the plan: %@";
"Cleanup Complete" = "Cleanup Complete";
"Scanning junk files..." = "Scanning junk files...";
"Scan Complete" = "Scan Complete";
"System Crash & Diagnostic Reports" = "System Crash & Diagnostic Reports";
"Xcode Archives" = "Xcode Archives";
"Simulator Caches" = "Simulator Caches";
"NPM Cache" = "NPM Cache";
"Yarn Cache" = "Yarn Cache";
"Rust Cargo Cache" = "Rust Cargo Cache";
"CocoaPods Cache" = "CocoaPods Cache";
"Gradle Cache" = "Gradle Cache";
"Python pip Cache" = "Python pip Cache";
"Homebrew Download Cache" = "Homebrew Download Cache";
"Python UV Cache" = "Python UV Cache";
"Python Poetry Cache" = "Python Poetry Cache";
"Build and index caches" = "Build and index caches";
"Old app build archives" = "Old app build archives";
"Old iOS device symbols" = "Old iOS device symbols";
"Old watchOS device symbols" = "Old watchOS device symbols";
"iOS Simulator temporary files" = "iOS Simulator temporary files";
"Node Package Manager cache" = "Node Package Manager cache";
"Yarn package cache" = "Yarn package cache";
"pnpm global package store" = "pnpm global package store";
"Cargo crate cache files" = "Cargo crate cache files";
"iOS Pods download caches" = "iOS Pods download caches";
"Android and Java build caches" = "Android and Java build caches";
"Python package download caches" = "Python package download caches";
"Downloaded formulae and bottle packages" = "Downloaded formulae and bottle packages";
"UV package manager cache" = "UV package manager cache";
"Poetry virtual environments and package store" = "Poetry virtual environments and package store";
"Safari Web Cache" = "Safari Web Cache";
"Safari Container Cache" = "Safari Container Cache";
"Google Chrome Cache" = "Google Chrome Cache";
"Arc Browser Cache" = "Arc Browser Cache";
"Brave Browser Cache" = "Brave Browser Cache";
"Microsoft Edge Cache" = "Microsoft Edge Cache";
"Mozilla Firefox Cache" = "Mozilla Firefox Cache";
"In Trash" = "In Trash";
"%@ / %@ File" = "%@ / %@ File";
"Deleted app leftover (Application Support)" = "Deleted app leftover (Application Support)";
"System and App Cache" = "System and App Cache";
"System and Error Logs" = "System and Error Logs";
"Developer & Build Leftovers" = "Developer & Build Leftovers";
"Browser Caches" = "Browser Caches";
"Trash" = "Trash";
"Large and Old Files" = "Large and Old Files";
"Removed App Leftovers" = "Removed App Leftovers";
"Temporary cache files created by apps and macOS." = "Temporary cache files created by apps and macOS.";
"Old system crash reports, error logs, and diagnostic files." = "Old system crash reports, error logs, and diagnostic files.";
"Xcode DerivedData, Archives, DeviceSupport, Node/NPM, CocoaPods, and Cargo caches." = "Xcode DerivedData, Archives, DeviceSupport, Node/NPM, CocoaPods, and Cargo caches.";
"Web caches of the Safari, Chrome, Arc, Firefox, and Edge browsers." = "Web caches of the Safari, Chrome, Arc, Firefox, and Edge browsers.";
"Deleted files waiting in the user's Trash." = "Deleted files waiting in the user's Trash.";
"Large files (>100 MB) taking up space in Downloads and Documents." = "Large files (>100 MB) taking up space in Downloads and Documents.";
"Leftover folders and settings files from deleted apps." = "Leftover folders and settings files from deleted apps.";
"Other" = "Other";
"Direct Check" = "Direct Check";
"Downloads" = "Downloads";
"Documents" = "Documents";
"Pictures" = "Pictures";
"Desktop" = "Desktop";
"Scanning files and indexing sizes..." = "Scanning files and indexing sizes...";
"No duplicate files found." = "No duplicate files found.";
"Computing SHA-256: %@" = "Computing SHA-256: %@";
"High Memory Pressure Warning" = "High Memory Pressure Warning";
"RAM usage has reached %lld%%. Try closing the apps using the most memory to reduce memory pressure." = "RAM usage has reached %lld%%. Try closing the apps using the most memory to reduce memory pressure.";
"Runaway Process: %@" = "Runaway Process: %@";
"%@ (PID: %d) is continuously consuming %@ CPU. It may be frozen or overloaded." = "%@ (PID: %d) is continuously consuming %@ CPU. It may be frozen or overloaded.";
"Terminate Process" = "Terminate Process";
"Thermal Throttling / Temperature Warning" = "Thermal Throttling / Temperature Warning";
"CPU temperature has reached a critical threshold (%@). Close apps with high CPU usage to protect the hardware." = "CPU temperature has reached a critical threshold (%@). Close apps with high CPU usage to protect the hardware.";
"High Swap Usage" = "High Swap Usage";
"%@ of virtual memory swap is in use on the system disk. Close heavy apps to reduce memory pressure." = "%@ of virtual memory swap is in use on the system disk. Close heavy apps to reduce memory pressure.";
"Low Disk Space Warning" = "Low Disk Space Warning";
"Only %@ of free space is left on the main disk. Clean unnecessary system caches to free up space." = "Only %@ of free space is left on the main disk. Clean unnecessary system caches to free up space.";
"Scan Junk Files" = "Scan Junk Files";
"App Bundle (Main File)" = "App Bundle (Main File)";
"Caches" = "Caches";
"Preferences" = "Preferences";
"Saved Application State" = "Saved Application State";
"App Sandbox Container" = "App Sandbox Container";
"WebKit Data" = "WebKit Data";
"HTTP Storage" = "HTTP Storage";
"App Logs" = "App Logs";
"Launch Service (LaunchAgent)" = "Launch Service (LaunchAgent)";
"Group Container" = "Group Container";
"%lld/%lld Apps Checked" = "%lld/%lld Apps Checked";
"Update Check Complete" = "Update Check Complete";
"Invalid Homebrew package name." = "Invalid Homebrew package name.";
"Homebrew not found." = "Homebrew not found.";
"%@ was updated via Homebrew." = "%@ was updated via Homebrew.";
"%@ could not be updated: %@" = "%@ could not be updated: %@";
"Scanning..." = "Scanning...";
"Complete" = "Complete";
"AC Adapter" = "AC Adapter";
"Battery" = "Battery";
"%lld h %lld min remaining" = "%lld h %lld min remaining";
"Until full: %lld h %lld min" = "Until full: %lld h %lld min";
"Charging" = "Charging";
"Calculating..." = "Calculating...";
"Service Recommended" = "Service Recommended";
"Poor Battery Health" = "Poor Battery Health";
"%lld d, %lld h" = "%lld d, %lld h";
"%lld h, %lld min" = "%lld h, %lld min";
"%lld min" = "%lld min";
106 changes: 106 additions & 0 deletions Sources/MacOptimizer/Resources/tr.lproj/services.strings
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,109 @@
"Critical" = "Kritik";
"Warning" = "Uyarı";
"Secure" = "Güvenli";
"Trash must be emptied separately with explicit confirmation: %@" = "Çöp Sepeti ayrı ve açık onayla boşaltılmalıdır: %@";
"Protected file was not added to the plan: %@" = "Korumalı dosya plana eklenmedi: %@";
"Cleanup Complete" = "Temizlik Tamamlandı";
"Scanning junk files..." = "Gereksiz dosyalar taranıyor...";
"Scan Complete" = "Tarama Tamamlandı";
"System Crash & Diagnostic Reports" = "Sistem Çökme & Tanı Raporları";
"Xcode Archives" = "Xcode Arşivleri";
"Simulator Caches" = "Simülatör Önbellekleri";
"NPM Cache" = "NPM Önbelleği";
"Yarn Cache" = "Yarn Önbelleği";
"Rust Cargo Cache" = "Rust Cargo Önbelleği";
"CocoaPods Cache" = "CocoaPods Önbelleği";
"Gradle Cache" = "Gradle Önbelleği";
"Python pip Cache" = "Python pip Önbelleği";
"Homebrew Download Cache" = "Homebrew İndirme Önbelleği";
"Python UV Cache" = "Python UV Önbelleği";
"Python Poetry Cache" = "Python Poetry Önbelleği";
"Build and index caches" = "Derleme ve indeks önbellekleri";
"Old app build archives" = "Eski uygulama derleme arşivleri";
"Old iOS device symbols" = "Eski iOS cihaz sembolleri";
"Old watchOS device symbols" = "Eski watchOS cihaz sembolleri";
"iOS Simulator temporary files" = "iOS Simülatör geçici dosyaları";
"Node Package Manager cache" = "Node Package Manager önbelleği";
"Yarn package cache" = "Yarn paket önbelleği";
"pnpm global package store" = "pnpm global paket havuzu";
"Cargo crate cache files" = "Cargo crates önbellek dosyaları";
"iOS Pods download caches" = "iOS Pods indirme önbellekleri";
"Android and Java build caches" = "Android ve Java derleme önbellekleri";
"Python package download caches" = "Python paket indirme önbellekleri";
"Downloaded formulae and bottle packages" = "İndirilen formül ve bottle paketleri";
"UV package manager cache" = "UV paket yöneticisi önbelleği";
"Poetry virtual environments and package store" = "Poetry sanal ortam ve paket havuzu";
"Safari Web Cache" = "Safari Web Önbelleği";
"Safari Container Cache" = "Safari Container Önbelleği";
"Google Chrome Cache" = "Google Chrome Önbelleği";
"Arc Browser Cache" = "Arc Tarayıcı Önbelleği";
"Brave Browser Cache" = "Brave Tarayıcı Önbelleği";
"Microsoft Edge Cache" = "Microsoft Edge Önbelleği";
"Mozilla Firefox Cache" = "Mozilla Firefox Önbelleği";
"In Trash" = "Çöp Sepetinde";
"%@ / %@ File" = "%@ / %@ Dosyası";
"Deleted app leftover (Application Support)" = "Silinmiş uygulama kalıntısı (Application Support)";
"System and App Cache" = "Sistem ve Uygulama Önbelleği";
"System and Error Logs" = "Sistem ve Hata Günlükleri";
"Developer & Build Leftovers" = "Geliştirici & Build Kalıntıları";
"Browser Caches" = "Tarayıcı Önbellekleri";
"Trash" = "Çöp Sepeti";
"Large and Old Files" = "Büyük ve Eski Dosyalar";
"Removed App Leftovers" = "Kaldırılmış Uygulama Kalıntıları";
"Temporary cache files created by apps and macOS." = "Uygulamalar ve macOS tarafından oluşturulan geçici önbellek dosyaları.";
"Old system crash reports, error logs, and diagnostic files." = "Eski sistem çökme raporları, hata logları ve tanı dosyaları.";
"Xcode DerivedData, Archives, DeviceSupport, Node/NPM, CocoaPods, and Cargo caches." = "Xcode DerivedData, Archives, DeviceSupport, Node/NPM, CocoaPods ve Cargo önbellekleri.";
"Web caches of the Safari, Chrome, Arc, Firefox, and Edge browsers." = "Safari, Chrome, Arc, Firefox ve Edge tarayıcılarının web önbellekleri.";
"Deleted files waiting in the user's Trash." = "Kullanıcı çöp kutusunda bekleyen silinmiş dosyalar.";
"Large files (>100 MB) taking up space in Downloads and Documents." = "İndirilenler ve Belgeler'de yer kaplayan büyük boyutlu dosyalar (>100 MB).";
"Leftover folders and settings files from deleted apps." = "Silinmiş uygulamalardan geriye kalan artık klasör ve ayar dosyaları.";
"Other" = "Diğer";
"Direct Check" = "Doğrudan Kontrol";
"Downloads" = "İndirilenler";
"Documents" = "Belgeler";
"Pictures" = "Resimler";
"Desktop" = "Masaüstü";
"Scanning files and indexing sizes..." = "Dosyalar taranıyor ve boyutlar indeksleniyor...";
"No duplicate files found." = "Yinelenen dosya bulunamadı.";
"Computing SHA-256: %@" = "SHA-256 hesaplanıyor: %@";
"High Memory Pressure Warning" = "Yüksek Bellek Baskısı Uyarısı";
"RAM usage has reached %lld%%. Try closing the apps using the most memory to reduce memory pressure." = "RAM kullanımı %%%lld seviyesine ulaştı. Bellek baskısını azaltmak için en çok bellek kullanan uygulamaları kapatmayı deneyin.";
"Runaway Process: %@" = "Kaçak Süreç: %@";
"%@ (PID: %d) is continuously consuming %@ CPU. It may be frozen or overloaded." = "%@ (PID: %d) sürekli olarak %%%@ işlemci tüketiyor. Donmuş veya aşırı yüklenmiş olabilir.";
"Terminate Process" = "İşlemi Sonlandır";
"Thermal Throttling / Temperature Warning" = "Termal Kısılma / Sıcaklık Uyarısı";
"CPU temperature has reached a critical threshold (%@). Close apps with high CPU usage to protect the hardware." = "İşlemci sıcaklığı kritik eşiğe ulaştı (%@). Donanımı korumak için yüksek işlemci kullanan uygulamaları kapatın.";
"High Swap Usage" = "Yüksek Swap (Takas Alanı) Kullanımı";
"%@ of virtual memory swap is in use on the system disk. Close heavy apps to reduce memory pressure." = "Sistem diski üzerinde %@ sanal bellek takası kullanılıyor. Bellek baskısını azaltmak için yoğun uygulamaları kapatın.";
"Low Disk Space Warning" = "Düşük Disk Alanı Uyarısı";
"Only %@ of free space is left on the main disk. Clean unnecessary system caches to free up space." = "Ana disk üzerinde yalnızca %@ boş alan kaldı. Alan kazanmak için gereksiz sistem önbelleklerini temizleyin.";
"Scan Junk Files" = "Gereksiz Dosyaları Tara";
"App Bundle (Main File)" = "Uygulama Paketi (Ana Dosya)";
"Caches" = "Önbellek (Caches)";
"Preferences" = "Tercihler (Preferences)";
"Saved Application State" = "Kayıtlı Uygulama Durumu";
"App Sandbox Container" = "Uygulama Sandbox Kapsayıcısı";
"WebKit Data" = "WebKit Verileri";
"HTTP Storage" = "HTTP Depolama";
"App Logs" = "Uygulama Günlükleri";
"Launch Service (LaunchAgent)" = "Başlangıç Servisi (LaunchAgent)";
"Group Container" = "Grup Kapsayıcısı (Group Container)";
"%lld/%lld Apps Checked" = "%lld/%lld Uygulama Kontrol Edildi";
"Update Check Complete" = "Güncelleme Kontrolü Tamamlandı";
"Invalid Homebrew package name." = "Geçersiz Homebrew paket adı.";
"Homebrew not found." = "Homebrew bulunamadı.";
"%@ was updated via Homebrew." = "%@ Homebrew üzerinden güncellendi.";
"%@ could not be updated: %@" = "%@ güncellenemedi: %@";
"Scanning..." = "Taranıyor...";
"Complete" = "Tamamlandı";
"AC Adapter" = "AC Adaptör";
"Battery" = "Pil";
"%lld h %lld min remaining" = "%lld sa %lld dk kaldı";
"Until full: %lld h %lld min" = "Dolmasına: %lld sa %lld dk";
"Charging" = "Şarj Oluyor";
"Calculating..." = "Hesaplanıyor...";
"Service Recommended" = "Servis Öneriliyor";
"Poor Battery Health" = "Pil Sağlığı Zayıf";
"%lld d, %lld h" = "%lld gün, %lld saat";
"%lld h, %lld min" = "%lld saat, %lld dk";
"%lld min" = "%lld dakika";
4 changes: 2 additions & 2 deletions Sources/MacOptimizer/Services/AppScannerService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,14 @@ public final class AppScannerService: Sendable {
}
processedCount += 1
let progress = Double(processedCount) / max(1.0, total)
progressHandler?(app?.name ?? "Taranıyor...", progress)
progressHandler?(app?.name ?? L10n.string("Scanning...", table: .services), progress)
}
}

index = endIndex
}

progressHandler?("Tamamlandı", 1.0)
progressHandler?(L10n.string("Complete", table: .services), 1.0)

// Sort user apps first, then alphabetically
return installedApps.sorted {
Expand Down
Loading
Loading