From 4f9ac507a38f50a64080042beffe19ea0d1ff226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Osman=20=C3=87a=C4=9Fr=C4=B1=20GEN=C3=87?= Date: Tue, 29 Sep 2026 01:28:03 +0300 Subject: [PATCH] feat(l10n): localize junk cleaner and duplicate finder screens Co-Authored-By: OpenCode --- .../Resources/en.lproj/cleanup.strings | 40 +++++++++++++++++++ .../Resources/en.lproj/cleanup.stringsdict | 25 ++++++++++++ .../Resources/tr.lproj/cleanup.strings | 40 +++++++++++++++++++ .../Resources/tr.lproj/cleanup.stringsdict | 25 ++++++++++++ .../DuplicateFinder/DuplicateFinderView.swift | 36 ++++++++--------- .../CleaningPlanPreviewModalView.swift | 26 ++++++------ .../Views/JunkCleaner/JunkCategoryCard.swift | 6 +-- .../Views/JunkCleaner/JunkCleanerView.swift | 18 ++++----- 8 files changed, 173 insertions(+), 43 deletions(-) diff --git a/Sources/MacOptimizer/Resources/en.lproj/cleanup.strings b/Sources/MacOptimizer/Resources/en.lproj/cleanup.strings index e6e2ae0..11f7e1b 100644 --- a/Sources/MacOptimizer/Resources/en.lproj/cleanup.strings +++ b/Sources/MacOptimizer/Resources/en.lproj/cleanup.strings @@ -40,3 +40,43 @@ "System" = "System"; "Startup Services Not Scanned" = "Startup Services Not Scanned"; "Start a scan to see the services and startup apps running in the background." = "Start a scan to see the services and startup apps running in the background."; +"Junk File & Disk Cleaner" = "Junk File & Disk Cleaner"; +"Total Found: %@ • Selected: %@" = "Total Found: %@ • Selected: %@"; +"Scan system caches, Xcode leftovers, logs, and browser data." = "Scan system caches, Xcode leftovers, logs, and browser data."; +"Cancel Scan" = "Cancel Scan"; +"Scan" = "Scan"; +"Cleaning..." = "Cleaning..."; +"Clean (%@)" = "Clean (%@)"; +"Junk Files Not Scanned Yet" = "Junk Files Not Scanned Yet"; +"Scan system caches, build leftovers, and logs to reclaim disk space." = "Scan system caches, build leftovers, and logs to reclaim disk space."; +"Start Scan" = "Start Scan"; +"(%lld items)" = "(%lld items)"; +"Selected: %@" = "Selected: %@"; +"Show in Finder" = "Show in Finder"; +"Cleaning Plan & Risk Preview (Dry-Run)" = "Cleaning Plan & Risk Preview (Dry-Run)"; +"A safety plan created before any changes are made on disk." = "A safety plan created before any changes are made on disk."; +"Space to be Reclaimed:" = "Space to be Reclaimed:"; +"Items to Clean:" = "Items to Clean:"; +"%lld Items" = "%lld Items"; +"Maximum Risk:" = "Maximum Risk:"; +"Zero-Harm Protection Shield Active" = "Zero-Harm Protection Shield Active"; +"Root system files, your personal documents, and critical macOS services are strictly protected. Files outside the cache are moved to the Trash safely." = "Root system files, your personal documents, and critical macOS services are strictly protected. Files outside the cache are moved to the Trash safely."; +"Plan Warnings" = "Plan Warnings"; +"• %@" = "• %@"; +"Files and Folders to Clean:" = "Files and Folders to Clean:"; +"Approve Plan and Clean (%@)" = "Approve Plan and Clean (%@)"; +"Delete Duplicate Files" = "Delete Duplicate Files"; +"%lld selected duplicate files will be moved to the Trash. Original files will be kept. Do you confirm?" = "%lld selected duplicate files will be moved to the Trash. Original files will be kept. Do you confirm?"; +"Move to Trash" = "Move to Trash"; +"Duplicate File Finder" = "Duplicate File Finder"; +"Find copy files with the same content (SHA-256) and free up gigabytes on your disk." = "Find copy files with the same content (SHA-256) and free up gigabytes on your disk."; +"Scan for Duplicates" = "Scan for Duplicates"; +"Folders to Scan:" = "Folders to Scan:"; +"Cancel the Scan" = "Cancel the Scan"; +"Total Space to be Reclaimed:" = "Total Space to be Reclaimed:"; +"Move Selected Copies to Trash (%lld Files)" = "Move Selected Copies to Trash (%lld Files)"; +"%lld Duplicate Files" = "%lld Duplicate Files"; +"Original (Kept)" = "Original (Kept)"; +"Copy" = "Copy"; +"Duplicate File Scan Not Run" = "Duplicate File Scan Not Run"; +"Start a scan to detect files with identical content in your Downloads, Documents, and Pictures folders." = "Start a scan to detect files with identical content in your Downloads, Documents, and Pictures folders."; diff --git a/Sources/MacOptimizer/Resources/en.lproj/cleanup.stringsdict b/Sources/MacOptimizer/Resources/en.lproj/cleanup.stringsdict index 3713a48..8f5e9b7 100644 --- a/Sources/MacOptimizer/Resources/en.lproj/cleanup.stringsdict +++ b/Sources/MacOptimizer/Resources/en.lproj/cleanup.stringsdict @@ -6,4 +6,29 @@ itemsNSStringFormatSpecTypeKeyNSStringPluralRuleTypeNSStringFormatValueTypeKeylld one%lld itemother%lld items +(%lld items) +NSStringLocalizedFormatKey(%#@count@) +countNSStringFormatSpecTypeKeyNSStringPluralRuleTypeNSStringFormatValueTypeKeylld +one(%lld item)other(%lld items) + +%lld Items +NSStringLocalizedFormatKey%#@count@ +countNSStringFormatSpecTypeKeyNSStringPluralRuleTypeNSStringFormatValueTypeKeylld +one%lld Itemother%lld Items + +%lld selected duplicate files will be moved to the Trash. Original files will be kept. Do you confirm? +NSStringLocalizedFormatKey%#@count@ selected duplicate files will be moved to the Trash. Original files will be kept. Do you confirm? +countNSStringFormatSpecTypeKeyNSStringPluralRuleTypeNSStringFormatValueTypeKeylld +one%lld selected duplicate file will be moved to the Trash. Original files will be kept. Do you confirm?other%lld selected duplicate files will be moved to the Trash. Original files will be kept. Do you confirm? + +Move Selected Copies to Trash (%lld Files) +NSStringLocalizedFormatKeyMove Selected Copies to Trash (%#@count@) +countNSStringFormatSpecTypeKeyNSStringPluralRuleTypeNSStringFormatValueTypeKeylld +oneMove Selected Copies to Trash (%lld File)otherMove Selected Copies to Trash (%lld Files) + +%lld Duplicate Files +NSStringLocalizedFormatKey%#@count@ +countNSStringFormatSpecTypeKeyNSStringPluralRuleTypeNSStringFormatValueTypeKeylld +one%lld Duplicate Fileother%lld Duplicate Files + diff --git a/Sources/MacOptimizer/Resources/tr.lproj/cleanup.strings b/Sources/MacOptimizer/Resources/tr.lproj/cleanup.strings index 78dfc4f..ad76bad 100644 --- a/Sources/MacOptimizer/Resources/tr.lproj/cleanup.strings +++ b/Sources/MacOptimizer/Resources/tr.lproj/cleanup.strings @@ -40,3 +40,43 @@ "System" = "Sistem"; "Startup Services Not Scanned" = "Başlangıç Servisleri Taranmadı"; "Start a scan to see the services and startup apps running in the background." = "Arka planda çalışan servisleri ve başlangıç uygulamalarını görmek için taramayı başlatın."; +"Junk File & Disk Cleaner" = "Gereksiz Dosya & Disk Temizleyici"; +"Total Found: %@ • Selected: %@" = "Toplam Bulunan: %@ • Seçili: %@"; +"Scan system caches, Xcode leftovers, logs, and browser data." = "Sistem önbellekleri, Xcode kalıntıları, loglar ve tarayıcı verilerini tarayın."; +"Cancel Scan" = "İptal"; +"Scan" = "Tara"; +"Cleaning..." = "Temizleniyor..."; +"Clean (%@)" = "Temizle (%@)"; +"Junk Files Not Scanned Yet" = "Gereksiz Dosyalar Henüz Taranmadı"; +"Scan system caches, build leftovers, and logs to reclaim disk space." = "Disk alanınızı geri kazanmak için sistem önbelleklerini, derleme kalıntılarını ve günlükleri tarayın."; +"Start Scan" = "Taramayı Başlat"; +"(%lld items)" = "(%lld öğe)"; +"Selected: %@" = "Seçili: %@"; +"Show in Finder" = "Finder'da Göster"; +"Cleaning Plan & Risk Preview (Dry-Run)" = "Temizlik Planı & Risk Önizlemesi (Dry-Run)"; +"A safety plan created before any changes are made on disk." = "Disk üzerinde değişiklik yapılmadan önce oluşturulan güvenlik planı."; +"Space to be Reclaimed:" = "Kazanılacak Alan:"; +"Items to Clean:" = "Temizlenecek Öğe:"; +"%lld Items" = "%lld Adet"; +"Maximum Risk:" = "Maksimum Risk:"; +"Zero-Harm Protection Shield Active" = "Zero-Harm Savunma Kalkanı Aktif"; +"Root system files, your personal documents, and critical macOS services are strictly protected. Files outside the cache are moved to the Trash safely." = "Kök sistem dosyaları, kişisel belgeleriniz ve kritik macOS servisleri kesinlikle korunmaktadır. Önbellek dışı dosyalar Çöp Sepeti korumalı olarak taşınır."; +"Plan Warnings" = "Plan Uyarıları"; +"• %@" = "• %@"; +"Files and Folders to Clean:" = "Temizlenecek Dosya ve Klasörler:"; +"Approve Plan and Clean (%@)" = "Planı Onayla ve Temizle (%@)"; +"Delete Duplicate Files" = "Yinelenen Dosyaları Sil"; +"%lld selected duplicate files will be moved to the Trash. Original files will be kept. Do you confirm?" = "Seçili %lld adet kopya dosya Çöp Sepetine taşınacaktır. Orijinal dosyalar korunacaktır. Onaylıyor musunuz?"; +"Move to Trash" = "Çöp Kutusuna Taşı"; +"Duplicate File Finder" = "Yinelenen Dosya Bulucu"; +"Find copy files with the same content (SHA-256) and free up gigabytes on your disk." = "Aynı içeriğe (SHA-256) sahip kopya dosyaları bularak diskinizde gigabaytlarca yer açın."; +"Scan for Duplicates" = "Yinelenenleri Tara"; +"Folders to Scan:" = "Taranacak Dizinler:"; +"Cancel the Scan" = "Taramayı İptal Et"; +"Total Space to be Reclaimed:" = "Kazanılacak Toplam Alan:"; +"Move Selected Copies to Trash (%lld Files)" = "Seçilen Kopyaları Çöpe Taşı (%lld Dosya)"; +"%lld Duplicate Files" = "%lld Kopya Dosya"; +"Original (Kept)" = "Orijinal (Korunuyor)"; +"Copy" = "Kopya"; +"Duplicate File Scan Not Run" = "Yinelenen Dosya Taraması Yapılmadı"; +"Start a scan to detect files with identical content in your Downloads, Documents, and Pictures folders." = "İndirilenler, Belgeler ve Resimler klasörlerindeki aynı içerikli dosyaları tespit etmek için taramayı başlatın."; diff --git a/Sources/MacOptimizer/Resources/tr.lproj/cleanup.stringsdict b/Sources/MacOptimizer/Resources/tr.lproj/cleanup.stringsdict index a894cd5..2b67dcb 100644 --- a/Sources/MacOptimizer/Resources/tr.lproj/cleanup.stringsdict +++ b/Sources/MacOptimizer/Resources/tr.lproj/cleanup.stringsdict @@ -6,4 +6,29 @@ itemsNSStringFormatSpecTypeKeyNSStringPluralRuleTypeNSStringFormatValueTypeKeylld one%lld öğeother%lld öğe +(%lld items) +NSStringLocalizedFormatKey(%#@count@) +countNSStringFormatSpecTypeKeyNSStringPluralRuleTypeNSStringFormatValueTypeKeylld +one(%lld öğe)other(%lld öğe) + +%lld Items +NSStringLocalizedFormatKey%#@count@ +countNSStringFormatSpecTypeKeyNSStringPluralRuleTypeNSStringFormatValueTypeKeylld +one%lld Adetother%lld Adet + +%lld selected duplicate files will be moved to the Trash. Original files will be kept. Do you confirm? +NSStringLocalizedFormatKeySeçili %#@count@ adet kopya dosya Çöp Sepetine taşınacaktır. Orijinal dosyalar korunacaktır. Onaylıyor musunuz? +countNSStringFormatSpecTypeKeyNSStringPluralRuleTypeNSStringFormatValueTypeKeylld +oneSeçili %lld adet kopya dosya Çöp Sepetine taşınacaktır. Orijinal dosyalar korunacaktır. Onaylıyor musunuz?otherSeçili %lld adet kopya dosya Çöp Sepetine taşınacaktır. Orijinal dosyalar korunacaktır. Onaylıyor musunuz? + +Move Selected Copies to Trash (%lld Files) +NSStringLocalizedFormatKeySeçilen Kopyaları Çöpe Taşı (%#@count@ Dosya) +countNSStringFormatSpecTypeKeyNSStringPluralRuleTypeNSStringFormatValueTypeKeylld +oneSeçilen Kopyaları Çöpe Taşı (%lld Dosya)otherSeçilen Kopyaları Çöpe Taşı (%lld Dosya) + +%lld Duplicate Files +NSStringLocalizedFormatKey%#@count@ +countNSStringFormatSpecTypeKeyNSStringPluralRuleTypeNSStringFormatValueTypeKeylld +one%lld Kopya Dosyaother%lld Kopya Dosya + diff --git a/Sources/MacOptimizer/Views/DuplicateFinder/DuplicateFinderView.swift b/Sources/MacOptimizer/Views/DuplicateFinder/DuplicateFinderView.swift index f721df3..fef4940 100644 --- a/Sources/MacOptimizer/Views/DuplicateFinder/DuplicateFinderView.swift +++ b/Sources/MacOptimizer/Views/DuplicateFinder/DuplicateFinderView.swift @@ -33,12 +33,12 @@ public struct DuplicateFinderView: View { .background(Color(NSColor.windowBackgroundColor).opacity(0.5)) .alert(isPresented: $showConfirmDelete) { Alert( - title: Text("Yinelenen Dosyaları Sil"), - message: Text("Seçili \(selectedDuplicatesCount) adet kopya dosya Çöp Sepetine taşınacaktır. Orijinal dosyalar korunacaktır. Onaylıyor musunuz?"), - primaryButton: .destructive(Text("Çöp Kutusuna Taşı")) { + title: Text(l10n: "Delete Duplicate Files", table: .cleanup), + message: Text(L10n.string("%lld selected duplicate files will be moved to the Trash. Original files will be kept. Do you confirm?", table: .cleanup, Int64(selectedDuplicatesCount))), + primaryButton: .destructive(Text(l10n: "Move to Trash", table: .cleanup)) { appState.cleanDuplicates() }, - secondaryButton: .cancel(Text("Vazgeç")) + secondaryButton: .cancel(Text(L10n.string("Cancel", table: .cleanup))) ) } } @@ -59,11 +59,11 @@ public struct DuplicateFinderView: View { } VStack(alignment: .leading, spacing: 3) { - Text("Yinelenen Dosya Bulucu") + Text(l10n: "Duplicate File Finder", table: .cleanup) .font(.system(size: 16, weight: .bold)) .lineLimit(1) - Text("Aynı içeriğe (SHA-256) sahip kopya dosyaları bularak diskinizde gigabaytlarca yer açın.") + Text(l10n: "Find copy files with the same content (SHA-256) and free up gigabytes on your disk.", table: .cleanup) .font(.system(size: 12)) .foregroundColor(.secondary) .lineLimit(2) @@ -72,7 +72,7 @@ public struct DuplicateFinderView: View { Spacer(minLength: 12) ActionButton( - title: appState.isScanningDuplicates ? "Taranıyor..." : "Yinelenenleri Tara", + title: appState.isScanningDuplicates ? L10n.string("Scanning...", table: .cleanup) : L10n.string("Scan for Duplicates", table: .cleanup), iconName: "magnifyingglass", gradient: SystemTheme.junkGradient, isLoading: appState.isScanningDuplicates @@ -83,7 +83,7 @@ public struct DuplicateFinderView: View { // Target Folders Filter Chips HStack(spacing: 8) { - Text("Taranacak Dizinler:") + Text(l10n: "Folders to Scan:", table: .cleanup) .font(.system(size: 11, weight: .semibold)) .foregroundColor(.secondary) @@ -132,7 +132,7 @@ public struct DuplicateFinderView: View { .lineLimit(1) .truncationMode(.middle) - Button("Taramayı İptal Et") { + Button(L10n.string("Cancel the Scan", table: .cleanup)) { appState.cancelDuplicateScan() } .buttonStyle(.plain) @@ -162,7 +162,7 @@ public struct DuplicateFinderView: View { GlassCard(cornerRadius: 14, padding: 14) { HStack { VStack(alignment: .leading, spacing: 2) { - Text("Kazanılacak Toplam Alan:") + Text(l10n: "Total Space to be Reclaimed:", table: .cleanup) .font(.system(size: 11)) .foregroundColor(.secondary) @@ -174,7 +174,7 @@ public struct DuplicateFinderView: View { Spacer() ActionButton( - title: appState.isCleaningDuplicates ? "Temizleniyor..." : "Seçilen Kopyaları Çöpe Taşı (\(selectedDuplicatesCount) Dosya)", + title: appState.isCleaningDuplicates ? L10n.string("Cleaning...", table: .cleanup) : L10n.string("Move Selected Copies to Trash (%lld Files)", table: .cleanup, Int64(selectedDuplicatesCount)), iconName: "trash.fill", gradient: SystemTheme.dangerGradient, isLoading: appState.isCleaningDuplicates @@ -204,14 +204,14 @@ public struct DuplicateFinderView: View { Spacer() - Text("\(group.wrappedValue.duplicates.count) Kopya Dosya") + Text(L10n.string("%lld Duplicate Files", table: .cleanup, Int64(group.wrappedValue.duplicates.count))) .font(.system(size: 11, weight: .medium)) .foregroundColor(.secondary) } // Original File (Preserved) HStack(spacing: 8) { - MetricBadge(text: "Orijinal (Korunuyor)", colorName: "green") + MetricBadge(text: L10n.string("Original (Kept)", table: .cleanup), colorName: "green") Text(group.wrappedValue.original.path) .font(.system(size: 10)) @@ -228,7 +228,7 @@ public struct DuplicateFinderView: View { .foregroundColor(.secondary) } .buttonStyle(.plain) - .help("Finder'da Göster") + .help(L10n.string("Show in Finder", table: .cleanup)) } .padding(6) .background(Color.green.opacity(0.06)) @@ -245,7 +245,7 @@ public struct DuplicateFinderView: View { } .buttonStyle(.plain) - MetricBadge(text: "Kopya", colorName: "purple") + MetricBadge(text: L10n.string("Copy", table: .cleanup), colorName: "purple") Text(dup.path) .font(.system(size: 10)) @@ -281,17 +281,17 @@ public struct DuplicateFinderView: View { .font(.system(size: 44)) .foregroundStyle(SystemTheme.junkGradient) - Text(appState.duplicateStatusMessage.isEmpty ? "Yinelenen Dosya Taraması Yapılmadı" : appState.duplicateStatusMessage) + Text(appState.duplicateStatusMessage.isEmpty ? L10n.string("Duplicate File Scan Not Run", table: .cleanup) : appState.duplicateStatusMessage) .font(.system(size: 16, weight: .bold)) - Text("İndirilenler, Belgeler ve Resimler klasörlerindeki aynı içerikli dosyaları tespit etmek için taramayı başlatın.") + Text(l10n: "Start a scan to detect files with identical content in your Downloads, Documents, and Pictures folders.", table: .cleanup) .font(.system(size: 12)) .foregroundColor(.secondary) .multilineTextAlignment(.center) .frame(maxWidth: 420) ActionButton( - title: "Taramayı Başlat", + title: L10n.string("Start Scan", table: .cleanup), iconName: "magnifyingglass", gradient: SystemTheme.junkGradient ) { diff --git a/Sources/MacOptimizer/Views/JunkCleaner/CleaningPlanPreviewModalView.swift b/Sources/MacOptimizer/Views/JunkCleaner/CleaningPlanPreviewModalView.swift index 43fc987..59b3e13 100644 --- a/Sources/MacOptimizer/Views/JunkCleaner/CleaningPlanPreviewModalView.swift +++ b/Sources/MacOptimizer/Views/JunkCleaner/CleaningPlanPreviewModalView.swift @@ -51,9 +51,9 @@ public struct CleaningPlanPreviewModalView: View { .foregroundColor(.blue) VStack(alignment: .leading, spacing: 2) { - Text("Temizlik Planı & Risk Önizlemesi (Dry-Run)") + Text(l10n: "Cleaning Plan & Risk Preview (Dry-Run)", table: .cleanup) .font(.system(size: 15, weight: .bold)) - Text("Disk üzerinde değişiklik yapılmadan önce oluşturulan güvenlik planı.") + Text(l10n: "A safety plan created before any changes are made on disk.", table: .cleanup) .font(.system(size: 11)) .foregroundColor(.secondary) } @@ -79,7 +79,7 @@ public struct CleaningPlanPreviewModalView: View { GlassCard(cornerRadius: 12, padding: 14) { HStack(spacing: 16) { VStack(alignment: .leading, spacing: 4) { - Text("Kazanılacak Alan:") + Text(l10n: "Space to be Reclaimed:", table: .cleanup) .font(.system(size: 11)) .foregroundColor(.secondary) Text(ByteFormatter.format(plan.selectedEstimatedBytes)) @@ -91,10 +91,10 @@ public struct CleaningPlanPreviewModalView: View { .frame(height: 32) VStack(alignment: .leading, spacing: 4) { - Text("Temizlenecek Öğe:") + Text(l10n: "Items to Clean:", table: .cleanup) .font(.system(size: 11)) .foregroundColor(.secondary) - Text("\(plan.selectedCount) Adet") + Text(L10n.string("%lld Items", table: .cleanup, Int64(plan.selectedCount))) .font(.system(size: 18, weight: .bold, design: .rounded)) .foregroundColor(.primary) } @@ -103,7 +103,7 @@ public struct CleaningPlanPreviewModalView: View { .frame(height: 32) VStack(alignment: .leading, spacing: 4) { - Text("Maksimum Risk:") + Text(l10n: "Maximum Risk:", table: .cleanup) .font(.system(size: 11)) .foregroundColor(.secondary) @@ -130,10 +130,10 @@ public struct CleaningPlanPreviewModalView: View { .foregroundColor(.green) VStack(alignment: .leading, spacing: 2) { - Text("Zero-Harm Savunma Kalkanı Aktif") + Text(l10n: "Zero-Harm Protection Shield Active", table: .cleanup) .font(.system(size: 12, weight: .bold)) .foregroundColor(.primary) - Text("Kök sistem dosyaları, kişisel belgeleriniz ve kritik macOS servisleri kesinlikle korunmaktadır. Önbellek dışı dosyalar Çöp Sepeti korumalı olarak taşınır.") + Text(l10n: "Root system files, your personal documents, and critical macOS services are strictly protected. Files outside the cache are moved to the Trash safely.", table: .cleanup) .font(.system(size: 11)) .foregroundColor(.secondary) } @@ -146,12 +146,12 @@ public struct CleaningPlanPreviewModalView: View { // MARK: - Warnings Box private var warningsBox: some View { VStack(alignment: .leading, spacing: 6) { - Label("Plan Uyarıları", systemImage: "exclamationmark.triangle.fill") + Label(L10n.string("Plan Warnings", table: .cleanup), systemImage: "exclamationmark.triangle.fill") .font(.system(size: 12, weight: .bold)) .foregroundColor(.orange) ForEach(plan.warnings, id: \.self) { warning in - Text("• \(warning)") + Text(L10n.string("• %@", table: .cleanup, warning)) .font(.system(size: 11)) .foregroundColor(.secondary) } @@ -165,7 +165,7 @@ public struct CleaningPlanPreviewModalView: View { // MARK: - Planned Items Section private var plannedItemsSection: some View { VStack(alignment: .leading, spacing: 10) { - Text("Temizlenecek Dosya ve Klasörler:") + Text(l10n: "Files and Folders to Clean:", table: .cleanup) .font(.system(size: 13, weight: .bold)) VStack(spacing: 6) { @@ -211,7 +211,7 @@ public struct CleaningPlanPreviewModalView: View { // MARK: - Footer private var footerBar: some View { HStack { - Button("Vazgeç") { + Button(L10n.string("Cancel", table: .cleanup)) { onDismiss() } .keyboardShortcut(.cancelAction) @@ -219,7 +219,7 @@ public struct CleaningPlanPreviewModalView: View { Spacer() ActionButton( - title: "Planı Onayla ve Temizle (\(ByteFormatter.format(plan.selectedEstimatedBytes)))", + title: L10n.string("Approve Plan and Clean (%@)", table: .cleanup, ByteFormatter.format(plan.selectedEstimatedBytes)), iconName: "trash.fill", gradient: SystemTheme.junkGradient, isLoading: appState.isCleaningJunk diff --git a/Sources/MacOptimizer/Views/JunkCleaner/JunkCategoryCard.swift b/Sources/MacOptimizer/Views/JunkCleaner/JunkCategoryCard.swift index 8dc122d..b7cb54d 100644 --- a/Sources/MacOptimizer/Views/JunkCleaner/JunkCategoryCard.swift +++ b/Sources/MacOptimizer/Views/JunkCleaner/JunkCategoryCard.swift @@ -34,7 +34,7 @@ public struct JunkCategoryCard: View { Text(group.type.title) .font(.system(size: 14, weight: .bold)) - Text("(\(group.items.count) öğe)") + Text(L10n.string("(%lld items)", table: .cleanup, Int64(group.items.count))) .font(.system(size: 11)) .foregroundColor(.secondary) } @@ -54,7 +54,7 @@ public struct JunkCategoryCard: View { .foregroundColor(.primary) if group.selectedCount > 0 && group.selectedCount < group.items.count { - Text("Seçili: \(group.selectedFormatted)") + Text(L10n.string("Selected: %@", table: .cleanup, group.selectedFormatted)) .font(.system(size: 10)) .foregroundColor(.blue) } @@ -117,7 +117,7 @@ public struct JunkCategoryCard: View { .foregroundColor(.secondary) } .buttonStyle(.plain) - .help("Finder'da Göster") + .help(L10n.string("Show in Finder", table: .cleanup)) } .padding(.horizontal, 6) .padding(.vertical, 4) diff --git a/Sources/MacOptimizer/Views/JunkCleaner/JunkCleanerView.swift b/Sources/MacOptimizer/Views/JunkCleaner/JunkCleanerView.swift index d188503..520ca18 100644 --- a/Sources/MacOptimizer/Views/JunkCleaner/JunkCleanerView.swift +++ b/Sources/MacOptimizer/Views/JunkCleaner/JunkCleanerView.swift @@ -64,17 +64,17 @@ public struct JunkCleanerView: View { } VStack(alignment: .leading, spacing: 3) { - Text("Gereksiz Dosya & Disk Temizleyici") + Text(l10n: "Junk File & Disk Cleaner", table: .cleanup) .font(.system(size: 16, weight: .bold)) .lineLimit(1) if totalJunkBytes > 0 { - Text("Toplam Bulunan: \(ByteFormatter.format(totalJunkBytes)) • Seçili: \(ByteFormatter.format(selectedJunkBytes))") + Text(L10n.string("Total Found: %@ • Selected: %@", table: .cleanup, ByteFormatter.format(totalJunkBytes), ByteFormatter.format(selectedJunkBytes))) .font(.system(size: 12, weight: .semibold)) .foregroundColor(.purple) .lineLimit(1) } else { - Text("Sistem önbellekleri, Xcode kalıntıları, loglar ve tarayıcı verilerini tarayın.") + Text(l10n: "Scan system caches, Xcode leftovers, logs, and browser data.", table: .cleanup) .font(.system(size: 12)) .foregroundColor(.secondary) .lineLimit(1) @@ -90,7 +90,7 @@ public struct JunkCleanerView: View { AnimatedProgressBar(progress: appState.junkScanProgress, gradient: SystemTheme.junkGradient, height: 5) if appState.isScanningJunk { - Button("İptal") { + Button(L10n.string("Cancel Scan", table: .cleanup)) { appState.cancelJunkScan() } .buttonStyle(.plain) @@ -110,7 +110,7 @@ public struct JunkCleanerView: View { } label: { HStack(spacing: 6) { Image(systemName: "magnifyingglass") - Text("Tara") + Text(l10n: "Scan", table: .cleanup) } .font(.system(size: 12, weight: .semibold)) .padding(.horizontal, 14) @@ -123,7 +123,7 @@ public struct JunkCleanerView: View { if selectedJunkBytes > 0 { ActionButton( - title: appState.isCleaningJunk ? "Temizleniyor..." : "Temizle (\(ByteFormatter.format(selectedJunkBytes)))", + title: appState.isCleaningJunk ? L10n.string("Cleaning...", table: .cleanup) : L10n.string("Clean (%@)", table: .cleanup, ByteFormatter.format(selectedJunkBytes)), iconName: "trash.fill", gradient: SystemTheme.junkGradient, isLoading: appState.isCleaningJunk @@ -161,17 +161,17 @@ public struct JunkCleanerView: View { .font(.system(size: 48)) .foregroundStyle(SystemTheme.junkGradient) - Text("Gereksiz Dosyalar Henüz Taranmadı") + Text(l10n: "Junk Files Not Scanned Yet", table: .cleanup) .font(.system(size: 16, weight: .bold)) - Text("Disk alanınızı geri kazanmak için sistem önbelleklerini, derleme kalıntılarını ve günlükleri tarayın.") + Text(l10n: "Scan system caches, build leftovers, and logs to reclaim disk space.", table: .cleanup) .font(.system(size: 13)) .foregroundColor(.secondary) .multilineTextAlignment(.center) .frame(maxWidth: 400) ActionButton( - title: "Taramayı Başlat", + title: L10n.string("Start Scan", table: .cleanup), iconName: "magnifyingglass", gradient: SystemTheme.junkGradient ) {