From 60587cf2d61bfb96e19b4c6b3cf42ecb48fdebd0 Mon Sep 17 00:00:00 2001 From: 0x00kh <0x00kh@t.edu.vn> Date: Mon, 28 Sep 2026 19:48:15 +0800 Subject: [PATCH] Expand runtime localization and complete Simplified Chinese support across cleanup and maintenance tools Localize dynamic statuses, progress, dialogs, errors, permissions, and Time Machine snapshot workflows. Add locale fallbacks and validate format placeholders to prevent malformed translations. --- PureMac.xcodeproj/project.pbxproj | 4 + PureMac/Services/ApplicationUpdater.swift | 24 +- PureMac/Services/DuplicateFinder.swift | 26 +- PureMac/Services/PerformanceInspector.swift | 46 +- PureMac/Services/ProtectionAudit.swift | 30 +- PureMac/Services/SimilarPhotoFinder.swift | 2 +- PureMac/Services/StorageExplorer.swift | 10 +- PureMac/ViewModels/AppState.swift | 12 +- PureMac/Views/CategoryDetailView.swift | 14 +- PureMac/Views/DashboardView.swift | 6 +- PureMac/Views/Tools/AppUpdatesView.swift | 22 +- PureMac/Views/Tools/DuplicateFinderView.swift | 28 +- PureMac/Views/Tools/PerformanceView.swift | 24 +- PureMac/Views/Tools/ProtectionView.swift | 36 +- PureMac/Views/Tools/SimilarPhotosView.swift | 40 +- PureMac/Views/Tools/SpaceExplorerView.swift | 38 +- PureMac/ar.lproj/Localizable.strings | 407 ++++++++++++ PureMac/en.lproj/Localizable.strings | 407 ++++++++++++ PureMac/es.lproj/Localizable.strings | 407 ++++++++++++ PureMac/fr.lproj/Localizable.strings | 407 ++++++++++++ PureMac/ja.lproj/Localizable.strings | 407 ++++++++++++ PureMac/pl.lproj/Localizable.strings | 407 ++++++++++++ PureMac/pt-BR.lproj/Localizable.strings | 407 ++++++++++++ PureMac/ru.lproj/Localizable.strings | 407 ++++++++++++ PureMac/uk.lproj/Localizable.strings | 407 ++++++++++++ PureMac/zh-Hans.lproj/InfoPlist.strings | 8 + PureMac/zh-Hans.lproj/Localizable.strings | 601 +++++++++++++++--- PureMac/zh-Hans.lproj/ServicesMenu.strings | 1 + PureMac/zh-Hant.lproj/Localizable.strings | 407 ++++++++++++ PureMacTests/LocalizationFilesTests.swift | 20 +- 30 files changed, 4781 insertions(+), 281 deletions(-) create mode 100644 PureMac/zh-Hans.lproj/InfoPlist.strings create mode 100644 PureMac/zh-Hans.lproj/ServicesMenu.strings diff --git a/PureMac.xcodeproj/project.pbxproj b/PureMac.xcodeproj/project.pbxproj index 8387067..78d4267 100644 --- a/PureMac.xcodeproj/project.pbxproj +++ b/PureMac.xcodeproj/project.pbxproj @@ -205,6 +205,8 @@ F661A0F64CF93E482CB1728F /* DashboardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashboardView.swift; sourceTree = ""; }; F77B9D7D5353CD42BD03ADBB /* ApplicationUpdaterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationUpdaterTests.swift; sourceTree = ""; }; F9DCBD97CC88D77AE8DB01A4 /* PermissionCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionCoordinator.swift; sourceTree = ""; }; + A10FC6CEEEB75992ADCA4C01 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; + A10FC6CEEEB75992ADCA4C02 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/ServicesMenu.strings"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -683,6 +685,7 @@ 25D1CF5248C1D471BCBD212F /* fr */, 6ED5C9C10C69C3143B1F5CA6 /* ru */, 374A3BE46E71E54B6927E9EF /* uk */, + A10FC6CEEEB75992ADCA4C02 /* zh-Hans */, ); name = ServicesMenu.strings; sourceTree = ""; @@ -694,6 +697,7 @@ 0A544093C897FBCBA8E256F9 /* fr */, ED0C4D8912DA94F81B2AEF8F /* ru */, DFC4A1FD7DB92C82725B4314 /* uk */, + A10FC6CEEEB75992ADCA4C01 /* zh-Hans */, ); name = InfoPlist.strings; sourceTree = ""; diff --git a/PureMac/Services/ApplicationUpdater.swift b/PureMac/Services/ApplicationUpdater.swift index 8a31b81..0fe5e1a 100644 --- a/PureMac/Services/ApplicationUpdater.swift +++ b/PureMac/Services/ApplicationUpdater.swift @@ -34,19 +34,19 @@ enum ApplicationUpdaterError: LocalizedError, Equatable { var errorDescription: String? { switch self { case .homebrewNotInstalled: - return "Homebrew was not found in a standard installation location." + return String(localized: "Homebrew was not found in a standard installation location.") case .invalidResponse: - return "Homebrew returned update information PureMac could not read." + return String(localized: "Homebrew returned update information PureMac could not read.") case .invalidCaskIdentifier(let token): - return "Homebrew returned an invalid cask identifier: \(token)" + return String(localized: "Homebrew returned an invalid cask identifier: \(token)") case .noSelection: - return "Select at least one app to update." + return String(localized: "Select at least one app to update.") case .commandFailed(let message): return message case .timedOut: - return "Homebrew did not finish before the operation timed out." + return String(localized: "Homebrew did not finish before the operation timed out.") case .outputLimitExceeded: - return "Homebrew produced more output than PureMac could safely retain." + return String(localized: "Homebrew produced more output than PureMac could safely retain.") } } } @@ -152,17 +152,17 @@ final class ApplicationUpdater: ObservableObject { selectedTokens.formIntersection(Set(updates.filter { !$0.isPinned }.map(\.token))) if remaining.isEmpty { statusMessage = tokens.count == 1 - ? "Homebrew updated the selected app." - : "Homebrew updated the \(tokens.count) selected apps." + ? String(localized: "Homebrew updated the selected app.") + : String(localized: "Homebrew updated the \(tokens.count) selected apps.") } else { statusMessage = remaining.count == 1 - ? "Homebrew finished, but 1 selected app still reports an update." - : "Homebrew finished, but \(remaining.count) selected apps still report updates." + ? String(localized: "Homebrew finished, but 1 selected app still reports an update.") + : String(localized: "Homebrew finished, but \(remaining.count) selected apps still report updates.") } } catch is CancellationError { - statusMessage = "Homebrew finished. Check again to verify installed versions." + statusMessage = String(localized: "Homebrew finished. Check again to verify installed versions.") } catch { - statusMessage = "Homebrew finished. Check again to verify installed versions." + statusMessage = String(localized: "Homebrew finished. Check again to verify installed versions.") errorMessage = Self.displayMessage(for: error) } } catch is CancellationError { diff --git a/PureMac/Services/DuplicateFinder.swift b/PureMac/Services/DuplicateFinder.swift index 5f3bebb..2a8334c 100644 --- a/PureMac/Services/DuplicateFinder.swift +++ b/PureMac/Services/DuplicateFinder.swift @@ -55,13 +55,13 @@ enum DuplicateSkipReason: String, Hashable, Sendable { var label: String { switch self { - case .symbolicLink: return "Symbolic link" - case .package: return "Package contents" - case .cloudPlaceholder: return "Cloud-only file" - case .hardLink: return "Hard-linked copy" - case .inaccessible: return "Access denied" - case .changedDuringScan: return "Changed during scan" - case .unreadable: return "Could not read" + case .symbolicLink: return String(localized: "Symbolic link") + case .package: return String(localized: "Package contents") + case .cloudPlaceholder: return String(localized: "Cloud-only file") + case .hardLink: return String(localized: "Hard-linked copy") + case .inaccessible: return String(localized: "Access denied") + case .changedDuringScan: return String(localized: "Changed during scan") + case .unreadable: return String(localized: "Could not read") } } } @@ -128,15 +128,15 @@ enum DuplicateFinderError: LocalizedError, Equatable { var errorDescription: String? { switch self { case .invalidFolder(let path): - return "The selected folder cannot be scanned: \(path)" + return String(localized: "The selected folder cannot be scanned: \(path)") case .invalidSelection(let path): - return "The protected copy cannot be moved to Trash: \(path)" + return String(localized: "The protected copy cannot be moved to Trash: \(path)") case .keeperChanged(let path): - return "The copy marked Keep is missing or changed: \(path)" + return String(localized: "The copy marked Keep is missing or changed: \(path)") case .fileChanged(let path): - return "A selected file is missing or changed: \(path)" + return String(localized: "A selected file is missing or changed: \(path)") case .contentChanged(let path): - return "A selected file no longer matches its kept copy: \(path)" + return String(localized: "A selected file no longer matches its kept copy: \(path)") } } } @@ -241,7 +241,7 @@ actor DuplicateFinder { skipped.append(DuplicateSkippedFile( url: normalizedURL, reason: .hardLink, - detail: "Shares storage with \(firstURL.lastPathComponent)" + detail: String(localized: "Shares storage with \(firstURL.lastPathComponent)") )) } else { seenPhysicalFiles[identity.physicalID] = normalizedURL diff --git a/PureMac/Services/PerformanceInspector.swift b/PureMac/Services/PerformanceInspector.swift index 8fb6ee4..91ecfab 100644 --- a/PureMac/Services/PerformanceInspector.swift +++ b/PureMac/Services/PerformanceInspector.swift @@ -8,9 +8,9 @@ enum PerformanceStartupDomain: String, CaseIterable, Hashable, Sendable { var title: String { switch self { - case .userAgent: return "User agent" - case .systemAgent: return "System-wide agent" - case .systemDaemon: return "System daemon" + case .userAgent: return String(localized: "User agent") + case .systemAgent: return String(localized: "System-wide agent") + case .systemDaemon: return String(localized: "System daemon") } } } @@ -35,9 +35,9 @@ struct PerformanceSnapshot: Identifiable, Hashable, Sendable { var title: String { switch self { - case .timeMachine: return "Time Machine" - case .systemUpdate: return "System update" - case .local: return "Local snapshot" + case .timeMachine: return String(localized: "Time Machine") + case .systemUpdate: return String(localized: "System update") + case .local: return String(localized: "Local snapshot") } } } @@ -71,14 +71,14 @@ enum PerformanceInspectorError: LocalizedError, Equatable { var errorDescription: String? { switch self { case .invalidPropertyList: - return "The launch item is not a property-list dictionary." + return String(localized: "The launch item is not a property-list dictionary.") case .invalidSnapshotIdentifier: - return "This snapshot does not have a verified Time Machine timestamp." + return String(localized: "This snapshot does not have a verified Time Machine timestamp.") case .timedOut(let command): - return "\(command) did not finish within the allowed time." + return String(localized: "\(command) did not finish within the allowed time.") case .commandFailed(let command, let status, let detail): let suffix = detail.isEmpty ? "" : ": \(detail)" - return "\(command) exited with status \(status)\(suffix)" + return String(localized: "\(command) exited with status \(status)\(suffix)") } } } @@ -162,29 +162,29 @@ final class PerformanceInspector { var triggers: [String] = [] if bool(dictionary["RunAtLoad"]) == true { - triggers.append("At login") + triggers.append(String(localized: "At login")) } if let keepAlive = dictionary["KeepAlive"] { if bool(keepAlive) == true { - triggers.append("Keep alive") + triggers.append(String(localized: "Keep alive")) } else if let conditions = keepAlive as? [String: Any], !conditions.isEmpty { - triggers.append("Conditional keep alive") + triggers.append(String(localized: "Conditional keep alive")) } } if let interval = number(dictionary["StartInterval"]), interval.intValue > 0 { - triggers.append("Every \(interval.intValue) seconds") + triggers.append(String(localized: "Every \(interval.intValue) seconds")) } if dictionary["StartCalendarInterval"] != nil { - triggers.append("Scheduled") + triggers.append(String(localized: "Scheduled")) } if !stringArray(dictionary["WatchPaths"]).isEmpty { - triggers.append("Watches paths") + triggers.append(String(localized: "Watches paths")) } if !stringArray(dictionary["QueueDirectories"]).isEmpty { - triggers.append("Watches folders") + triggers.append(String(localized: "Watches folders")) } if bool(dictionary["NetworkState"]) == true { - triggers.append("Network state") + triggers.append(String(localized: "Network state")) } return PerformanceStartupItem( @@ -265,7 +265,7 @@ final class PerformanceInspector { } catch { issues.append( PerformanceInspectionIssue( - title: "Could not read \(directory.path)", + title: String(localized: "Could not read \(directory.path)"), detail: error.localizedDescription ) ) @@ -282,7 +282,7 @@ final class PerformanceInspector { } catch { issues.append( PerformanceInspectionIssue( - title: "Could not inspect \(file.lastPathComponent)", + title: String(localized: "Could not inspect \(file.lastPathComponent)"), detail: error.localizedDescription ) ) @@ -311,8 +311,8 @@ final class PerformanceInspector { return ( [], [PerformanceInspectionIssue( - title: "Time Machine snapshots are unavailable", - detail: "tmutil is not available on this Mac." + title: String(localized: "Time Machine snapshots are unavailable"), + detail: String(localized: "tmutil is not available on this Mac.") )] ) } @@ -337,7 +337,7 @@ final class PerformanceInspector { return ( [], [PerformanceInspectionIssue( - title: "Could not list Time Machine snapshots", + title: String(localized: "Could not list Time Machine snapshots"), detail: error.localizedDescription )] ) diff --git a/PureMac/Services/ProtectionAudit.swift b/PureMac/Services/ProtectionAudit.swift index a0e8948..fde1a5a 100644 --- a/PureMac/Services/ProtectionAudit.swift +++ b/PureMac/Services/ProtectionAudit.swift @@ -325,7 +325,7 @@ struct ProtectionAudit: Sendable { return ProtectionFinding( check: check, status: .unknown, - detail: result.timedOut ? "The check timed out." : "PureMac could not read this setting.", + detail: result.timedOut ? String(localized: "The check timed out.") : String(localized: "PureMac could not read this setting."), version: nil ) } @@ -334,31 +334,31 @@ struct ProtectionAudit: Sendable { switch check { case .gatekeeper: if output.contains("assessments enabled") { - return finding(check, .enabled, "App downloads are checked before opening.") + return finding(check, .enabled, String(localized: "App downloads are checked before opening.")) } if output.contains("assessments disabled") { - return finding(check, .disabled, "Downloaded apps are not being assessed by Gatekeeper.") + return finding(check, .disabled, String(localized: "Downloaded apps are not being assessed by Gatekeeper.")) } case .fileVault: if output.contains("filevault is on") { - return finding(check, .enabled, "The startup disk is encrypted with FileVault.") + return finding(check, .enabled, String(localized: "The startup disk is encrypted with FileVault.")) } if output.contains("filevault is off") { - return finding(check, .disabled, "The startup disk is not encrypted with FileVault.") + return finding(check, .disabled, String(localized: "The startup disk is not encrypted with FileVault.")) } case .firewall: if output.contains("firewall is enabled") || output.contains("state = 1") { - return finding(check, .enabled, "Incoming network connections are filtered.") + return finding(check, .enabled, String(localized: "Incoming network connections are filtered.")) } if output.contains("firewall is disabled") || output.contains("state = 0") { - return finding(check, .disabled, "The macOS application firewall is turned off.") + return finding(check, .disabled, String(localized: "The macOS application firewall is turned off.")) } case .systemIntegrityProtection: if output.contains("system integrity protection status: enabled") { - return finding(check, .enabled, "Protected system locations and processes are restricted.") + return finding(check, .enabled, String(localized: "Protected system locations and processes are restricted.")) } if output.contains("system integrity protection status: disabled") { - return finding(check, .disabled, "System Integrity Protection is turned off.") + return finding(check, .disabled, String(localized: "System Integrity Protection is turned off.")) } case .xProtect: break @@ -367,7 +367,7 @@ struct ProtectionAudit: Sendable { return ProtectionFinding( check: check, status: .unknown, - detail: "The system returned an unrecognized status.", + detail: String(localized: "The system returned an unrecognized status."), version: nil ) } @@ -380,20 +380,20 @@ struct ProtectionAudit: Sendable { return ProtectionFinding( check: .xProtect, status: .unknown, - detail: "PureMac could not confirm the local XProtect installation.", + detail: String(localized: "PureMac could not confirm the local XProtect installation."), version: nil ) } let parts = [ - engine.map { "engine \($0)" }, - definitions.map { "definitions \($0)" } + engine.map { String(localized: "engine \($0)") }, + definitions.map { String(localized: "definitions \($0)") } ].compactMap { $0 } - let version = parts.joined(separator: ", ") + let version = parts.joined(separator: String(localized: ", ")) return ProtectionFinding( check: .xProtect, status: .enabled, - detail: "Apple's built-in malware protection is installed. Update recency is managed by macOS.", + detail: String(localized: "Apple's built-in malware protection is installed. Update recency is managed by macOS."), version: version ) } diff --git a/PureMac/Services/SimilarPhotoFinder.swift b/PureMac/Services/SimilarPhotoFinder.swift index 1a869b2..8ee19d2 100644 --- a/PureMac/Services/SimilarPhotoFinder.swift +++ b/PureMac/Services/SimilarPhotoFinder.swift @@ -65,7 +65,7 @@ enum SimilarPhotoFinderError: LocalizedError, Equatable { var errorDescription: String? { switch self { case .invalidFolder(let path): - return "The selected folder cannot be scanned: \(path)" + return String(localized: "The selected folder cannot be scanned: \(path)") } } } diff --git a/PureMac/Services/StorageExplorer.swift b/PureMac/Services/StorageExplorer.swift index 74ff32e..124c371 100644 --- a/PureMac/Services/StorageExplorer.swift +++ b/PureMac/Services/StorageExplorer.swift @@ -56,15 +56,15 @@ enum StorageExplorerError: LocalizedError, Equatable { var errorDescription: String? { switch self { case .notDirectory(let path): - return "The selected item is not a folder: \(path)" + return String(localized: "The selected item is not a folder: \(path)") case .symbolicLink(let path): - return "Symbolic links cannot be scanned: \(path)" + return String(localized: "Symbolic links cannot be scanned: \(path)") case .package(let path): - return "App and document packages are excluded: \(path)" + return String(localized: "App and document packages are excluded: \(path)") case .cloudOnly(let path): - return "The selected folder is stored in the cloud and has not been downloaded: \(path)" + return String(localized: "The selected folder is stored in the cloud and has not been downloaded: \(path)") case .unavailable(let path): - return "The selected folder could not be read: \(path)" + return String(localized: "The selected folder could not be read: \(path)") } } } diff --git a/PureMac/ViewModels/AppState.swift b/PureMac/ViewModels/AppState.swift index 908e895..6604fc8 100644 --- a/PureMac/ViewModels/AppState.swift +++ b/PureMac/ViewModels/AppState.swift @@ -307,7 +307,7 @@ final class AppState: ObservableObject { } guard !urls.isEmpty else { if !blocked.isEmpty { - removalError = "Refused to delete \(blocked.count) protected item(s) (home credential directory or similar)." + removalError = String(localized: "Refused to delete \(blocked.count) protected item(s) (home credential directory or similar).") } return } @@ -462,19 +462,19 @@ final class AppState: ObservableObject { adminError: String? ) -> String? { if needsFullDiskAccess { - let prefix = failed.isEmpty ? "Some selected files" : "\(failed.count) file\(failed.count == 1 ? "" : "s")" - return "\(prefix) could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again." + let prefix = failed.isEmpty ? String(localized: "Some selected files") : String(localized: "\(failed.count) files") + return String(localized: "\(prefix) could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again.") } if !failed.isEmpty { if attemptedAdmin { - return "\(failed.count) file\(failed.count == 1 ? "" : "s") could not be removed with administrator privileges. The items may have changed or macOS denied access." + return String(localized: "\(failed.count) file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access.") } - return "\(failed.count) file\(failed.count == 1 ? "" : "s") could not be removed. Check that the items still exist and are not in use." + return String(localized: "\(failed.count) file(s) could not be removed. Check that the items still exist and are not in use.") } if let adminError, !adminError.isEmpty { - return "Administrator removal failed: \(adminError)" + return String(localized: "Administrator removal failed: \(adminError)") } return nil } diff --git a/PureMac/Views/CategoryDetailView.swift b/PureMac/Views/CategoryDetailView.swift index b1b9466..80de927 100644 --- a/PureMac/Views/CategoryDetailView.swift +++ b/PureMac/Views/CategoryDetailView.swift @@ -20,7 +20,7 @@ struct CategoryDetailView: View { if case .scanning = appState.scanState { HStack(spacing: 12) { ProgressView().controlSize(.small) - Text("Scanning \(appState.currentScanCategory)…") + Text("Scanning \(Text(LocalizedStringKey(appState.currentScanCategory)))…") .font(.callout) .foregroundStyle(.secondary) Spacer() @@ -116,16 +116,16 @@ struct CategoryDetailView: View { .background(Color.primary.opacity(0.045), in: RoundedRectangle(cornerRadius: 8)) HStack(spacing: 12) { Picker("Size", selection: $filter.size) { - ForEach(CleanupSizeFilter.allCases) { Text($0.rawValue).tag($0) } + ForEach(CleanupSizeFilter.allCases) { Text(LocalizedStringKey($0.rawValue)).tag($0) } } .frame(maxWidth: 180) Picker("Modified", selection: $filter.age) { - ForEach(CleanupAgeFilter.allCases) { Text($0.rawValue).tag($0) } + ForEach(CleanupAgeFilter.allCases) { Text(LocalizedStringKey($0.rawValue)).tag($0) } } .frame(maxWidth: 210) Spacer(minLength: 0) Picker("Sort", selection: $filter.order) { - ForEach(CleanupSortOrder.allCases) { Text($0.rawValue).tag($0) } + ForEach(CleanupSortOrder.allCases) { Text(LocalizedStringKey($0.rawValue)).tag($0) } } .frame(maxWidth: 185) } @@ -185,8 +185,8 @@ struct CategoryDetailView: View { private var confirmationMessage: String { let size = ByteCountFormatter.string(fromByteCount: pendingItems.reduce(0) { $0 + $1.size }, countStyle: .file) let names = pendingItems.prefix(5).map(\.name).joined(separator: "\n") - let more = pendingItems.count > 5 ? "\nAnd \(pendingItems.count - 5) more." : "" - return "\(size) selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone.\n\n\(names)\(more)" + let more = pendingItems.count > 5 ? String(localized: "\nAnd \(pendingItems.count - 5) more.") : "" + return String(localized: "\(size) selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone.") + "\n\n" + names + more } } @@ -210,7 +210,7 @@ private struct CleanupFileRow: View { .font(.system(size: 13, weight: .medium)) .lineLimit(1) .truncationMode(.middle) - Text(item.isActionItem ? "Managed cleanup action" : (item.path as NSString).abbreviatingWithTildeInPath) + Text(item.isActionItem ? String(localized: "Managed cleanup action") : (item.path as NSString).abbreviatingWithTildeInPath) .font(.system(size: 11)) .foregroundStyle(.secondary) .lineLimit(1) diff --git a/PureMac/Views/DashboardView.swift b/PureMac/Views/DashboardView.swift index 06758cb..1b5fa54 100644 --- a/PureMac/Views/DashboardView.swift +++ b/PureMac/Views/DashboardView.swift @@ -329,7 +329,7 @@ struct DashboardView: View { } } - private func diskLegendRow(id: String, color: Color, label: String, value: String) -> some View { + private func diskLegendRow(id: String, color: Color, label: LocalizedStringKey, value: String) -> some View { HStack(spacing: 8) { Circle() .fill(color) @@ -407,7 +407,7 @@ struct DashboardView: View { Text("Scanning your Mac") .font(.system(size: 25, weight: .semibold)) .tracking(-0.35) - Text(appState.currentScanCategory) + Text(LocalizedStringKey(appState.currentScanCategory)) .font(.system(size: 13, weight: .medium)) .foregroundStyle(Tint.accent) ScanPathTicker(ticker: appState.scanTicker) @@ -638,7 +638,7 @@ struct DashboardView: View { ) } - private func dashboardSection(_ title: LocalizedStringKey, detail: String? = nil) -> some View { + private func dashboardSection(_ title: LocalizedStringKey, detail: LocalizedStringKey? = nil) -> some View { HStack(alignment: .firstTextBaseline) { Text(title) .font(.system(size: 16, weight: .semibold)) diff --git a/PureMac/Views/Tools/AppUpdatesView.swift b/PureMac/Views/Tools/AppUpdatesView.swift index 5e71af0..51492ee 100644 --- a/PureMac/Views/Tools/AppUpdatesView.swift +++ b/PureMac/Views/Tools/AppUpdatesView.swift @@ -272,7 +272,7 @@ struct AppUpdatesView: View { .font(.system(size: 14, weight: .semibold)) .lineLimit(1) if update.isPinned { - StatusChip(label: "Pinned", systemImage: "pin.fill", tint: Tint.orange) + StatusChip(label: String(localized: "Pinned"), systemImage: "pin.fill", tint: Tint.orange) } } Text(updateDetail(update)) @@ -328,9 +328,9 @@ struct AppUpdatesView: View { } private func updateDetail(_ update: ManagedAppUpdate) -> String { - let installed = "Installed \(update.installedVersion)" + let installed = String(localized: "Installed \(update.installedVersion)") guard AppUpdateIdentityMatcher.shouldShowTokenDetail(update.token) else { return installed } - return "\(update.token) · \(installed)" + return String(localized: "\(update.token) · \(installed)") } private var unmanagedAppsCard: some View { @@ -353,7 +353,7 @@ struct AppUpdatesView: View { } } - private func stateCard(title: String, message: String, systemImage: String, tint: Color) -> some View { + private func stateCard(title: LocalizedStringKey, message: LocalizedStringKey, systemImage: String, tint: Color) -> some View { CardSurface(padding: 28, elevation: .standard, tint: tint) { VStack(spacing: 12) { IconTile(systemName: systemImage, tint: tint, size: 48, corner: 13) @@ -384,7 +384,7 @@ struct AppUpdatesView: View { private var upgradeBar: some View { HStack { - Text(updater.selectedCount == 0 ? "Select apps to update" : selectedCountTitle) + Text(updater.selectedCount == 0 ? String(localized: "Select apps to update") : selectedCountTitle) .font(.callout.weight(.medium)) .foregroundStyle(updater.selectedCount == 0 ? Color.secondary : Color.primary) Spacer() @@ -417,27 +417,27 @@ struct AppUpdatesView: View { } private var updateCountTitle: String { - updater.updates.count == 1 ? "1 update available" : "\(updater.updates.count) updates available" + updater.updates.count == 1 ? String(localized: "1 update available") : String(localized: "\(updater.updates.count) updates available") } private var selectedCountTitle: String { - updater.selectedCount == 1 ? "1 app selected" : "\(updater.selectedCount) apps selected" + updater.selectedCount == 1 ? String(localized: "1 app selected") : String(localized: "\(updater.selectedCount) apps selected") } private func upgradeConfirmationLabel(count: Int) -> String { - count == 1 ? "Upgrade 1 App" : "Upgrade \(count) Apps" + count == 1 ? String(localized: "Upgrade 1 App") : String(localized: "Upgrade \(count) Apps") } private var upgradeConfirmationMessage: String { let versions = confirmationSelection.map { - "\(displayName(for: $0.token)) \($0.installedVersion) to \($0.currentVersion)" + String(localized: "\(displayName(for: $0.token)) \($0.installedVersion) to \($0.currentVersion)") } let selectionSummary: String if versions.count <= 5 { selectionSummary = versions.joined(separator: ", ") } else { - selectionSummary = versions.prefix(5).joined(separator: ", ") + ", and \(versions.count - 5) more" + selectionSummary = versions.prefix(5).joined(separator: ", ") + String(localized: ", and \(versions.count - 5) more") } - return "Homebrew will upgrade \(selectionSummary). It may quit running apps and remove superseded cask versions as part of its normal upgrade process." + return String(localized: "Homebrew will upgrade \(selectionSummary). It may quit running apps and remove superseded cask versions as part of its normal upgrade process.") } } diff --git a/PureMac/Views/Tools/DuplicateFinderView.swift b/PureMac/Views/Tools/DuplicateFinderView.swift index ab2b76c..bc033ff 100644 --- a/PureMac/Views/Tools/DuplicateFinderView.swift +++ b/PureMac/Views/Tools/DuplicateFinderView.swift @@ -298,7 +298,7 @@ struct DuplicateFinderView: View { } } - private func summaryMetric(value: String, label: String, icon: String, tint: Color) -> some View { + private func summaryMetric(value: String, label: LocalizedStringKey, icon: String, tint: Color) -> some View { HStack(spacing: 9) { IconTile(systemName: icon, tint: tint, size: 30, corner: 8) VStack(alignment: .leading, spacing: 1) { @@ -327,7 +327,7 @@ struct DuplicateFinderView: View { .foregroundStyle(.secondary) } Spacer() - StatusChip(label: "\(format(group.reclaimableSize)) reviewable", systemImage: "arrow.down.circle", tint: Tint.green) + StatusChip(label: String(localized: "\(format(group.reclaimableSize)) reviewable"), systemImage: "arrow.down.circle", tint: Tint.green) Button(groupCandidatesSelected(group) ? "Clear" : "Select copies") { toggleGroupSelection(group) } @@ -386,7 +386,7 @@ struct DuplicateFinderView: View { .font(.system(size: 13, weight: keeper ? .semibold : .regular)) .lineLimit(1) if keeper { - StatusChip(label: "Keep", systemImage: "lock.fill", tint: Tint.green) + StatusChip(label: String(localized: "Keep"), systemImage: "lock.fill", tint: Tint.green) } } Text(file.url.deletingLastPathComponent().path) @@ -501,15 +501,15 @@ struct DuplicateFinderView: View { if state == .scanning, let current = progress.currentURL { return current.deletingLastPathComponent().path } - return selectedFolder?.path ?? "Exact-match cleanup with a protected copy in every group" + return selectedFolder?.path ?? String(localized: "Exact-match cleanup with a protected copy in every group") } private var progressSummary: String { switch progress.phase { case .discovering: - return "\(progress.filesInspected.formatted()) files inspected" + return String(localized: "\(progress.filesInspected.formatted()) files inspected") case .hashing: - return "\(progress.filesHashed.formatted()) of \(progress.filesToHash.formatted()) candidates · \(format(progress.bytesHashed)) verified" + return String(localized: "\(progress.filesHashed.formatted()) of \(progress.filesToHash.formatted()) candidates · \(format(progress.bytesHashed)) verified") } } @@ -560,9 +560,9 @@ struct DuplicateFinderView: View { private func chooseFolder() { guard !isMovingToTrash else { return } let panel = NSOpenPanel() - panel.title = "Choose a folder to check for duplicate files" - panel.prompt = "Scan Folder" - panel.message = "PureMac reads the selected folder and does not change anything during a scan." + panel.title = String(localized: "Choose a folder to check for duplicate files") + panel.prompt = String(localized: "Scan Folder") + panel.message = String(localized: "PureMac reads the selected folder and does not change anything during a scan.") panel.canChooseFiles = false panel.canChooseDirectories = true panel.allowsMultipleSelection = false @@ -662,12 +662,12 @@ struct DuplicateFinderView: View { applyTrashResult(movedFiles) if failures.isEmpty { actionMessage = ActionMessage( - title: "Moved to Trash", - detail: "\(movedFiles.count) files totaling \(format(movedFiles.reduce(0) { $0 + $1.size })) were moved. Every protected copy remains in place." + title: String(localized: "Moved to Trash"), + detail: String(localized: "\(movedFiles.count) files totaling \(format(movedFiles.reduce(0) { $0 + $1.size })) were moved. Every protected copy remains in place.") ) } else { actionMessage = ActionMessage( - title: movedFiles.isEmpty ? "Nothing was moved" : "Some files were not moved", + title: movedFiles.isEmpty ? String(localized: "Nothing was moved") : String(localized: "Some files were not moved"), detail: failures.joined(separator: "\n") ) } @@ -695,8 +695,8 @@ struct DuplicateFinderView: View { private func skippedSummary(_ skippedFiles: [DuplicateSkippedFile]) -> String { skippedFiles.isEmpty - ? "Every eligible file was checked." - : "\(skippedFiles.count) unsafe or unavailable items were skipped." + ? String(localized: "Every eligible file was checked.") + : String(localized: "\(skippedFiles.count) unsafe or unavailable items were skipped.") } private func format(_ bytes: Int64) -> String { diff --git a/PureMac/Views/Tools/PerformanceView.swift b/PureMac/Views/Tools/PerformanceView.swift index a93ebf9..53f6476 100644 --- a/PureMac/Views/Tools/PerformanceView.swift +++ b/PureMac/Views/Tools/PerformanceView.swift @@ -68,7 +68,7 @@ struct PerformanceView: View { deletionError = nil } } message: { - Text(deletionError ?? "Unknown error") + Text(deletionError ?? String(localized: "Unknown error")) } } @@ -97,7 +97,7 @@ struct PerformanceView: View { HStack { SectionHeader("Live resources") Spacer() - StatusChip(label: "Live", systemImage: "circle.fill", tint: Tint.green) + StatusChip(label: String(localized: "Live"), systemImage: "circle.fill", tint: Tint.green) } HStack(spacing: 26) { @@ -200,7 +200,7 @@ struct PerformanceView: View { .foregroundStyle(.secondary) } Spacer() - StatusChip(label: "\(items.count) found", tint: Tint.accent) + StatusChip(label: String(localized: "\(items.count) found"), tint: Tint.accent) Button("Login Items Settings") { openLoginItemsSettings() } @@ -247,7 +247,7 @@ struct PerformanceView: View { .foregroundStyle(.secondary) } Spacer() - StatusChip(label: "\(snapshots.count) found", tint: Tint.purple) + StatusChip(label: String(localized: "\(snapshots.count) found"), tint: Tint.purple) Button("Time Machine Settings") { openTimeMachineSettings() } @@ -304,7 +304,7 @@ struct PerformanceView: View { let formatter = ByteCountFormatter() formatter.countStyle = .memory formatter.allowedUnits = [.useGB, .useMB] - return "\(formatter.string(fromByteCount: monitor.memoryUsed)) of \(formatter.string(fromByteCount: monitor.memoryTotal))" + return String(localized: "\(formatter.string(fromByteCount: monitor.memoryUsed)) of \(formatter.string(fromByteCount: monitor.memoryTotal))") } private var deletionConfirmationPresented: Binding { @@ -316,9 +316,9 @@ struct PerformanceView: View { private var snapshotDeletionMessage: String { guard let snapshot = snapshotPendingDeletion else { - return "This permanently removes the selected Time Machine snapshot." + return String(localized: "This permanently removes the selected Time Machine snapshot.") } - return "This permanently removes \(snapshot.identifier). Its size is unknown, and the action cannot be undone." + return String(localized: "This permanently removes \(snapshot.identifier). Its size is unknown, and the action cannot be undone.") } private var deletionErrorPresented: Binding { @@ -380,7 +380,7 @@ struct PerformanceView: View { } private struct ResourceMeter: View { - let title: String + let title: LocalizedStringKey let value: Double let detail: String let tint: Color @@ -423,7 +423,7 @@ private struct StartupItemRow: View { .font(.system(size: 13, weight: .medium)) .lineLimit(1) StatusChip( - label: item.isDisabled ? "Disabled" : item.domain.title, + label: item.isDisabled ? String(localized: "Disabled") : item.domain.title, tint: item.isDisabled ? Color.secondary : Tint.accent ) ForEach(item.triggers.prefix(2), id: \.self) { trigger in @@ -431,7 +431,7 @@ private struct StartupItemRow: View { } } - Text(item.program ?? "Program not declared in this plist") + Text(item.program ?? String(localized: "Program not declared in this plist")) .font(.system(size: 11.5, design: .monospaced)) .foregroundStyle(item.program == nil ? Tint.orange : .secondary) .lineLimit(1) @@ -523,8 +523,8 @@ private struct SnapshotRow: View { private struct EmptyInspectionRow: View { let systemImage: String - let title: String - let detail: String + let title: LocalizedStringKey + let detail: LocalizedStringKey var body: some View { HStack(spacing: 12) { diff --git a/PureMac/Views/Tools/ProtectionView.swift b/PureMac/Views/Tools/ProtectionView.swift index b68831e..6bbc000 100644 --- a/PureMac/Views/Tools/ProtectionView.swift +++ b/PureMac/Views/Tools/ProtectionView.swift @@ -212,11 +212,11 @@ struct ProtectionView: View { private var auditButtonTitle: String { switch phase { case .idle: - return "Run audit" + return String(localized: "Run audit") case .running: - return "Checking" + return String(localized: "Checking") case .complete: - return "Check again" + return String(localized: "Check again") } } @@ -277,7 +277,7 @@ private struct ProtectionFindingRow: View { } private struct SettingsButton: View { - let title: String + let title: LocalizedStringKey let icon: String let action: () -> Void @@ -322,30 +322,30 @@ private extension ProtectionCheck { var title: String { switch self { case .gatekeeper: - return "Gatekeeper" + return String(localized: "Gatekeeper") case .fileVault: - return "FileVault" + return String(localized: "FileVault") case .firewall: - return "Application Firewall" + return String(localized: "Application Firewall") case .systemIntegrityProtection: - return "System Integrity Protection" + return String(localized: "System Integrity Protection") case .xProtect: - return "XProtect" + return String(localized: "XProtect") } } var actionTitle: String { switch self { case .gatekeeper: - return "Security Settings" + return String(localized: "Security Settings") case .fileVault: - return "FileVault Settings" + return String(localized: "FileVault Settings") case .firewall: - return "Firewall Settings" + return String(localized: "Firewall Settings") case .systemIntegrityProtection: - return "Apple Guide" + return String(localized: "Apple Guide") case .xProtect: - return "Software Update" + return String(localized: "Software Update") } } } @@ -387,13 +387,13 @@ private extension ProtectionStatus { func label(for check: ProtectionCheck) -> String { switch (self, check) { case (.enabled, .xProtect): - return "Installed" + return String(localized: "Installed") case (.enabled, _): - return "On" + return String(localized: "On") case (.disabled, _): - return "Off" + return String(localized: "Off") case (.unknown, _): - return "Unknown" + return String(localized: "Unknown") } } } diff --git a/PureMac/Views/Tools/SimilarPhotosView.swift b/PureMac/Views/Tools/SimilarPhotosView.swift index fbb35fc..0ac82b7 100644 --- a/PureMac/Views/Tools/SimilarPhotosView.swift +++ b/PureMac/Views/Tools/SimilarPhotosView.swift @@ -31,9 +31,9 @@ final class SimilarPhotosViewModel: ObservableObject { func chooseFolder() { let panel = NSOpenPanel() - panel.title = "Choose a photo folder" - panel.message = "PureMac compares local image thumbnails without changing your photos." - panel.prompt = "Scan Photos" + panel.title = String(localized: "Choose a photo folder") + panel.message = String(localized: "PureMac compares local image thumbnails without changing your photos.") + panel.prompt = String(localized: "Scan Photos") panel.canChooseFiles = false panel.canChooseDirectories = true panel.allowsMultipleSelection = false @@ -211,7 +211,7 @@ struct SimilarPhotosView: View { case .cancelled: messageState( title: "Scan stopped", - message: "No photos were changed. You can scan the folder again at any time.", + message: String(localized: "No photos were changed. You can scan the folder again at any time."), systemImage: "stop.circle", tint: .secondary ) @@ -230,9 +230,9 @@ struct SimilarPhotosView: View { .multilineTextAlignment(.center) .frame(maxWidth: 520) HStack(spacing: 8) { - StatusChip(label: "Review only", systemImage: "eye", tint: Tint.green) - StatusChip(label: "500 photo limit", systemImage: "photo.stack", tint: Tint.pink) - StatusChip(label: "Local files", systemImage: "lock.shield", tint: Tint.blue) + StatusChip(label: String(localized: "Review only"), systemImage: "eye", tint: Tint.green) + StatusChip(label: String(localized: "500 photo limit"), systemImage: "photo.stack", tint: Tint.pink) + StatusChip(label: String(localized: "Local files"), systemImage: "lock.shield", tint: Tint.blue) } Text("Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted.") .font(.system(size: 11.5)) @@ -252,7 +252,7 @@ struct SimilarPhotosView: View { VStack(alignment: .leading, spacing: 3) { Text(progressTitle) .font(.system(size: 16, weight: .semibold)) - Text(model.progress?.currentURL?.lastPathComponent ?? "Preparing visual comparison") + Text(model.progress?.currentURL?.lastPathComponent ?? String(localized: "Preparing visual comparison")) .font(.system(size: 12)) .foregroundStyle(.secondary) .lineLimit(1) @@ -271,18 +271,18 @@ struct SimilarPhotosView: View { HStack(spacing: 8) { StatusChip( - label: "\(model.progress?.entriesVisited ?? 0) items", + label: String(localized: "\(model.progress?.entriesVisited ?? 0) items"), systemImage: "doc.on.doc", tint: Tint.pink ) StatusChip( - label: "\(model.progress?.candidatesFound ?? 0) photos", + label: String(localized: "\(model.progress?.candidatesFound ?? 0) photos"), systemImage: "photo", tint: Tint.pink ) if let progress = model.progress, progress.photosAnalyzed > 0 { StatusChip( - label: "\(progress.photosAnalyzed) compared", + label: String(localized: "\(progress.photosAnalyzed) compared"), systemImage: "viewfinder", tint: Tint.blue ) @@ -295,11 +295,11 @@ struct SimilarPhotosView: View { private var progressTitle: String { switch model.progress?.phase { case .discovering, .none: - return "Finding local photos" + return String(localized: "Finding local photos") case .analyzing: - return "Building visual signatures" + return String(localized: "Building visual signatures") case .comparing: - return "Grouping similar shots" + return String(localized: "Grouping similar shots") } } @@ -360,13 +360,13 @@ struct SimilarPhotosView: View { VStack(alignment: .leading, spacing: 8) { HStack(spacing: 8) { - StatusChip(label: "\(result.photosAnalyzed) analyzed", systemImage: "viewfinder", tint: Tint.pink) - StatusChip(label: "\(result.matchedPhotoCount) matched", systemImage: "photo.stack", tint: Tint.blue) + StatusChip(label: String(localized: "\(result.photosAnalyzed) analyzed"), systemImage: "viewfinder", tint: Tint.pink) + StatusChip(label: String(localized: "\(result.matchedPhotoCount) matched"), systemImage: "photo.stack", tint: Tint.blue) } HStack(spacing: 8) { StatusChip(label: Self.format(result.matchedPhotoSize), systemImage: "internaldrive", tint: Tint.purple) if result.skippedItems > 0 { - StatusChip(label: "\(result.skippedItems) skipped", systemImage: "forward", tint: Tint.orange) + StatusChip(label: String(localized: "\(result.skippedItems) skipped"), systemImage: "forward", tint: Tint.orange) } } } @@ -374,7 +374,7 @@ struct SimilarPhotosView: View { Spacer() StatusChip( - label: result.isPartial ? "Sample limit reached" : "Scan complete", + label: result.isPartial ? String(localized: "Sample limit reached") : String(localized: "Scan complete"), systemImage: result.isPartial ? "exclamationmark.triangle" : "checkmark.circle", tint: result.isPartial ? Tint.orange : Tint.green ) @@ -382,7 +382,7 @@ struct SimilarPhotosView: View { } } - private func messageState(title: String, message: String, systemImage: String, tint: Color) -> some View { + private func messageState(title: LocalizedStringKey, message: String, systemImage: String, tint: Color) -> some View { CardSurface(padding: 30, elevation: .standard, tint: tint) { VStack(spacing: 13) { IconTile(systemName: systemImage, tint: tint, size: 54, corner: 15) @@ -431,7 +431,7 @@ private struct SimilarPhotoGroupCard: View { } Spacer() StatusChip( - label: "\(Int((group.similarity * 100).rounded()))% visual score", + label: String(localized: "\(Int((group.similarity * 100).rounded()))% visual score"), systemImage: "viewfinder", tint: Tint.pink ) diff --git a/PureMac/Views/Tools/SpaceExplorerView.swift b/PureMac/Views/Tools/SpaceExplorerView.swift index bdf8611..32eedd5 100644 --- a/PureMac/Views/Tools/SpaceExplorerView.swift +++ b/PureMac/Views/Tools/SpaceExplorerView.swift @@ -33,9 +33,9 @@ final class SpaceExplorerViewModel: ObservableObject { func chooseFolder() { let panel = NSOpenPanel() - panel.title = "Choose a folder to inspect" - panel.message = "PureMac measures allocated disk space without changing files." - panel.prompt = "Inspect" + panel.title = String(localized: "Choose a folder to inspect") + panel.message = String(localized: "PureMac measures allocated disk space without changing files.") + panel.prompt = String(localized: "Inspect") panel.canChooseFiles = false panel.canChooseDirectories = true panel.allowsMultipleSelection = false @@ -229,7 +229,7 @@ struct SpaceExplorerView: View { case .cancelled: messageState( title: "Scan stopped", - message: "No files were changed. Rescan this folder when you are ready.", + message: String(localized: "No files were changed. Rescan this folder when you are ready."), systemImage: "stop.circle", tint: .secondary ) @@ -264,7 +264,7 @@ struct SpaceExplorerView: View { VStack(alignment: .leading, spacing: 2) { Text("Measuring allocated space") .font(.system(size: 16, weight: .semibold)) - Text(model.progress?.currentURL.lastPathComponent ?? "Preparing scan") + Text(model.progress?.currentURL.lastPathComponent ?? String(localized: "Preparing scan")) .font(.system(size: 12)) .foregroundStyle(.secondary) .lineLimit(1) @@ -283,7 +283,7 @@ struct SpaceExplorerView: View { HStack(spacing: 8) { StatusChip( - label: "\(model.progress?.scannedItemCount ?? 0) items", + label: String(localized: "\(model.progress?.scannedItemCount ?? 0) items"), systemImage: "doc.on.doc", tint: Tint.accent ) @@ -293,10 +293,10 @@ struct SpaceExplorerView: View { tint: Tint.accent ) if let progress = model.progress, progress.skippedCount > 0 { - StatusChip(label: "\(progress.skippedCount) skipped", systemImage: "forward", tint: Tint.orange) + StatusChip(label: String(localized: "\(progress.skippedCount) skipped"), systemImage: "forward", tint: Tint.orange) } if let progress = model.progress, progress.inaccessibleCount > 0 { - StatusChip(label: "\(progress.inaccessibleCount) inaccessible", systemImage: "lock", tint: Tint.orange) + StatusChip(label: String(localized: "\(progress.inaccessibleCount) inaccessible"), systemImage: "lock", tint: Tint.orange) } } } @@ -357,17 +357,17 @@ struct SpaceExplorerView: View { VStack(alignment: .leading, spacing: 8) { HStack(spacing: 8) { - StatusChip(label: "\(result.fileCount) files", systemImage: "doc", tint: Tint.accent) - StatusChip(label: "\(result.directoryCount) folders", systemImage: "folder", tint: Tint.accent) + StatusChip(label: String(localized: "\(result.fileCount) files"), systemImage: "doc", tint: Tint.accent) + StatusChip(label: String(localized: "\(result.directoryCount) folders"), systemImage: "folder", tint: Tint.accent) } HStack(spacing: 8) { StatusChip( - label: "\(result.skippedCount) skipped", + label: String(localized: "\(result.skippedCount) skipped"), systemImage: "forward", tint: result.skippedCount == 0 ? Tint.green : Tint.orange ) StatusChip( - label: "\(result.inaccessibleCount) inaccessible", + label: String(localized: "\(result.inaccessibleCount) inaccessible"), systemImage: "lock", tint: result.inaccessibleCount == 0 ? Tint.green : Tint.orange ) @@ -377,7 +377,7 @@ struct SpaceExplorerView: View { Spacer() StatusChip( - label: result.isPartial ? "Partial result" : "Complete", + label: result.isPartial ? String(localized: "Partial result") : String(localized: "Complete"), systemImage: result.isPartial ? "exclamationmark.triangle" : "checkmark.circle", tint: result.isPartial ? Tint.orange : Tint.green ) @@ -385,7 +385,7 @@ struct SpaceExplorerView: View { } } - private func messageState(title: String, message: String, systemImage: String, tint: Color) -> some View { + private func messageState(title: LocalizedStringKey, message: String, systemImage: String, tint: Color) -> some View { CardSurface(padding: 28, elevation: .standard, tint: tint) { VStack(spacing: 12) { IconTile(systemName: systemImage, tint: tint, size: 54, corner: 15) @@ -510,17 +510,13 @@ private struct StorageEntryRow: View { private var detailText: String { if entry.isPackage { - return "Package · \(Self.countLabel(entry.fileCount, singular: "file"))" + return String(localized: "Package · \(entry.fileCount) files") } if entry.isDirectory { let childFolderCount = max(0, entry.directoryCount - 1) - return "\(Self.countLabel(entry.fileCount, singular: "file")) · \(Self.countLabel(childFolderCount, singular: "folder"))" + return String(localized: "\(entry.fileCount) files · \(childFolderCount) folders") } - return "File" - } - - private static func countLabel(_ count: Int, singular: String) -> String { - "\(count) \(singular)\(count == 1 ? "" : "s")" + return String(localized: "File") } private static func format(_ bytes: Int64) -> String { diff --git a/PureMac/ar.lproj/Localizable.strings b/PureMac/ar.lproj/Localizable.strings index 5c39871..124d01e 100644 --- a/PureMac/ar.lproj/Localizable.strings +++ b/PureMac/ar.lproj/Localizable.strings @@ -460,3 +460,410 @@ /* Simulator runtimes */ "Simulator runtime" = "وقت تشغيل المحاكي"; + +/* Current dashboard, tools, and cleanup review — English fallback until translated */ +"\nAnd %lld more." = "\nAnd %lld more."; +"%@ %@ to %@" = "%@ %@ to %@"; +"%@ available" = "%@ available"; +"%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again." = "%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again."; +"%@ did not finish within the allowed time." = "%@ did not finish within the allowed time."; +"%@ exited with status %d%@" = "%@ exited with status %d%@"; +"%@ files inspected" = "%@ files inspected"; +"%@ found across %lld categories." = "%@ found across %lld categories."; +"%@ found before the scan stopped. Results may be incomplete." = "%@ found before the scan stopped. Results may be incomplete."; +"%@ of %@" = "%@ of %@"; +"%@ of %@ candidates · %@ verified" = "%@ of %@ candidates · %@ verified"; +"%@ reviewable" = "%@ reviewable"; +"%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone." = "%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone."; +"%@ will move to Trash" = "%@ will move to Trash"; +"%lld analyzed" = "%lld analyzed"; +"%lld apps selected" = "%lld apps selected"; +"%lld areas" = "%lld areas"; +"%lld compared" = "%lld compared"; +"%lld exact copies · %@ each" = "%lld exact copies · %@ each"; +"%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access." = "%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access."; +"%lld file(s) could not be removed. Check that the items still exist and are not in use." = "%lld file(s) could not be removed. Check that the items still exist and are not in use."; +"%lld files totaling %@ were moved. Every protected copy remains in place." = "%lld files totaling %@ were moved. Every protected copy remains in place."; +"%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place." = "%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place."; +"%lld files · %lld folders" = "%lld files · %lld folders"; +"%lld folders" = "%lld folders"; +"%lld found" = "%lld found"; +"%lld inaccessible" = "%lld inaccessible"; +"%lld items · %@ found" = "%lld items · %@ found"; +"%lld matched" = "%lld matched"; +"%lld of %lld items shown" = "%lld of %lld items shown"; +"%lld percent" = "%lld percent"; +"%lld photos" = "%lld photos"; +"%lld photos · %@" = "%lld photos · %@"; +"%lld selected items will be permanently deleted. Review the list before continuing." = "%lld selected items will be permanently deleted. Review the list before continuing."; +"%lld selected · %@" = "%lld selected · %@"; +"%lld skipped" = "%lld skipped"; +"%lld unsafe or unavailable items were not scanned" = "%lld unsafe or unavailable items were not scanned"; +"%lld unsafe or unavailable items were skipped." = "%lld unsafe or unavailable items were skipped."; +"%lld updates available" = "%lld updates available"; +"%lld%% visual score" = "%lld%% visual score"; +", and %lld more" = ", and %lld more"; +"1 app selected" = "1 app selected"; +"1 update available" = "1 update available"; +"500 photo limit" = "500 photo limit"; +"A clear view of reclaimable storage and the tools that manage it." = "A clear view of reclaimable storage and the tools that manage it."; +"A selected file is missing or changed: %@" = "A selected file is missing or changed: %@"; +"A selected file no longer matches its kept copy: %@" = "A selected file no longer matches its kept copy: %@"; +"Access denied" = "Access denied"; +"Administrator removal failed: %@" = "Administrator removal failed: %@"; +"Always exclude from cleanup" = "Always exclude from cleanup"; +"Any age" = "Any age"; +"Any size" = "Any size"; +"App Updates" = "App Updates"; +"App and document packages are excluded: %@" = "App and document packages are excluded: %@"; +"App bundle missing" = "App bundle missing"; +"App downloads are checked before opening." = "App downloads are checked before opening."; +"App permissions" = "App permissions"; +"Apple Guide" = "Apple Guide"; +"Apple's built-in malware protection is installed. Update recency is managed by macOS." = "Apple's built-in malware protection is installed. Update recency is managed by macOS."; +"Application Firewall" = "Application Firewall"; +"Apps outside Homebrew" = "Apps outside Homebrew"; +"At login" = "At login"; +"Available" = "Available"; +"Available to review" = "Available to review"; +"Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions." = "Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions."; +"Browser privacy" = "Browser privacy"; +"Building visual signatures" = "Building visual signatures"; +"Camera" = "Camera"; +"Care" = "Care"; +"Changed during scan" = "Changed during scan"; +"Check Again" = "Check Again"; +"Check again" = "Check again"; +"Check built-in safeguards" = "Check built-in safeguards"; +"Check installed apps for new versions" = "Check installed apps for new versions"; +"Check installed cask apps" = "Check installed cask apps"; +"Checked %@. Unknown means the setting could not be confirmed." = "Checked %@. Unknown means the setting could not be confirmed."; +"Checking" = "Checking"; +"Checking Homebrew casks" = "Checking Homebrew casks"; +"Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation." = "Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation."; +"Checking your Mac. Nothing is removed during a scan." = "Checking your Mac. Nothing is removed during a scan."; +"Choose Another Folder" = "Choose Another Folder"; +"Choose Folder" = "Choose Folder"; +"Choose a Folder" = "Choose a Folder"; +"Choose a folder of photos" = "Choose a folder of photos"; +"Choose a folder to check for duplicate files" = "Choose a folder to check for duplicate files"; +"Choose a folder to inspect" = "Choose a folder to inspect"; +"Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically." = "Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically."; +"Choose a photo folder" = "Choose a photo folder"; +"Choose where to look" = "Choose where to look"; +"Chrome privacy guide" = "Chrome privacy guide"; +"Clean selected items" = "Clean selected items"; +"Cleaning selected items" = "Cleaning selected items"; +"Cleanup Exclusions" = "Cleanup Exclusions"; +"Cleanup finished and disk information is refreshing." = "Cleanup finished and disk information is refreshing."; +"Cleanup plan" = "Cleanup plan"; +"Clear Selection" = "Clear Selection"; +"Clear filters" = "Clear filters"; +"Clear search" = "Clear search"; +"Clear selection" = "Clear selection"; +"Cloud-only file" = "Cloud-only file"; +"Collapse duplicate group" = "Collapse duplicate group"; +"Compare visually similar photos" = "Compare visually similar photos"; +"Conditional keep alive" = "Conditional keep alive"; +"Copy path" = "Copy path"; +"Could not inspect %@" = "Could not inspect %@"; +"Could not list Time Machine snapshots" = "Could not list Time Machine snapshots"; +"Could not read" = "Could not read"; +"Could not read %@" = "Could not read %@"; +"Couldn't check for updates" = "Couldn't check for updates"; +"Current scan path" = "Current scan path"; +"Delete" = "Delete"; +"Delete Snapshot" = "Delete Snapshot"; +"Delete local snapshot?" = "Delete local snapshot?"; +"Deselect visible" = "Deselect visible"; +"Developer Cleanup" = "Developer Cleanup"; +"Disabled" = "Disabled"; +"Downloaded apps are not being assessed by Gatekeeper." = "Downloaded apps are not being assessed by Gatekeeper."; +"Drag to tilt" = "Drag to tilt"; +"Duplicate Finder" = "Duplicate Finder"; +"Duplicate groups" = "Duplicate groups"; +"Every %lld seconds" = "Every %lld seconds"; +"Every eligible file was checked." = "Every eligible file was checked."; +"Exact-match cleanup with a protected copy in every group" = "Exact-match cleanup with a protected copy in every group"; +"Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it." = "Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it."; +"Expand duplicate group" = "Expand duplicate group"; +"File" = "File"; +"FileVault" = "FileVault"; +"FileVault Settings" = "FileVault Settings"; +"Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them." = "Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them."; +"Filter cleanup files" = "Filter cleanup files"; +"Find a file or path" = "Find a file or path"; +"Find copies that are exactly the same" = "Find copies that are exactly the same"; +"Find space to reclaim." = "Find space to reclaim."; +"Find visually related shots in a folder and review them side by side." = "Find visually related shots in a folder and review them side by side."; +"Find what uses the most disk space" = "Find what uses the most disk space"; +"Finding local photos" = "Finding local photos"; +"Firewall Settings" = "Firewall Settings"; +"Focused utilities for storage, apps, and system maintenance" = "Focused utilities for storage, apps, and system maintenance"; +"Folder could not be inspected" = "Folder could not be inspected"; +"Full Disk Access is off" = "Full Disk Access is off"; +"Full access" = "Full access"; +"Gatekeeper" = "Gatekeeper"; +"Group %lld" = "Group %lld"; +"Grouping similar shots" = "Grouping similar shots"; +"Hard-linked copy" = "Hard-linked copy"; +"Homebrew apps are up to date" = "Homebrew apps are up to date"; +"Homebrew did not finish before the operation timed out." = "Homebrew did not finish before the operation timed out."; +"Homebrew finished, but %lld selected apps still report updates." = "Homebrew finished, but %lld selected apps still report updates."; +"Homebrew finished, but 1 selected app still reports an update." = "Homebrew finished, but 1 selected app still reports an update."; +"Homebrew finished. Check again to verify installed versions." = "Homebrew finished. Check again to verify installed versions."; +"Homebrew not found" = "Homebrew not found"; +"Homebrew produced more output than PureMac could safely retain." = "Homebrew produced more output than PureMac could safely retain."; +"Homebrew returned an invalid cask identifier: %@" = "Homebrew returned an invalid cask identifier: %@"; +"Homebrew returned update information PureMac could not read." = "Homebrew returned update information PureMac could not read."; +"Homebrew updated the %lld selected apps." = "Homebrew updated the %lld selected apps."; +"Homebrew updated the selected app." = "Homebrew updated the selected app."; +"Homebrew was not found in a standard installation location." = "Homebrew was not found in a standard installation location."; +"Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process." = "Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process."; +"Includes %lld selected items hidden by filters." = "Includes %lld selected items hidden by filters."; +"Incoming network connections are filtered." = "Incoming network connections are filtered."; +"Inspect" = "Inspect"; +"Inspect a folder by allocated disk space. Your files are never changed." = "Inspect a folder by allocated disk space. Your files are never changed."; +"Inspect memory and background activity" = "Inspect memory and background activity"; +"Inspect startup items and local snapshots again" = "Inspect startup items and local snapshots again"; +"Inspected %@ files in %@. %@" = "Inspected %@ files in %@. %@"; +"Inspecting startup items and local snapshots…" = "Inspecting startup items and local snapshots…"; +"Inspection stopped" = "Inspection stopped"; +"Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels." = "Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels."; +"Installed" = "Installed"; +"Installed %@" = "Installed %@"; +"Keep" = "Keep"; +"Keep PureMac open until this pass finishes." = "Keep PureMac open until this pass finishes."; +"Keep alive" = "Keep alive"; +"Largest first" = "Largest first"; +"Largest items" = "Largest items"; +"Last activity: %@" = "Last activity: %@"; +"Last checked" = "Last checked"; +"Launch agents and daemons installed outside macOS system folders" = "Launch agents and daemons installed outside macOS system folders"; +"Leftovers" = "Leftovers"; +"Live" = "Live"; +"Live resources" = "Live resources"; +"Local and private" = "Local and private"; +"Local files" = "Local files"; +"Local snapshot" = "Local snapshot"; +"Local snapshots" = "Local snapshots"; +"Location" = "Location"; +"Login Items Settings" = "Login Items Settings"; +"Looking through files" = "Looking through files"; +"Mac storage" = "Mac storage"; +"Managed cleanup action" = "Managed cleanup action"; +"Matching files" = "Matching files"; +"Measuring allocated space" = "Measuring allocated space"; +"Memory pressure use" = "Memory pressure use"; +"Microphone" = "Microphone"; +"Modified" = "Modified"; +"Move selected duplicates to Trash?" = "Move selected duplicates to Trash?"; +"Moved to Trash" = "Moved to Trash"; +"Name" = "Name"; +"Needs attention" = "Needs attention"; +"Network state" = "Network state"; +"No exact duplicates found" = "No exact duplicates found"; +"No excluded paths" = "No excluded paths"; +"No files found" = "No files found"; +"No files were changed. Rescan this folder when you are ready." = "No files were changed. Rescan this folder when you are ready."; +"No launchd items found" = "No launchd items found"; +"No local snapshots reported" = "No local snapshots reported"; +"No matching files" = "No matching files"; +"No measurable items" = "No measurable items"; +"No photos were changed. You can scan the folder again at any time." = "No photos were changed. You can scan the folder again at any time."; +"No reclaimable items were found before the scan stopped." = "No reclaimable items were found before the scan stopped."; +"No reclaimable items were found in the areas checked." = "No reclaimable items were found in the areas checked."; +"No results yet" = "No results yet"; +"No scan run yet" = "No scan run yet"; +"No similar groups found" = "No similar groups found"; +"No updates are currently available for the cask apps Homebrew manages." = "No updates are currently available for the cask apps Homebrew manages."; +"Nothing selected" = "Nothing selected"; +"Nothing to clean" = "Nothing to clean"; +"Nothing was moved" = "Nothing was moved"; +"Off" = "Off"; +"Older than 30 days" = "Older than 30 days"; +"Older than 6 months" = "Older than 6 months"; +"Older than a year" = "Older than a year"; +"Oldest first" = "Oldest first"; +"On" = "On"; +"Open Activity Monitor" = "Open Activity Monitor"; +"Open App Store Updates" = "Open App Store Updates"; +"Open Folder" = "Open Folder"; +"Open a category to review individual items" = "Open a category to review individual items"; +"Open folder" = "Open folder"; +"Open the App Store updates page. Direct-download apps may provide their own updater." = "Open the App Store updates page. Direct-download apps may provide their own updater."; +"Opens a folder picker" = "Opens a folder picker"; +"Over 1 GB" = "Over 1 GB"; +"Over 10 GB" = "Over 10 GB"; +"Over 100 MB" = "Over 100 MB"; +"Package" = "Package"; +"Package contents" = "Package contents"; +"Package · %lld files" = "Package · %lld files"; +"Partial result" = "Partial result"; +"Partial results" = "Partial results"; +"Performance" = "Performance"; +"Permanently delete %@?" = "Permanently delete %@?"; +"Permanently remove %lld items" = "Permanently remove %lld items"; +"Personal data or an optional cleanup action. Left unselected by default." = "Personal data or an optional cleanup action. Left unselected by default."; +"Photos could not be compared" = "Photos could not be compared"; +"Pinned" = "Pinned"; +"Preparing scan" = "Preparing scan"; +"Preparing the next area…" = "Preparing the next area…"; +"Preparing visual comparison" = "Preparing visual comparison"; +"Program not declared in this plist" = "Program not declared in this plist"; +"Protected caches and app containers will be skipped." = "Protected caches and app containers will be skipped."; +"Protected copy" = "Protected copy"; +"Protected system locations and processes are restricted." = "Protected system locations and processes are restricted."; +"Protection" = "Protection"; +"PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review." = "PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review."; +"PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed." = "PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed."; +"PureMac compares local image thumbnails without changing your photos." = "PureMac compares local image thumbnails without changing your photos."; +"PureMac could not confirm the local XProtect installation." = "PureMac could not confirm the local XProtect installation."; +"PureMac could not read this setting." = "PureMac could not read this setting."; +"PureMac did not find removable items in the selected scan areas." = "PureMac did not find removable items in the selected scan areas."; +"PureMac measures allocated disk space without changing files." = "PureMac measures allocated disk space without changing files."; +"PureMac reads the selected folder and does not change anything during a scan." = "PureMac reads the selected folder and does not change anything during a scan."; +"PureMac will ask Homebrew for available versions when you start the check." = "PureMac will ask Homebrew for available versions when you start the check."; +"PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing." = "PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing."; +"PureMac.app" = "PureMac.app"; +"Ready for protected locations" = "Ready for protected locations"; +"Refresh disk information" = "Refresh disk information"; +"Refreshing package data and comparing installed versions." = "Refreshing package data and comparing installed versions."; +"Refused to delete %lld protected item(s) (home credential directory or similar)." = "Refused to delete %lld protected item(s) (home credential directory or similar)."; +"Remove %lld files" = "Remove %lld files"; +"Remove %lld items" = "Remove %lld items"; +"Remove apps and their related files" = "Remove apps and their related files"; +"Remove selected app files?" = "Remove selected app files?"; +"Remove selected files?" = "Remove selected files?"; +"Remove selected leftovers?" = "Remove selected leftovers?"; +"Removing the items you selected." = "Removing the items you selected."; +"Reveal %@ in Finder" = "Reveal %@ in Finder"; +"Reveal plist in Finder" = "Reveal plist in Finder"; +"Reveal skipped item in Finder" = "Reveal skipped item in Finder"; +"Review and update apps installed as Homebrew casks." = "Review and update apps installed as Homebrew casks."; +"Review built-in privacy and safety checks" = "Review built-in privacy and safety checks"; +"Review matching files side by side" = "Review matching files side by side"; +"Review only" = "Review only"; +"Review removal" = "Review removal"; +"Review the groups before acting" = "Review the groups before acting"; +"Review the macOS safeguards that protect apps, disks, network access, and system files." = "Review the macOS safeguards that protect apps, disks, network access, and system files."; +"Review the results and choose exactly what to remove." = "Review the results and choose exactly what to remove."; +"Review which apps can access private data and hardware." = "Review which apps can access private data and hardware."; +"Run audit" = "Run audit"; +"Run the scan again when you are ready to check every area." = "Run the scan again when you are ready to check every area."; +"Safari privacy guide" = "Safari privacy guide"; +"Safari: Settings > Privacy" = "Safari: Settings > Privacy"; +"Sample limit reached" = "Sample limit reached"; +"Scan Another Folder" = "Scan Another Folder"; +"Scan Folder" = "Scan Folder"; +"Scan Photos" = "Scan Photos"; +"Scan again" = "Scan again"; +"Scan complete" = "Scan complete"; +"Scan could not finish" = "Scan could not finish"; +"Scan first, then review the exact files before removing anything." = "Scan first, then review the exact files before removing anything."; +"Scan stopped" = "Scan stopped"; +"Scan this Mac" = "Scan this Mac"; +"Scan this category" = "Scan this category"; +"Scanning %@…" = "Scanning %@…"; +"Scheduled" = "Scheduled"; +"Security Settings" = "Security Settings"; +"See current resource use and review what starts in the background." = "See current resource use and review what starts in the background."; +"See what is taking up space" = "See what is taking up space"; +"Select %@" = "Select %@"; +"Select a tool from the sidebar." = "Select a tool from the sidebar."; +"Select any folder to see which files and subfolders occupy the most disk space." = "Select any folder to see which files and subfolders occupy the most disk space."; +"Select apps to update" = "Select apps to update"; +"Select at least one app to update." = "Select at least one app to update."; +"Select copies" = "Select copies"; +"Select the apps Homebrew should upgrade." = "Select the apps Homebrew should upgrade."; +"Select the extra copies you want to review" = "Select the extra copies you want to review"; +"Select visible" = "Select visible"; +"Selected" = "Selected"; +"Selected cleanup items are permanently removed." = "Selected cleanup items are permanently removed."; +"Share of scanned space" = "Share of scanned space"; +"Shares storage with %@" = "Shares storage with %@"; +"Show %@ in Finder" = "Show %@ in Finder"; +"Show in Finder" = "Show in Finder"; +"Shows a confirmation before moving the selected copies" = "Shows a confirmation before moving the selected copies"; +"Similar Photos" = "Similar Photos"; +"Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality." = "Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality."; +"Size unavailable" = "Size unavailable"; +"Skipped items" = "Skipped items"; +"Smallest first" = "Smallest first"; +"Snapshot could not be deleted" = "Snapshot could not be deleted"; +"Software Update" = "Software Update"; +"Some contents were skipped or inaccessible" = "Some contents were skipped or inaccessible"; +"Some files were not moved" = "Some files were not moved"; +"Some information could not be read (%lld)" = "Some information could not be read (%lld)"; +"Some items need attention" = "Some items need attention"; +"Some locations are unavailable" = "Some locations are unavailable"; +"Some protected locations are unavailable. Full Disk Access allows a more complete scan." = "Some protected locations are unavailable. Full Disk Access allows a more complete scan."; +"Some selected files" = "Some selected files"; +"Sort" = "Sort"; +"Space Explorer" = "Space Explorer"; +"Startup and background items" = "Startup and background items"; +"Stop" = "Stop"; +"Stop scan" = "Stop scan"; +"Stopped" = "Stopped"; +"Stopping keeps the results found so far." = "Stopping keeps the results found so far."; +"Stops scanning without changing any files" = "Stops scanning without changing any files"; +"Suggested groups" = "Suggested groups"; +"Symbolic link" = "Symbolic link"; +"Symbolic links and cloud-only items are excluded." = "Symbolic links and cloud-only items are excluded."; +"Symbolic links cannot be scanned: %@" = "Symbolic links cannot be scanned: %@"; +"Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted." = "Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted."; +"System Integrity Protection" = "System Integrity Protection"; +"System Integrity Protection is turned off." = "System Integrity Protection is turned off."; +"System daemon" = "System daemon"; +"System update" = "System update"; +"System-wide agent" = "System-wide agent"; +"The analyzed photos did not meet PureMac's visual similarity threshold." = "The analyzed photos did not meet PureMac's visual similarity threshold."; +"The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan." = "The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan."; +"The check timed out." = "The check timed out."; +"The copy marked Keep is missing or changed: %@" = "The copy marked Keep is missing or changed: %@"; +"The inspected user and third-party launch folders are empty." = "The inspected user and third-party launch folders are empty."; +"The launch item is not a property-list dictionary." = "The launch item is not a property-list dictionary."; +"The macOS application firewall is turned off." = "The macOS application firewall is turned off."; +"The protected copy cannot be moved to Trash: %@" = "The protected copy cannot be moved to Trash: %@"; +"The scan stopped. Available results are ready to review." = "The scan stopped. Available results are ready to review."; +"The selected folder cannot be scanned: %@" = "The selected folder cannot be scanned: %@"; +"The selected folder could not be read: %@" = "The selected folder could not be read: %@"; +"The selected folder is stored in the cloud and has not been downloaded: %@" = "The selected folder is stored in the cloud and has not been downloaded: %@"; +"The selected item is not a folder: %@" = "The selected item is not a folder: %@"; +"The startup disk is encrypted with FileVault." = "The startup disk is encrypted with FileVault."; +"The startup disk is not encrypted with FileVault." = "The startup disk is not encrypted with FileVault."; +"The system returned an unrecognized status." = "The system returned an unrecognized status."; +"There are no cleanup items in this category." = "There are no cleanup items in this category."; +"This folder is empty or its contents were excluded from the scan." = "This folder is empty or its contents were excluded from the scan."; +"This permanently removes %@. Its size is unknown, and the action cannot be undone." = "This permanently removes %@. Its size is unknown, and the action cannot be undone."; +"This permanently removes the selected Time Machine snapshot." = "This permanently removes the selected Time Machine snapshot."; +"This snapshot does not have a verified Time Machine timestamp." = "This snapshot does not have a verified Time Machine timestamp."; +"Time Machine" = "Time Machine"; +"Time Machine Settings" = "Time Machine Settings"; +"Time Machine did not report any snapshots for the startup disk." = "Time Machine did not report any snapshots for the startup disk."; +"Time Machine snapshots are unavailable" = "Time Machine snapshots are unavailable"; +"Time Machine snapshots can be reviewed and removed individually" = "Time Machine snapshots can be reviewed and removed individually"; +"Tools" = "Tools"; +"Try Again" = "Try Again"; +"Try another name, size, or date range." = "Try another name, size, or date range."; +"Uninstaller" = "Uninstaller"; +"Unknown" = "Unknown"; +"Unknown error" = "Unknown error"; +"Updates from Homebrew" = "Updates from Homebrew"; +"Updating…" = "Updating…"; +"Upgrade %lld Apps" = "Upgrade %lld Apps"; +"Upgrade 1 App" = "Upgrade 1 App"; +"Upgrade selected apps?" = "Upgrade selected apps?"; +"User agent" = "User agent"; +"Verifying possible matches" = "Verifying possible matches"; +"Watches folders" = "Watches folders"; +"Watches paths" = "Watches paths"; +"XProtect" = "XProtect"; +"allocated in this folder" = "allocated in this folder"; +"definitions %@" = "definitions %@"; +"engine %@" = "engine %@"; +"macOS does not report reliable per-snapshot sizes in this listing." = "macOS does not report reliable per-snapshot sizes in this listing."; +"reclaimed" = "reclaimed"; +"similar group" = "similar group"; +"similar groups" = "similar groups"; +"tmutil is not available on this Mac." = "tmutil is not available on this Mac."; diff --git a/PureMac/en.lproj/Localizable.strings b/PureMac/en.lproj/Localizable.strings index 3943ba8..5937a89 100644 --- a/PureMac/en.lproj/Localizable.strings +++ b/PureMac/en.lproj/Localizable.strings @@ -460,3 +460,410 @@ /* Simulator runtimes */ "Simulator runtime" = "Simulator runtime"; + +/* Current dashboard, tools, and cleanup review */ +"\nAnd %lld more." = "\nAnd %lld more."; +"%@ %@ to %@" = "%@ %@ to %@"; +"%@ available" = "%@ available"; +"%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again." = "%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again."; +"%@ did not finish within the allowed time." = "%@ did not finish within the allowed time."; +"%@ exited with status %d%@" = "%@ exited with status %d%@"; +"%@ files inspected" = "%@ files inspected"; +"%@ found across %lld categories." = "%@ found across %lld categories."; +"%@ found before the scan stopped. Results may be incomplete." = "%@ found before the scan stopped. Results may be incomplete."; +"%@ of %@" = "%@ of %@"; +"%@ of %@ candidates · %@ verified" = "%@ of %@ candidates · %@ verified"; +"%@ reviewable" = "%@ reviewable"; +"%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone." = "%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone."; +"%@ will move to Trash" = "%@ will move to Trash"; +"%lld analyzed" = "%lld analyzed"; +"%lld apps selected" = "%lld apps selected"; +"%lld areas" = "%lld areas"; +"%lld compared" = "%lld compared"; +"%lld exact copies · %@ each" = "%lld exact copies · %@ each"; +"%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access." = "%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access."; +"%lld file(s) could not be removed. Check that the items still exist and are not in use." = "%lld file(s) could not be removed. Check that the items still exist and are not in use."; +"%lld files totaling %@ were moved. Every protected copy remains in place." = "%lld files totaling %@ were moved. Every protected copy remains in place."; +"%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place." = "%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place."; +"%lld files · %lld folders" = "%lld files · %lld folders"; +"%lld folders" = "%lld folders"; +"%lld found" = "%lld found"; +"%lld inaccessible" = "%lld inaccessible"; +"%lld items · %@ found" = "%lld items · %@ found"; +"%lld matched" = "%lld matched"; +"%lld of %lld items shown" = "%lld of %lld items shown"; +"%lld percent" = "%lld percent"; +"%lld photos" = "%lld photos"; +"%lld photos · %@" = "%lld photos · %@"; +"%lld selected items will be permanently deleted. Review the list before continuing." = "%lld selected items will be permanently deleted. Review the list before continuing."; +"%lld selected · %@" = "%lld selected · %@"; +"%lld skipped" = "%lld skipped"; +"%lld unsafe or unavailable items were not scanned" = "%lld unsafe or unavailable items were not scanned"; +"%lld unsafe or unavailable items were skipped." = "%lld unsafe or unavailable items were skipped."; +"%lld updates available" = "%lld updates available"; +"%lld%% visual score" = "%lld%% visual score"; +", and %lld more" = ", and %lld more"; +"1 app selected" = "1 app selected"; +"1 update available" = "1 update available"; +"500 photo limit" = "500 photo limit"; +"A clear view of reclaimable storage and the tools that manage it." = "A clear view of reclaimable storage and the tools that manage it."; +"A selected file is missing or changed: %@" = "A selected file is missing or changed: %@"; +"A selected file no longer matches its kept copy: %@" = "A selected file no longer matches its kept copy: %@"; +"Access denied" = "Access denied"; +"Administrator removal failed: %@" = "Administrator removal failed: %@"; +"Always exclude from cleanup" = "Always exclude from cleanup"; +"Any age" = "Any age"; +"Any size" = "Any size"; +"App Updates" = "App Updates"; +"App and document packages are excluded: %@" = "App and document packages are excluded: %@"; +"App bundle missing" = "App bundle missing"; +"App downloads are checked before opening." = "App downloads are checked before opening."; +"App permissions" = "App permissions"; +"Apple Guide" = "Apple Guide"; +"Apple's built-in malware protection is installed. Update recency is managed by macOS." = "Apple's built-in malware protection is installed. Update recency is managed by macOS."; +"Application Firewall" = "Application Firewall"; +"Apps outside Homebrew" = "Apps outside Homebrew"; +"At login" = "At login"; +"Available" = "Available"; +"Available to review" = "Available to review"; +"Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions." = "Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions."; +"Browser privacy" = "Browser privacy"; +"Building visual signatures" = "Building visual signatures"; +"Camera" = "Camera"; +"Care" = "Care"; +"Changed during scan" = "Changed during scan"; +"Check Again" = "Check Again"; +"Check again" = "Check again"; +"Check built-in safeguards" = "Check built-in safeguards"; +"Check installed apps for new versions" = "Check installed apps for new versions"; +"Check installed cask apps" = "Check installed cask apps"; +"Checked %@. Unknown means the setting could not be confirmed." = "Checked %@. Unknown means the setting could not be confirmed."; +"Checking" = "Checking"; +"Checking Homebrew casks" = "Checking Homebrew casks"; +"Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation." = "Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation."; +"Checking your Mac. Nothing is removed during a scan." = "Checking your Mac. Nothing is removed during a scan."; +"Choose Another Folder" = "Choose Another Folder"; +"Choose Folder" = "Choose Folder"; +"Choose a Folder" = "Choose a Folder"; +"Choose a folder of photos" = "Choose a folder of photos"; +"Choose a folder to check for duplicate files" = "Choose a folder to check for duplicate files"; +"Choose a folder to inspect" = "Choose a folder to inspect"; +"Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically." = "Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically."; +"Choose a photo folder" = "Choose a photo folder"; +"Choose where to look" = "Choose where to look"; +"Chrome privacy guide" = "Chrome privacy guide"; +"Clean selected items" = "Clean selected items"; +"Cleaning selected items" = "Cleaning selected items"; +"Cleanup Exclusions" = "Cleanup Exclusions"; +"Cleanup finished and disk information is refreshing." = "Cleanup finished and disk information is refreshing."; +"Cleanup plan" = "Cleanup plan"; +"Clear Selection" = "Clear Selection"; +"Clear filters" = "Clear filters"; +"Clear search" = "Clear search"; +"Clear selection" = "Clear selection"; +"Cloud-only file" = "Cloud-only file"; +"Collapse duplicate group" = "Collapse duplicate group"; +"Compare visually similar photos" = "Compare visually similar photos"; +"Conditional keep alive" = "Conditional keep alive"; +"Copy path" = "Copy path"; +"Could not inspect %@" = "Could not inspect %@"; +"Could not list Time Machine snapshots" = "Could not list Time Machine snapshots"; +"Could not read" = "Could not read"; +"Could not read %@" = "Could not read %@"; +"Couldn't check for updates" = "Couldn't check for updates"; +"Current scan path" = "Current scan path"; +"Delete" = "Delete"; +"Delete Snapshot" = "Delete Snapshot"; +"Delete local snapshot?" = "Delete local snapshot?"; +"Deselect visible" = "Deselect visible"; +"Developer Cleanup" = "Developer Cleanup"; +"Disabled" = "Disabled"; +"Downloaded apps are not being assessed by Gatekeeper." = "Downloaded apps are not being assessed by Gatekeeper."; +"Drag to tilt" = "Drag to tilt"; +"Duplicate Finder" = "Duplicate Finder"; +"Duplicate groups" = "Duplicate groups"; +"Every %lld seconds" = "Every %lld seconds"; +"Every eligible file was checked." = "Every eligible file was checked."; +"Exact-match cleanup with a protected copy in every group" = "Exact-match cleanup with a protected copy in every group"; +"Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it." = "Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it."; +"Expand duplicate group" = "Expand duplicate group"; +"File" = "File"; +"FileVault" = "FileVault"; +"FileVault Settings" = "FileVault Settings"; +"Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them." = "Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them."; +"Filter cleanup files" = "Filter cleanup files"; +"Find a file or path" = "Find a file or path"; +"Find copies that are exactly the same" = "Find copies that are exactly the same"; +"Find space to reclaim." = "Find space to reclaim."; +"Find visually related shots in a folder and review them side by side." = "Find visually related shots in a folder and review them side by side."; +"Find what uses the most disk space" = "Find what uses the most disk space"; +"Finding local photos" = "Finding local photos"; +"Firewall Settings" = "Firewall Settings"; +"Focused utilities for storage, apps, and system maintenance" = "Focused utilities for storage, apps, and system maintenance"; +"Folder could not be inspected" = "Folder could not be inspected"; +"Full Disk Access is off" = "Full Disk Access is off"; +"Full access" = "Full access"; +"Gatekeeper" = "Gatekeeper"; +"Group %lld" = "Group %lld"; +"Grouping similar shots" = "Grouping similar shots"; +"Hard-linked copy" = "Hard-linked copy"; +"Homebrew apps are up to date" = "Homebrew apps are up to date"; +"Homebrew did not finish before the operation timed out." = "Homebrew did not finish before the operation timed out."; +"Homebrew finished, but %lld selected apps still report updates." = "Homebrew finished, but %lld selected apps still report updates."; +"Homebrew finished, but 1 selected app still reports an update." = "Homebrew finished, but 1 selected app still reports an update."; +"Homebrew finished. Check again to verify installed versions." = "Homebrew finished. Check again to verify installed versions."; +"Homebrew not found" = "Homebrew not found"; +"Homebrew produced more output than PureMac could safely retain." = "Homebrew produced more output than PureMac could safely retain."; +"Homebrew returned an invalid cask identifier: %@" = "Homebrew returned an invalid cask identifier: %@"; +"Homebrew returned update information PureMac could not read." = "Homebrew returned update information PureMac could not read."; +"Homebrew updated the %lld selected apps." = "Homebrew updated the %lld selected apps."; +"Homebrew updated the selected app." = "Homebrew updated the selected app."; +"Homebrew was not found in a standard installation location." = "Homebrew was not found in a standard installation location."; +"Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process." = "Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process."; +"Includes %lld selected items hidden by filters." = "Includes %lld selected items hidden by filters."; +"Incoming network connections are filtered." = "Incoming network connections are filtered."; +"Inspect" = "Inspect"; +"Inspect a folder by allocated disk space. Your files are never changed." = "Inspect a folder by allocated disk space. Your files are never changed."; +"Inspect memory and background activity" = "Inspect memory and background activity"; +"Inspect startup items and local snapshots again" = "Inspect startup items and local snapshots again"; +"Inspected %@ files in %@. %@" = "Inspected %@ files in %@. %@"; +"Inspecting startup items and local snapshots…" = "Inspecting startup items and local snapshots…"; +"Inspection stopped" = "Inspection stopped"; +"Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels." = "Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels."; +"Installed" = "Installed"; +"Installed %@" = "Installed %@"; +"Keep" = "Keep"; +"Keep PureMac open until this pass finishes." = "Keep PureMac open until this pass finishes."; +"Keep alive" = "Keep alive"; +"Largest first" = "Largest first"; +"Largest items" = "Largest items"; +"Last activity: %@" = "Last activity: %@"; +"Last checked" = "Last checked"; +"Launch agents and daemons installed outside macOS system folders" = "Launch agents and daemons installed outside macOS system folders"; +"Leftovers" = "Leftovers"; +"Live" = "Live"; +"Live resources" = "Live resources"; +"Local and private" = "Local and private"; +"Local files" = "Local files"; +"Local snapshot" = "Local snapshot"; +"Local snapshots" = "Local snapshots"; +"Location" = "Location"; +"Login Items Settings" = "Login Items Settings"; +"Looking through files" = "Looking through files"; +"Mac storage" = "Mac storage"; +"Managed cleanup action" = "Managed cleanup action"; +"Matching files" = "Matching files"; +"Measuring allocated space" = "Measuring allocated space"; +"Memory pressure use" = "Memory pressure use"; +"Microphone" = "Microphone"; +"Modified" = "Modified"; +"Move selected duplicates to Trash?" = "Move selected duplicates to Trash?"; +"Moved to Trash" = "Moved to Trash"; +"Name" = "Name"; +"Needs attention" = "Needs attention"; +"Network state" = "Network state"; +"No exact duplicates found" = "No exact duplicates found"; +"No excluded paths" = "No excluded paths"; +"No files found" = "No files found"; +"No files were changed. Rescan this folder when you are ready." = "No files were changed. Rescan this folder when you are ready."; +"No launchd items found" = "No launchd items found"; +"No local snapshots reported" = "No local snapshots reported"; +"No matching files" = "No matching files"; +"No measurable items" = "No measurable items"; +"No photos were changed. You can scan the folder again at any time." = "No photos were changed. You can scan the folder again at any time."; +"No reclaimable items were found before the scan stopped." = "No reclaimable items were found before the scan stopped."; +"No reclaimable items were found in the areas checked." = "No reclaimable items were found in the areas checked."; +"No results yet" = "No results yet"; +"No scan run yet" = "No scan run yet"; +"No similar groups found" = "No similar groups found"; +"No updates are currently available for the cask apps Homebrew manages." = "No updates are currently available for the cask apps Homebrew manages."; +"Nothing selected" = "Nothing selected"; +"Nothing to clean" = "Nothing to clean"; +"Nothing was moved" = "Nothing was moved"; +"Off" = "Off"; +"Older than 30 days" = "Older than 30 days"; +"Older than 6 months" = "Older than 6 months"; +"Older than a year" = "Older than a year"; +"Oldest first" = "Oldest first"; +"On" = "On"; +"Open Activity Monitor" = "Open Activity Monitor"; +"Open App Store Updates" = "Open App Store Updates"; +"Open Folder" = "Open Folder"; +"Open a category to review individual items" = "Open a category to review individual items"; +"Open folder" = "Open folder"; +"Open the App Store updates page. Direct-download apps may provide their own updater." = "Open the App Store updates page. Direct-download apps may provide their own updater."; +"Opens a folder picker" = "Opens a folder picker"; +"Over 1 GB" = "Over 1 GB"; +"Over 10 GB" = "Over 10 GB"; +"Over 100 MB" = "Over 100 MB"; +"Package" = "Package"; +"Package contents" = "Package contents"; +"Package · %lld files" = "Package · %lld files"; +"Partial result" = "Partial result"; +"Partial results" = "Partial results"; +"Performance" = "Performance"; +"Permanently delete %@?" = "Permanently delete %@?"; +"Permanently remove %lld items" = "Permanently remove %lld items"; +"Personal data or an optional cleanup action. Left unselected by default." = "Personal data or an optional cleanup action. Left unselected by default."; +"Photos could not be compared" = "Photos could not be compared"; +"Pinned" = "Pinned"; +"Preparing scan" = "Preparing scan"; +"Preparing the next area…" = "Preparing the next area…"; +"Preparing visual comparison" = "Preparing visual comparison"; +"Program not declared in this plist" = "Program not declared in this plist"; +"Protected caches and app containers will be skipped." = "Protected caches and app containers will be skipped."; +"Protected copy" = "Protected copy"; +"Protected system locations and processes are restricted." = "Protected system locations and processes are restricted."; +"Protection" = "Protection"; +"PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review." = "PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review."; +"PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed." = "PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed."; +"PureMac compares local image thumbnails without changing your photos." = "PureMac compares local image thumbnails without changing your photos."; +"PureMac could not confirm the local XProtect installation." = "PureMac could not confirm the local XProtect installation."; +"PureMac could not read this setting." = "PureMac could not read this setting."; +"PureMac did not find removable items in the selected scan areas." = "PureMac did not find removable items in the selected scan areas."; +"PureMac measures allocated disk space without changing files." = "PureMac measures allocated disk space without changing files."; +"PureMac reads the selected folder and does not change anything during a scan." = "PureMac reads the selected folder and does not change anything during a scan."; +"PureMac will ask Homebrew for available versions when you start the check." = "PureMac will ask Homebrew for available versions when you start the check."; +"PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing." = "PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing."; +"PureMac.app" = "PureMac.app"; +"Ready for protected locations" = "Ready for protected locations"; +"Refresh disk information" = "Refresh disk information"; +"Refreshing package data and comparing installed versions." = "Refreshing package data and comparing installed versions."; +"Refused to delete %lld protected item(s) (home credential directory or similar)." = "Refused to delete %lld protected item(s) (home credential directory or similar)."; +"Remove %lld files" = "Remove %lld files"; +"Remove %lld items" = "Remove %lld items"; +"Remove apps and their related files" = "Remove apps and their related files"; +"Remove selected app files?" = "Remove selected app files?"; +"Remove selected files?" = "Remove selected files?"; +"Remove selected leftovers?" = "Remove selected leftovers?"; +"Removing the items you selected." = "Removing the items you selected."; +"Reveal %@ in Finder" = "Reveal %@ in Finder"; +"Reveal plist in Finder" = "Reveal plist in Finder"; +"Reveal skipped item in Finder" = "Reveal skipped item in Finder"; +"Review and update apps installed as Homebrew casks." = "Review and update apps installed as Homebrew casks."; +"Review built-in privacy and safety checks" = "Review built-in privacy and safety checks"; +"Review matching files side by side" = "Review matching files side by side"; +"Review only" = "Review only"; +"Review removal" = "Review removal"; +"Review the groups before acting" = "Review the groups before acting"; +"Review the macOS safeguards that protect apps, disks, network access, and system files." = "Review the macOS safeguards that protect apps, disks, network access, and system files."; +"Review the results and choose exactly what to remove." = "Review the results and choose exactly what to remove."; +"Review which apps can access private data and hardware." = "Review which apps can access private data and hardware."; +"Run audit" = "Run audit"; +"Run the scan again when you are ready to check every area." = "Run the scan again when you are ready to check every area."; +"Safari privacy guide" = "Safari privacy guide"; +"Safari: Settings > Privacy" = "Safari: Settings > Privacy"; +"Sample limit reached" = "Sample limit reached"; +"Scan Another Folder" = "Scan Another Folder"; +"Scan Folder" = "Scan Folder"; +"Scan Photos" = "Scan Photos"; +"Scan again" = "Scan again"; +"Scan complete" = "Scan complete"; +"Scan could not finish" = "Scan could not finish"; +"Scan first, then review the exact files before removing anything." = "Scan first, then review the exact files before removing anything."; +"Scan stopped" = "Scan stopped"; +"Scan this Mac" = "Scan this Mac"; +"Scan this category" = "Scan this category"; +"Scanning %@…" = "Scanning %@…"; +"Scheduled" = "Scheduled"; +"Security Settings" = "Security Settings"; +"See current resource use and review what starts in the background." = "See current resource use and review what starts in the background."; +"See what is taking up space" = "See what is taking up space"; +"Select %@" = "Select %@"; +"Select a tool from the sidebar." = "Select a tool from the sidebar."; +"Select any folder to see which files and subfolders occupy the most disk space." = "Select any folder to see which files and subfolders occupy the most disk space."; +"Select apps to update" = "Select apps to update"; +"Select at least one app to update." = "Select at least one app to update."; +"Select copies" = "Select copies"; +"Select the apps Homebrew should upgrade." = "Select the apps Homebrew should upgrade."; +"Select the extra copies you want to review" = "Select the extra copies you want to review"; +"Select visible" = "Select visible"; +"Selected" = "Selected"; +"Selected cleanup items are permanently removed." = "Selected cleanup items are permanently removed."; +"Share of scanned space" = "Share of scanned space"; +"Shares storage with %@" = "Shares storage with %@"; +"Show %@ in Finder" = "Show %@ in Finder"; +"Show in Finder" = "Show in Finder"; +"Shows a confirmation before moving the selected copies" = "Shows a confirmation before moving the selected copies"; +"Similar Photos" = "Similar Photos"; +"Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality." = "Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality."; +"Size unavailable" = "Size unavailable"; +"Skipped items" = "Skipped items"; +"Smallest first" = "Smallest first"; +"Snapshot could not be deleted" = "Snapshot could not be deleted"; +"Software Update" = "Software Update"; +"Some contents were skipped or inaccessible" = "Some contents were skipped or inaccessible"; +"Some files were not moved" = "Some files were not moved"; +"Some information could not be read (%lld)" = "Some information could not be read (%lld)"; +"Some items need attention" = "Some items need attention"; +"Some locations are unavailable" = "Some locations are unavailable"; +"Some protected locations are unavailable. Full Disk Access allows a more complete scan." = "Some protected locations are unavailable. Full Disk Access allows a more complete scan."; +"Some selected files" = "Some selected files"; +"Sort" = "Sort"; +"Space Explorer" = "Space Explorer"; +"Startup and background items" = "Startup and background items"; +"Stop" = "Stop"; +"Stop scan" = "Stop scan"; +"Stopped" = "Stopped"; +"Stopping keeps the results found so far." = "Stopping keeps the results found so far."; +"Stops scanning without changing any files" = "Stops scanning without changing any files"; +"Suggested groups" = "Suggested groups"; +"Symbolic link" = "Symbolic link"; +"Symbolic links and cloud-only items are excluded." = "Symbolic links and cloud-only items are excluded."; +"Symbolic links cannot be scanned: %@" = "Symbolic links cannot be scanned: %@"; +"Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted." = "Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted."; +"System Integrity Protection" = "System Integrity Protection"; +"System Integrity Protection is turned off." = "System Integrity Protection is turned off."; +"System daemon" = "System daemon"; +"System update" = "System update"; +"System-wide agent" = "System-wide agent"; +"The analyzed photos did not meet PureMac's visual similarity threshold." = "The analyzed photos did not meet PureMac's visual similarity threshold."; +"The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan." = "The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan."; +"The check timed out." = "The check timed out."; +"The copy marked Keep is missing or changed: %@" = "The copy marked Keep is missing or changed: %@"; +"The inspected user and third-party launch folders are empty." = "The inspected user and third-party launch folders are empty."; +"The launch item is not a property-list dictionary." = "The launch item is not a property-list dictionary."; +"The macOS application firewall is turned off." = "The macOS application firewall is turned off."; +"The protected copy cannot be moved to Trash: %@" = "The protected copy cannot be moved to Trash: %@"; +"The scan stopped. Available results are ready to review." = "The scan stopped. Available results are ready to review."; +"The selected folder cannot be scanned: %@" = "The selected folder cannot be scanned: %@"; +"The selected folder could not be read: %@" = "The selected folder could not be read: %@"; +"The selected folder is stored in the cloud and has not been downloaded: %@" = "The selected folder is stored in the cloud and has not been downloaded: %@"; +"The selected item is not a folder: %@" = "The selected item is not a folder: %@"; +"The startup disk is encrypted with FileVault." = "The startup disk is encrypted with FileVault."; +"The startup disk is not encrypted with FileVault." = "The startup disk is not encrypted with FileVault."; +"The system returned an unrecognized status." = "The system returned an unrecognized status."; +"There are no cleanup items in this category." = "There are no cleanup items in this category."; +"This folder is empty or its contents were excluded from the scan." = "This folder is empty or its contents were excluded from the scan."; +"This permanently removes %@. Its size is unknown, and the action cannot be undone." = "This permanently removes %@. Its size is unknown, and the action cannot be undone."; +"This permanently removes the selected Time Machine snapshot." = "This permanently removes the selected Time Machine snapshot."; +"This snapshot does not have a verified Time Machine timestamp." = "This snapshot does not have a verified Time Machine timestamp."; +"Time Machine" = "Time Machine"; +"Time Machine Settings" = "Time Machine Settings"; +"Time Machine did not report any snapshots for the startup disk." = "Time Machine did not report any snapshots for the startup disk."; +"Time Machine snapshots are unavailable" = "Time Machine snapshots are unavailable"; +"Time Machine snapshots can be reviewed and removed individually" = "Time Machine snapshots can be reviewed and removed individually"; +"Tools" = "Tools"; +"Try Again" = "Try Again"; +"Try another name, size, or date range." = "Try another name, size, or date range."; +"Uninstaller" = "Uninstaller"; +"Unknown" = "Unknown"; +"Unknown error" = "Unknown error"; +"Updates from Homebrew" = "Updates from Homebrew"; +"Updating…" = "Updating…"; +"Upgrade %lld Apps" = "Upgrade %lld Apps"; +"Upgrade 1 App" = "Upgrade 1 App"; +"Upgrade selected apps?" = "Upgrade selected apps?"; +"User agent" = "User agent"; +"Verifying possible matches" = "Verifying possible matches"; +"Watches folders" = "Watches folders"; +"Watches paths" = "Watches paths"; +"XProtect" = "XProtect"; +"allocated in this folder" = "allocated in this folder"; +"definitions %@" = "definitions %@"; +"engine %@" = "engine %@"; +"macOS does not report reliable per-snapshot sizes in this listing." = "macOS does not report reliable per-snapshot sizes in this listing."; +"reclaimed" = "reclaimed"; +"similar group" = "similar group"; +"similar groups" = "similar groups"; +"tmutil is not available on this Mac." = "tmutil is not available on this Mac."; diff --git a/PureMac/es.lproj/Localizable.strings b/PureMac/es.lproj/Localizable.strings index 3cefa18..a765e0f 100644 --- a/PureMac/es.lproj/Localizable.strings +++ b/PureMac/es.lproj/Localizable.strings @@ -460,3 +460,410 @@ /* Simulator runtimes */ "Simulator runtime" = "Runtime del simulador"; + +/* Current dashboard, tools, and cleanup review — English fallback until translated */ +"\nAnd %lld more." = "\nAnd %lld more."; +"%@ %@ to %@" = "%@ %@ to %@"; +"%@ available" = "%@ available"; +"%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again." = "%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again."; +"%@ did not finish within the allowed time." = "%@ did not finish within the allowed time."; +"%@ exited with status %d%@" = "%@ exited with status %d%@"; +"%@ files inspected" = "%@ files inspected"; +"%@ found across %lld categories." = "%@ found across %lld categories."; +"%@ found before the scan stopped. Results may be incomplete." = "%@ found before the scan stopped. Results may be incomplete."; +"%@ of %@" = "%@ of %@"; +"%@ of %@ candidates · %@ verified" = "%@ of %@ candidates · %@ verified"; +"%@ reviewable" = "%@ reviewable"; +"%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone." = "%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone."; +"%@ will move to Trash" = "%@ will move to Trash"; +"%lld analyzed" = "%lld analyzed"; +"%lld apps selected" = "%lld apps selected"; +"%lld areas" = "%lld areas"; +"%lld compared" = "%lld compared"; +"%lld exact copies · %@ each" = "%lld exact copies · %@ each"; +"%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access." = "%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access."; +"%lld file(s) could not be removed. Check that the items still exist and are not in use." = "%lld file(s) could not be removed. Check that the items still exist and are not in use."; +"%lld files totaling %@ were moved. Every protected copy remains in place." = "%lld files totaling %@ were moved. Every protected copy remains in place."; +"%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place." = "%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place."; +"%lld files · %lld folders" = "%lld files · %lld folders"; +"%lld folders" = "%lld folders"; +"%lld found" = "%lld found"; +"%lld inaccessible" = "%lld inaccessible"; +"%lld items · %@ found" = "%lld items · %@ found"; +"%lld matched" = "%lld matched"; +"%lld of %lld items shown" = "%lld of %lld items shown"; +"%lld percent" = "%lld percent"; +"%lld photos" = "%lld photos"; +"%lld photos · %@" = "%lld photos · %@"; +"%lld selected items will be permanently deleted. Review the list before continuing." = "%lld selected items will be permanently deleted. Review the list before continuing."; +"%lld selected · %@" = "%lld selected · %@"; +"%lld skipped" = "%lld skipped"; +"%lld unsafe or unavailable items were not scanned" = "%lld unsafe or unavailable items were not scanned"; +"%lld unsafe or unavailable items were skipped." = "%lld unsafe or unavailable items were skipped."; +"%lld updates available" = "%lld updates available"; +"%lld%% visual score" = "%lld%% visual score"; +", and %lld more" = ", and %lld more"; +"1 app selected" = "1 app selected"; +"1 update available" = "1 update available"; +"500 photo limit" = "500 photo limit"; +"A clear view of reclaimable storage and the tools that manage it." = "A clear view of reclaimable storage and the tools that manage it."; +"A selected file is missing or changed: %@" = "A selected file is missing or changed: %@"; +"A selected file no longer matches its kept copy: %@" = "A selected file no longer matches its kept copy: %@"; +"Access denied" = "Access denied"; +"Administrator removal failed: %@" = "Administrator removal failed: %@"; +"Always exclude from cleanup" = "Always exclude from cleanup"; +"Any age" = "Any age"; +"Any size" = "Any size"; +"App Updates" = "App Updates"; +"App and document packages are excluded: %@" = "App and document packages are excluded: %@"; +"App bundle missing" = "App bundle missing"; +"App downloads are checked before opening." = "App downloads are checked before opening."; +"App permissions" = "App permissions"; +"Apple Guide" = "Apple Guide"; +"Apple's built-in malware protection is installed. Update recency is managed by macOS." = "Apple's built-in malware protection is installed. Update recency is managed by macOS."; +"Application Firewall" = "Application Firewall"; +"Apps outside Homebrew" = "Apps outside Homebrew"; +"At login" = "At login"; +"Available" = "Available"; +"Available to review" = "Available to review"; +"Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions." = "Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions."; +"Browser privacy" = "Browser privacy"; +"Building visual signatures" = "Building visual signatures"; +"Camera" = "Camera"; +"Care" = "Care"; +"Changed during scan" = "Changed during scan"; +"Check Again" = "Check Again"; +"Check again" = "Check again"; +"Check built-in safeguards" = "Check built-in safeguards"; +"Check installed apps for new versions" = "Check installed apps for new versions"; +"Check installed cask apps" = "Check installed cask apps"; +"Checked %@. Unknown means the setting could not be confirmed." = "Checked %@. Unknown means the setting could not be confirmed."; +"Checking" = "Checking"; +"Checking Homebrew casks" = "Checking Homebrew casks"; +"Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation." = "Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation."; +"Checking your Mac. Nothing is removed during a scan." = "Checking your Mac. Nothing is removed during a scan."; +"Choose Another Folder" = "Choose Another Folder"; +"Choose Folder" = "Choose Folder"; +"Choose a Folder" = "Choose a Folder"; +"Choose a folder of photos" = "Choose a folder of photos"; +"Choose a folder to check for duplicate files" = "Choose a folder to check for duplicate files"; +"Choose a folder to inspect" = "Choose a folder to inspect"; +"Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically." = "Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically."; +"Choose a photo folder" = "Choose a photo folder"; +"Choose where to look" = "Choose where to look"; +"Chrome privacy guide" = "Chrome privacy guide"; +"Clean selected items" = "Clean selected items"; +"Cleaning selected items" = "Cleaning selected items"; +"Cleanup Exclusions" = "Cleanup Exclusions"; +"Cleanup finished and disk information is refreshing." = "Cleanup finished and disk information is refreshing."; +"Cleanup plan" = "Cleanup plan"; +"Clear Selection" = "Clear Selection"; +"Clear filters" = "Clear filters"; +"Clear search" = "Clear search"; +"Clear selection" = "Clear selection"; +"Cloud-only file" = "Cloud-only file"; +"Collapse duplicate group" = "Collapse duplicate group"; +"Compare visually similar photos" = "Compare visually similar photos"; +"Conditional keep alive" = "Conditional keep alive"; +"Copy path" = "Copy path"; +"Could not inspect %@" = "Could not inspect %@"; +"Could not list Time Machine snapshots" = "Could not list Time Machine snapshots"; +"Could not read" = "Could not read"; +"Could not read %@" = "Could not read %@"; +"Couldn't check for updates" = "Couldn't check for updates"; +"Current scan path" = "Current scan path"; +"Delete" = "Delete"; +"Delete Snapshot" = "Delete Snapshot"; +"Delete local snapshot?" = "Delete local snapshot?"; +"Deselect visible" = "Deselect visible"; +"Developer Cleanup" = "Developer Cleanup"; +"Disabled" = "Disabled"; +"Downloaded apps are not being assessed by Gatekeeper." = "Downloaded apps are not being assessed by Gatekeeper."; +"Drag to tilt" = "Drag to tilt"; +"Duplicate Finder" = "Duplicate Finder"; +"Duplicate groups" = "Duplicate groups"; +"Every %lld seconds" = "Every %lld seconds"; +"Every eligible file was checked." = "Every eligible file was checked."; +"Exact-match cleanup with a protected copy in every group" = "Exact-match cleanup with a protected copy in every group"; +"Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it." = "Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it."; +"Expand duplicate group" = "Expand duplicate group"; +"File" = "File"; +"FileVault" = "FileVault"; +"FileVault Settings" = "FileVault Settings"; +"Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them." = "Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them."; +"Filter cleanup files" = "Filter cleanup files"; +"Find a file or path" = "Find a file or path"; +"Find copies that are exactly the same" = "Find copies that are exactly the same"; +"Find space to reclaim." = "Find space to reclaim."; +"Find visually related shots in a folder and review them side by side." = "Find visually related shots in a folder and review them side by side."; +"Find what uses the most disk space" = "Find what uses the most disk space"; +"Finding local photos" = "Finding local photos"; +"Firewall Settings" = "Firewall Settings"; +"Focused utilities for storage, apps, and system maintenance" = "Focused utilities for storage, apps, and system maintenance"; +"Folder could not be inspected" = "Folder could not be inspected"; +"Full Disk Access is off" = "Full Disk Access is off"; +"Full access" = "Full access"; +"Gatekeeper" = "Gatekeeper"; +"Group %lld" = "Group %lld"; +"Grouping similar shots" = "Grouping similar shots"; +"Hard-linked copy" = "Hard-linked copy"; +"Homebrew apps are up to date" = "Homebrew apps are up to date"; +"Homebrew did not finish before the operation timed out." = "Homebrew did not finish before the operation timed out."; +"Homebrew finished, but %lld selected apps still report updates." = "Homebrew finished, but %lld selected apps still report updates."; +"Homebrew finished, but 1 selected app still reports an update." = "Homebrew finished, but 1 selected app still reports an update."; +"Homebrew finished. Check again to verify installed versions." = "Homebrew finished. Check again to verify installed versions."; +"Homebrew not found" = "Homebrew not found"; +"Homebrew produced more output than PureMac could safely retain." = "Homebrew produced more output than PureMac could safely retain."; +"Homebrew returned an invalid cask identifier: %@" = "Homebrew returned an invalid cask identifier: %@"; +"Homebrew returned update information PureMac could not read." = "Homebrew returned update information PureMac could not read."; +"Homebrew updated the %lld selected apps." = "Homebrew updated the %lld selected apps."; +"Homebrew updated the selected app." = "Homebrew updated the selected app."; +"Homebrew was not found in a standard installation location." = "Homebrew was not found in a standard installation location."; +"Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process." = "Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process."; +"Includes %lld selected items hidden by filters." = "Includes %lld selected items hidden by filters."; +"Incoming network connections are filtered." = "Incoming network connections are filtered."; +"Inspect" = "Inspect"; +"Inspect a folder by allocated disk space. Your files are never changed." = "Inspect a folder by allocated disk space. Your files are never changed."; +"Inspect memory and background activity" = "Inspect memory and background activity"; +"Inspect startup items and local snapshots again" = "Inspect startup items and local snapshots again"; +"Inspected %@ files in %@. %@" = "Inspected %@ files in %@. %@"; +"Inspecting startup items and local snapshots…" = "Inspecting startup items and local snapshots…"; +"Inspection stopped" = "Inspection stopped"; +"Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels." = "Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels."; +"Installed" = "Installed"; +"Installed %@" = "Installed %@"; +"Keep" = "Keep"; +"Keep PureMac open until this pass finishes." = "Keep PureMac open until this pass finishes."; +"Keep alive" = "Keep alive"; +"Largest first" = "Largest first"; +"Largest items" = "Largest items"; +"Last activity: %@" = "Last activity: %@"; +"Last checked" = "Last checked"; +"Launch agents and daemons installed outside macOS system folders" = "Launch agents and daemons installed outside macOS system folders"; +"Leftovers" = "Leftovers"; +"Live" = "Live"; +"Live resources" = "Live resources"; +"Local and private" = "Local and private"; +"Local files" = "Local files"; +"Local snapshot" = "Local snapshot"; +"Local snapshots" = "Local snapshots"; +"Location" = "Location"; +"Login Items Settings" = "Login Items Settings"; +"Looking through files" = "Looking through files"; +"Mac storage" = "Mac storage"; +"Managed cleanup action" = "Managed cleanup action"; +"Matching files" = "Matching files"; +"Measuring allocated space" = "Measuring allocated space"; +"Memory pressure use" = "Memory pressure use"; +"Microphone" = "Microphone"; +"Modified" = "Modified"; +"Move selected duplicates to Trash?" = "Move selected duplicates to Trash?"; +"Moved to Trash" = "Moved to Trash"; +"Name" = "Name"; +"Needs attention" = "Needs attention"; +"Network state" = "Network state"; +"No exact duplicates found" = "No exact duplicates found"; +"No excluded paths" = "No excluded paths"; +"No files found" = "No files found"; +"No files were changed. Rescan this folder when you are ready." = "No files were changed. Rescan this folder when you are ready."; +"No launchd items found" = "No launchd items found"; +"No local snapshots reported" = "No local snapshots reported"; +"No matching files" = "No matching files"; +"No measurable items" = "No measurable items"; +"No photos were changed. You can scan the folder again at any time." = "No photos were changed. You can scan the folder again at any time."; +"No reclaimable items were found before the scan stopped." = "No reclaimable items were found before the scan stopped."; +"No reclaimable items were found in the areas checked." = "No reclaimable items were found in the areas checked."; +"No results yet" = "No results yet"; +"No scan run yet" = "No scan run yet"; +"No similar groups found" = "No similar groups found"; +"No updates are currently available for the cask apps Homebrew manages." = "No updates are currently available for the cask apps Homebrew manages."; +"Nothing selected" = "Nothing selected"; +"Nothing to clean" = "Nothing to clean"; +"Nothing was moved" = "Nothing was moved"; +"Off" = "Off"; +"Older than 30 days" = "Older than 30 days"; +"Older than 6 months" = "Older than 6 months"; +"Older than a year" = "Older than a year"; +"Oldest first" = "Oldest first"; +"On" = "On"; +"Open Activity Monitor" = "Open Activity Monitor"; +"Open App Store Updates" = "Open App Store Updates"; +"Open Folder" = "Open Folder"; +"Open a category to review individual items" = "Open a category to review individual items"; +"Open folder" = "Open folder"; +"Open the App Store updates page. Direct-download apps may provide their own updater." = "Open the App Store updates page. Direct-download apps may provide their own updater."; +"Opens a folder picker" = "Opens a folder picker"; +"Over 1 GB" = "Over 1 GB"; +"Over 10 GB" = "Over 10 GB"; +"Over 100 MB" = "Over 100 MB"; +"Package" = "Package"; +"Package contents" = "Package contents"; +"Package · %lld files" = "Package · %lld files"; +"Partial result" = "Partial result"; +"Partial results" = "Partial results"; +"Performance" = "Performance"; +"Permanently delete %@?" = "Permanently delete %@?"; +"Permanently remove %lld items" = "Permanently remove %lld items"; +"Personal data or an optional cleanup action. Left unselected by default." = "Personal data or an optional cleanup action. Left unselected by default."; +"Photos could not be compared" = "Photos could not be compared"; +"Pinned" = "Pinned"; +"Preparing scan" = "Preparing scan"; +"Preparing the next area…" = "Preparing the next area…"; +"Preparing visual comparison" = "Preparing visual comparison"; +"Program not declared in this plist" = "Program not declared in this plist"; +"Protected caches and app containers will be skipped." = "Protected caches and app containers will be skipped."; +"Protected copy" = "Protected copy"; +"Protected system locations and processes are restricted." = "Protected system locations and processes are restricted."; +"Protection" = "Protection"; +"PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review." = "PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review."; +"PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed." = "PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed."; +"PureMac compares local image thumbnails without changing your photos." = "PureMac compares local image thumbnails without changing your photos."; +"PureMac could not confirm the local XProtect installation." = "PureMac could not confirm the local XProtect installation."; +"PureMac could not read this setting." = "PureMac could not read this setting."; +"PureMac did not find removable items in the selected scan areas." = "PureMac did not find removable items in the selected scan areas."; +"PureMac measures allocated disk space without changing files." = "PureMac measures allocated disk space without changing files."; +"PureMac reads the selected folder and does not change anything during a scan." = "PureMac reads the selected folder and does not change anything during a scan."; +"PureMac will ask Homebrew for available versions when you start the check." = "PureMac will ask Homebrew for available versions when you start the check."; +"PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing." = "PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing."; +"PureMac.app" = "PureMac.app"; +"Ready for protected locations" = "Ready for protected locations"; +"Refresh disk information" = "Refresh disk information"; +"Refreshing package data and comparing installed versions." = "Refreshing package data and comparing installed versions."; +"Refused to delete %lld protected item(s) (home credential directory or similar)." = "Refused to delete %lld protected item(s) (home credential directory or similar)."; +"Remove %lld files" = "Remove %lld files"; +"Remove %lld items" = "Remove %lld items"; +"Remove apps and their related files" = "Remove apps and their related files"; +"Remove selected app files?" = "Remove selected app files?"; +"Remove selected files?" = "Remove selected files?"; +"Remove selected leftovers?" = "Remove selected leftovers?"; +"Removing the items you selected." = "Removing the items you selected."; +"Reveal %@ in Finder" = "Reveal %@ in Finder"; +"Reveal plist in Finder" = "Reveal plist in Finder"; +"Reveal skipped item in Finder" = "Reveal skipped item in Finder"; +"Review and update apps installed as Homebrew casks." = "Review and update apps installed as Homebrew casks."; +"Review built-in privacy and safety checks" = "Review built-in privacy and safety checks"; +"Review matching files side by side" = "Review matching files side by side"; +"Review only" = "Review only"; +"Review removal" = "Review removal"; +"Review the groups before acting" = "Review the groups before acting"; +"Review the macOS safeguards that protect apps, disks, network access, and system files." = "Review the macOS safeguards that protect apps, disks, network access, and system files."; +"Review the results and choose exactly what to remove." = "Review the results and choose exactly what to remove."; +"Review which apps can access private data and hardware." = "Review which apps can access private data and hardware."; +"Run audit" = "Run audit"; +"Run the scan again when you are ready to check every area." = "Run the scan again when you are ready to check every area."; +"Safari privacy guide" = "Safari privacy guide"; +"Safari: Settings > Privacy" = "Safari: Settings > Privacy"; +"Sample limit reached" = "Sample limit reached"; +"Scan Another Folder" = "Scan Another Folder"; +"Scan Folder" = "Scan Folder"; +"Scan Photos" = "Scan Photos"; +"Scan again" = "Scan again"; +"Scan complete" = "Scan complete"; +"Scan could not finish" = "Scan could not finish"; +"Scan first, then review the exact files before removing anything." = "Scan first, then review the exact files before removing anything."; +"Scan stopped" = "Scan stopped"; +"Scan this Mac" = "Scan this Mac"; +"Scan this category" = "Scan this category"; +"Scanning %@…" = "Scanning %@…"; +"Scheduled" = "Scheduled"; +"Security Settings" = "Security Settings"; +"See current resource use and review what starts in the background." = "See current resource use and review what starts in the background."; +"See what is taking up space" = "See what is taking up space"; +"Select %@" = "Select %@"; +"Select a tool from the sidebar." = "Select a tool from the sidebar."; +"Select any folder to see which files and subfolders occupy the most disk space." = "Select any folder to see which files and subfolders occupy the most disk space."; +"Select apps to update" = "Select apps to update"; +"Select at least one app to update." = "Select at least one app to update."; +"Select copies" = "Select copies"; +"Select the apps Homebrew should upgrade." = "Select the apps Homebrew should upgrade."; +"Select the extra copies you want to review" = "Select the extra copies you want to review"; +"Select visible" = "Select visible"; +"Selected" = "Selected"; +"Selected cleanup items are permanently removed." = "Selected cleanup items are permanently removed."; +"Share of scanned space" = "Share of scanned space"; +"Shares storage with %@" = "Shares storage with %@"; +"Show %@ in Finder" = "Show %@ in Finder"; +"Show in Finder" = "Show in Finder"; +"Shows a confirmation before moving the selected copies" = "Shows a confirmation before moving the selected copies"; +"Similar Photos" = "Similar Photos"; +"Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality." = "Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality."; +"Size unavailable" = "Size unavailable"; +"Skipped items" = "Skipped items"; +"Smallest first" = "Smallest first"; +"Snapshot could not be deleted" = "Snapshot could not be deleted"; +"Software Update" = "Software Update"; +"Some contents were skipped or inaccessible" = "Some contents were skipped or inaccessible"; +"Some files were not moved" = "Some files were not moved"; +"Some information could not be read (%lld)" = "Some information could not be read (%lld)"; +"Some items need attention" = "Some items need attention"; +"Some locations are unavailable" = "Some locations are unavailable"; +"Some protected locations are unavailable. Full Disk Access allows a more complete scan." = "Some protected locations are unavailable. Full Disk Access allows a more complete scan."; +"Some selected files" = "Some selected files"; +"Sort" = "Sort"; +"Space Explorer" = "Space Explorer"; +"Startup and background items" = "Startup and background items"; +"Stop" = "Stop"; +"Stop scan" = "Stop scan"; +"Stopped" = "Stopped"; +"Stopping keeps the results found so far." = "Stopping keeps the results found so far."; +"Stops scanning without changing any files" = "Stops scanning without changing any files"; +"Suggested groups" = "Suggested groups"; +"Symbolic link" = "Symbolic link"; +"Symbolic links and cloud-only items are excluded." = "Symbolic links and cloud-only items are excluded."; +"Symbolic links cannot be scanned: %@" = "Symbolic links cannot be scanned: %@"; +"Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted." = "Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted."; +"System Integrity Protection" = "System Integrity Protection"; +"System Integrity Protection is turned off." = "System Integrity Protection is turned off."; +"System daemon" = "System daemon"; +"System update" = "System update"; +"System-wide agent" = "System-wide agent"; +"The analyzed photos did not meet PureMac's visual similarity threshold." = "The analyzed photos did not meet PureMac's visual similarity threshold."; +"The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan." = "The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan."; +"The check timed out." = "The check timed out."; +"The copy marked Keep is missing or changed: %@" = "The copy marked Keep is missing or changed: %@"; +"The inspected user and third-party launch folders are empty." = "The inspected user and third-party launch folders are empty."; +"The launch item is not a property-list dictionary." = "The launch item is not a property-list dictionary."; +"The macOS application firewall is turned off." = "The macOS application firewall is turned off."; +"The protected copy cannot be moved to Trash: %@" = "The protected copy cannot be moved to Trash: %@"; +"The scan stopped. Available results are ready to review." = "The scan stopped. Available results are ready to review."; +"The selected folder cannot be scanned: %@" = "The selected folder cannot be scanned: %@"; +"The selected folder could not be read: %@" = "The selected folder could not be read: %@"; +"The selected folder is stored in the cloud and has not been downloaded: %@" = "The selected folder is stored in the cloud and has not been downloaded: %@"; +"The selected item is not a folder: %@" = "The selected item is not a folder: %@"; +"The startup disk is encrypted with FileVault." = "The startup disk is encrypted with FileVault."; +"The startup disk is not encrypted with FileVault." = "The startup disk is not encrypted with FileVault."; +"The system returned an unrecognized status." = "The system returned an unrecognized status."; +"There are no cleanup items in this category." = "There are no cleanup items in this category."; +"This folder is empty or its contents were excluded from the scan." = "This folder is empty or its contents were excluded from the scan."; +"This permanently removes %@. Its size is unknown, and the action cannot be undone." = "This permanently removes %@. Its size is unknown, and the action cannot be undone."; +"This permanently removes the selected Time Machine snapshot." = "This permanently removes the selected Time Machine snapshot."; +"This snapshot does not have a verified Time Machine timestamp." = "This snapshot does not have a verified Time Machine timestamp."; +"Time Machine" = "Time Machine"; +"Time Machine Settings" = "Time Machine Settings"; +"Time Machine did not report any snapshots for the startup disk." = "Time Machine did not report any snapshots for the startup disk."; +"Time Machine snapshots are unavailable" = "Time Machine snapshots are unavailable"; +"Time Machine snapshots can be reviewed and removed individually" = "Time Machine snapshots can be reviewed and removed individually"; +"Tools" = "Tools"; +"Try Again" = "Try Again"; +"Try another name, size, or date range." = "Try another name, size, or date range."; +"Uninstaller" = "Uninstaller"; +"Unknown" = "Unknown"; +"Unknown error" = "Unknown error"; +"Updates from Homebrew" = "Updates from Homebrew"; +"Updating…" = "Updating…"; +"Upgrade %lld Apps" = "Upgrade %lld Apps"; +"Upgrade 1 App" = "Upgrade 1 App"; +"Upgrade selected apps?" = "Upgrade selected apps?"; +"User agent" = "User agent"; +"Verifying possible matches" = "Verifying possible matches"; +"Watches folders" = "Watches folders"; +"Watches paths" = "Watches paths"; +"XProtect" = "XProtect"; +"allocated in this folder" = "allocated in this folder"; +"definitions %@" = "definitions %@"; +"engine %@" = "engine %@"; +"macOS does not report reliable per-snapshot sizes in this listing." = "macOS does not report reliable per-snapshot sizes in this listing."; +"reclaimed" = "reclaimed"; +"similar group" = "similar group"; +"similar groups" = "similar groups"; +"tmutil is not available on this Mac." = "tmutil is not available on this Mac."; diff --git a/PureMac/fr.lproj/Localizable.strings b/PureMac/fr.lproj/Localizable.strings index c1f1ad5..7a86ab2 100644 --- a/PureMac/fr.lproj/Localizable.strings +++ b/PureMac/fr.lproj/Localizable.strings @@ -456,3 +456,410 @@ /* Simulator runtimes */ "Simulator runtime" = "Runtime de simulateur"; + +/* Current dashboard, tools, and cleanup review — English fallback until translated */ +"\nAnd %lld more." = "\nAnd %lld more."; +"%@ %@ to %@" = "%@ %@ to %@"; +"%@ available" = "%@ available"; +"%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again." = "%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again."; +"%@ did not finish within the allowed time." = "%@ did not finish within the allowed time."; +"%@ exited with status %d%@" = "%@ exited with status %d%@"; +"%@ files inspected" = "%@ files inspected"; +"%@ found across %lld categories." = "%@ found across %lld categories."; +"%@ found before the scan stopped. Results may be incomplete." = "%@ found before the scan stopped. Results may be incomplete."; +"%@ of %@" = "%@ of %@"; +"%@ of %@ candidates · %@ verified" = "%@ of %@ candidates · %@ verified"; +"%@ reviewable" = "%@ reviewable"; +"%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone." = "%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone."; +"%@ will move to Trash" = "%@ will move to Trash"; +"%lld analyzed" = "%lld analyzed"; +"%lld apps selected" = "%lld apps selected"; +"%lld areas" = "%lld areas"; +"%lld compared" = "%lld compared"; +"%lld exact copies · %@ each" = "%lld exact copies · %@ each"; +"%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access." = "%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access."; +"%lld file(s) could not be removed. Check that the items still exist and are not in use." = "%lld file(s) could not be removed. Check that the items still exist and are not in use."; +"%lld files totaling %@ were moved. Every protected copy remains in place." = "%lld files totaling %@ were moved. Every protected copy remains in place."; +"%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place." = "%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place."; +"%lld files · %lld folders" = "%lld files · %lld folders"; +"%lld folders" = "%lld folders"; +"%lld found" = "%lld found"; +"%lld inaccessible" = "%lld inaccessible"; +"%lld items · %@ found" = "%lld items · %@ found"; +"%lld matched" = "%lld matched"; +"%lld of %lld items shown" = "%lld of %lld items shown"; +"%lld percent" = "%lld percent"; +"%lld photos" = "%lld photos"; +"%lld photos · %@" = "%lld photos · %@"; +"%lld selected items will be permanently deleted. Review the list before continuing." = "%lld selected items will be permanently deleted. Review the list before continuing."; +"%lld selected · %@" = "%lld selected · %@"; +"%lld skipped" = "%lld skipped"; +"%lld unsafe or unavailable items were not scanned" = "%lld unsafe or unavailable items were not scanned"; +"%lld unsafe or unavailable items were skipped." = "%lld unsafe or unavailable items were skipped."; +"%lld updates available" = "%lld updates available"; +"%lld%% visual score" = "%lld%% visual score"; +", and %lld more" = ", and %lld more"; +"1 app selected" = "1 app selected"; +"1 update available" = "1 update available"; +"500 photo limit" = "500 photo limit"; +"A clear view of reclaimable storage and the tools that manage it." = "A clear view of reclaimable storage and the tools that manage it."; +"A selected file is missing or changed: %@" = "A selected file is missing or changed: %@"; +"A selected file no longer matches its kept copy: %@" = "A selected file no longer matches its kept copy: %@"; +"Access denied" = "Access denied"; +"Administrator removal failed: %@" = "Administrator removal failed: %@"; +"Always exclude from cleanup" = "Always exclude from cleanup"; +"Any age" = "Any age"; +"Any size" = "Any size"; +"App Updates" = "App Updates"; +"App and document packages are excluded: %@" = "App and document packages are excluded: %@"; +"App bundle missing" = "App bundle missing"; +"App downloads are checked before opening." = "App downloads are checked before opening."; +"App permissions" = "App permissions"; +"Apple Guide" = "Apple Guide"; +"Apple's built-in malware protection is installed. Update recency is managed by macOS." = "Apple's built-in malware protection is installed. Update recency is managed by macOS."; +"Application Firewall" = "Application Firewall"; +"Apps outside Homebrew" = "Apps outside Homebrew"; +"At login" = "At login"; +"Available" = "Available"; +"Available to review" = "Available to review"; +"Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions." = "Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions."; +"Browser privacy" = "Browser privacy"; +"Building visual signatures" = "Building visual signatures"; +"Camera" = "Camera"; +"Care" = "Care"; +"Changed during scan" = "Changed during scan"; +"Check Again" = "Check Again"; +"Check again" = "Check again"; +"Check built-in safeguards" = "Check built-in safeguards"; +"Check installed apps for new versions" = "Check installed apps for new versions"; +"Check installed cask apps" = "Check installed cask apps"; +"Checked %@. Unknown means the setting could not be confirmed." = "Checked %@. Unknown means the setting could not be confirmed."; +"Checking" = "Checking"; +"Checking Homebrew casks" = "Checking Homebrew casks"; +"Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation." = "Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation."; +"Checking your Mac. Nothing is removed during a scan." = "Checking your Mac. Nothing is removed during a scan."; +"Choose Another Folder" = "Choose Another Folder"; +"Choose Folder" = "Choose Folder"; +"Choose a Folder" = "Choose a Folder"; +"Choose a folder of photos" = "Choose a folder of photos"; +"Choose a folder to check for duplicate files" = "Choose a folder to check for duplicate files"; +"Choose a folder to inspect" = "Choose a folder to inspect"; +"Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically." = "Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically."; +"Choose a photo folder" = "Choose a photo folder"; +"Choose where to look" = "Choose where to look"; +"Chrome privacy guide" = "Chrome privacy guide"; +"Clean selected items" = "Clean selected items"; +"Cleaning selected items" = "Cleaning selected items"; +"Cleanup Exclusions" = "Cleanup Exclusions"; +"Cleanup finished and disk information is refreshing." = "Cleanup finished and disk information is refreshing."; +"Cleanup plan" = "Cleanup plan"; +"Clear Selection" = "Clear Selection"; +"Clear filters" = "Clear filters"; +"Clear search" = "Clear search"; +"Clear selection" = "Clear selection"; +"Cloud-only file" = "Cloud-only file"; +"Collapse duplicate group" = "Collapse duplicate group"; +"Compare visually similar photos" = "Compare visually similar photos"; +"Conditional keep alive" = "Conditional keep alive"; +"Copy path" = "Copy path"; +"Could not inspect %@" = "Could not inspect %@"; +"Could not list Time Machine snapshots" = "Could not list Time Machine snapshots"; +"Could not read" = "Could not read"; +"Could not read %@" = "Could not read %@"; +"Couldn't check for updates" = "Couldn't check for updates"; +"Current scan path" = "Current scan path"; +"Delete" = "Delete"; +"Delete Snapshot" = "Delete Snapshot"; +"Delete local snapshot?" = "Delete local snapshot?"; +"Deselect visible" = "Deselect visible"; +"Developer Cleanup" = "Developer Cleanup"; +"Disabled" = "Disabled"; +"Downloaded apps are not being assessed by Gatekeeper." = "Downloaded apps are not being assessed by Gatekeeper."; +"Drag to tilt" = "Drag to tilt"; +"Duplicate Finder" = "Duplicate Finder"; +"Duplicate groups" = "Duplicate groups"; +"Every %lld seconds" = "Every %lld seconds"; +"Every eligible file was checked." = "Every eligible file was checked."; +"Exact-match cleanup with a protected copy in every group" = "Exact-match cleanup with a protected copy in every group"; +"Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it." = "Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it."; +"Expand duplicate group" = "Expand duplicate group"; +"File" = "File"; +"FileVault" = "FileVault"; +"FileVault Settings" = "FileVault Settings"; +"Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them." = "Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them."; +"Filter cleanup files" = "Filter cleanup files"; +"Find a file or path" = "Find a file or path"; +"Find copies that are exactly the same" = "Find copies that are exactly the same"; +"Find space to reclaim." = "Find space to reclaim."; +"Find visually related shots in a folder and review them side by side." = "Find visually related shots in a folder and review them side by side."; +"Find what uses the most disk space" = "Find what uses the most disk space"; +"Finding local photos" = "Finding local photos"; +"Firewall Settings" = "Firewall Settings"; +"Focused utilities for storage, apps, and system maintenance" = "Focused utilities for storage, apps, and system maintenance"; +"Folder could not be inspected" = "Folder could not be inspected"; +"Full Disk Access is off" = "Full Disk Access is off"; +"Full access" = "Full access"; +"Gatekeeper" = "Gatekeeper"; +"Group %lld" = "Group %lld"; +"Grouping similar shots" = "Grouping similar shots"; +"Hard-linked copy" = "Hard-linked copy"; +"Homebrew apps are up to date" = "Homebrew apps are up to date"; +"Homebrew did not finish before the operation timed out." = "Homebrew did not finish before the operation timed out."; +"Homebrew finished, but %lld selected apps still report updates." = "Homebrew finished, but %lld selected apps still report updates."; +"Homebrew finished, but 1 selected app still reports an update." = "Homebrew finished, but 1 selected app still reports an update."; +"Homebrew finished. Check again to verify installed versions." = "Homebrew finished. Check again to verify installed versions."; +"Homebrew not found" = "Homebrew not found"; +"Homebrew produced more output than PureMac could safely retain." = "Homebrew produced more output than PureMac could safely retain."; +"Homebrew returned an invalid cask identifier: %@" = "Homebrew returned an invalid cask identifier: %@"; +"Homebrew returned update information PureMac could not read." = "Homebrew returned update information PureMac could not read."; +"Homebrew updated the %lld selected apps." = "Homebrew updated the %lld selected apps."; +"Homebrew updated the selected app." = "Homebrew updated the selected app."; +"Homebrew was not found in a standard installation location." = "Homebrew was not found in a standard installation location."; +"Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process." = "Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process."; +"Includes %lld selected items hidden by filters." = "Includes %lld selected items hidden by filters."; +"Incoming network connections are filtered." = "Incoming network connections are filtered."; +"Inspect" = "Inspect"; +"Inspect a folder by allocated disk space. Your files are never changed." = "Inspect a folder by allocated disk space. Your files are never changed."; +"Inspect memory and background activity" = "Inspect memory and background activity"; +"Inspect startup items and local snapshots again" = "Inspect startup items and local snapshots again"; +"Inspected %@ files in %@. %@" = "Inspected %@ files in %@. %@"; +"Inspecting startup items and local snapshots…" = "Inspecting startup items and local snapshots…"; +"Inspection stopped" = "Inspection stopped"; +"Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels." = "Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels."; +"Installed" = "Installed"; +"Installed %@" = "Installed %@"; +"Keep" = "Keep"; +"Keep PureMac open until this pass finishes." = "Keep PureMac open until this pass finishes."; +"Keep alive" = "Keep alive"; +"Largest first" = "Largest first"; +"Largest items" = "Largest items"; +"Last activity: %@" = "Last activity: %@"; +"Last checked" = "Last checked"; +"Launch agents and daemons installed outside macOS system folders" = "Launch agents and daemons installed outside macOS system folders"; +"Leftovers" = "Leftovers"; +"Live" = "Live"; +"Live resources" = "Live resources"; +"Local and private" = "Local and private"; +"Local files" = "Local files"; +"Local snapshot" = "Local snapshot"; +"Local snapshots" = "Local snapshots"; +"Location" = "Location"; +"Login Items Settings" = "Login Items Settings"; +"Looking through files" = "Looking through files"; +"Mac storage" = "Mac storage"; +"Managed cleanup action" = "Managed cleanup action"; +"Matching files" = "Matching files"; +"Measuring allocated space" = "Measuring allocated space"; +"Memory pressure use" = "Memory pressure use"; +"Microphone" = "Microphone"; +"Modified" = "Modified"; +"Move selected duplicates to Trash?" = "Move selected duplicates to Trash?"; +"Moved to Trash" = "Moved to Trash"; +"Name" = "Name"; +"Needs attention" = "Needs attention"; +"Network state" = "Network state"; +"No exact duplicates found" = "No exact duplicates found"; +"No excluded paths" = "No excluded paths"; +"No files found" = "No files found"; +"No files were changed. Rescan this folder when you are ready." = "No files were changed. Rescan this folder when you are ready."; +"No launchd items found" = "No launchd items found"; +"No local snapshots reported" = "No local snapshots reported"; +"No matching files" = "No matching files"; +"No measurable items" = "No measurable items"; +"No photos were changed. You can scan the folder again at any time." = "No photos were changed. You can scan the folder again at any time."; +"No reclaimable items were found before the scan stopped." = "No reclaimable items were found before the scan stopped."; +"No reclaimable items were found in the areas checked." = "No reclaimable items were found in the areas checked."; +"No results yet" = "No results yet"; +"No scan run yet" = "No scan run yet"; +"No similar groups found" = "No similar groups found"; +"No updates are currently available for the cask apps Homebrew manages." = "No updates are currently available for the cask apps Homebrew manages."; +"Nothing selected" = "Nothing selected"; +"Nothing to clean" = "Nothing to clean"; +"Nothing was moved" = "Nothing was moved"; +"Off" = "Off"; +"Older than 30 days" = "Older than 30 days"; +"Older than 6 months" = "Older than 6 months"; +"Older than a year" = "Older than a year"; +"Oldest first" = "Oldest first"; +"On" = "On"; +"Open Activity Monitor" = "Open Activity Monitor"; +"Open App Store Updates" = "Open App Store Updates"; +"Open Folder" = "Open Folder"; +"Open a category to review individual items" = "Open a category to review individual items"; +"Open folder" = "Open folder"; +"Open the App Store updates page. Direct-download apps may provide their own updater." = "Open the App Store updates page. Direct-download apps may provide their own updater."; +"Opens a folder picker" = "Opens a folder picker"; +"Over 1 GB" = "Over 1 GB"; +"Over 10 GB" = "Over 10 GB"; +"Over 100 MB" = "Over 100 MB"; +"Package" = "Package"; +"Package contents" = "Package contents"; +"Package · %lld files" = "Package · %lld files"; +"Partial result" = "Partial result"; +"Partial results" = "Partial results"; +"Performance" = "Performance"; +"Permanently delete %@?" = "Permanently delete %@?"; +"Permanently remove %lld items" = "Permanently remove %lld items"; +"Personal data or an optional cleanup action. Left unselected by default." = "Personal data or an optional cleanup action. Left unselected by default."; +"Photos could not be compared" = "Photos could not be compared"; +"Pinned" = "Pinned"; +"Preparing scan" = "Preparing scan"; +"Preparing the next area…" = "Preparing the next area…"; +"Preparing visual comparison" = "Preparing visual comparison"; +"Program not declared in this plist" = "Program not declared in this plist"; +"Protected caches and app containers will be skipped." = "Protected caches and app containers will be skipped."; +"Protected copy" = "Protected copy"; +"Protected system locations and processes are restricted." = "Protected system locations and processes are restricted."; +"Protection" = "Protection"; +"PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review." = "PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review."; +"PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed." = "PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed."; +"PureMac compares local image thumbnails without changing your photos." = "PureMac compares local image thumbnails without changing your photos."; +"PureMac could not confirm the local XProtect installation." = "PureMac could not confirm the local XProtect installation."; +"PureMac could not read this setting." = "PureMac could not read this setting."; +"PureMac did not find removable items in the selected scan areas." = "PureMac did not find removable items in the selected scan areas."; +"PureMac measures allocated disk space without changing files." = "PureMac measures allocated disk space without changing files."; +"PureMac reads the selected folder and does not change anything during a scan." = "PureMac reads the selected folder and does not change anything during a scan."; +"PureMac will ask Homebrew for available versions when you start the check." = "PureMac will ask Homebrew for available versions when you start the check."; +"PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing." = "PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing."; +"PureMac.app" = "PureMac.app"; +"Ready for protected locations" = "Ready for protected locations"; +"Refresh disk information" = "Refresh disk information"; +"Refreshing package data and comparing installed versions." = "Refreshing package data and comparing installed versions."; +"Refused to delete %lld protected item(s) (home credential directory or similar)." = "Refused to delete %lld protected item(s) (home credential directory or similar)."; +"Remove %lld files" = "Remove %lld files"; +"Remove %lld items" = "Remove %lld items"; +"Remove apps and their related files" = "Remove apps and their related files"; +"Remove selected app files?" = "Remove selected app files?"; +"Remove selected files?" = "Remove selected files?"; +"Remove selected leftovers?" = "Remove selected leftovers?"; +"Removing the items you selected." = "Removing the items you selected."; +"Reveal %@ in Finder" = "Reveal %@ in Finder"; +"Reveal plist in Finder" = "Reveal plist in Finder"; +"Reveal skipped item in Finder" = "Reveal skipped item in Finder"; +"Review and update apps installed as Homebrew casks." = "Review and update apps installed as Homebrew casks."; +"Review built-in privacy and safety checks" = "Review built-in privacy and safety checks"; +"Review matching files side by side" = "Review matching files side by side"; +"Review only" = "Review only"; +"Review removal" = "Review removal"; +"Review the groups before acting" = "Review the groups before acting"; +"Review the macOS safeguards that protect apps, disks, network access, and system files." = "Review the macOS safeguards that protect apps, disks, network access, and system files."; +"Review the results and choose exactly what to remove." = "Review the results and choose exactly what to remove."; +"Review which apps can access private data and hardware." = "Review which apps can access private data and hardware."; +"Run audit" = "Run audit"; +"Run the scan again when you are ready to check every area." = "Run the scan again when you are ready to check every area."; +"Safari privacy guide" = "Safari privacy guide"; +"Safari: Settings > Privacy" = "Safari: Settings > Privacy"; +"Sample limit reached" = "Sample limit reached"; +"Scan Another Folder" = "Scan Another Folder"; +"Scan Folder" = "Scan Folder"; +"Scan Photos" = "Scan Photos"; +"Scan again" = "Scan again"; +"Scan complete" = "Scan complete"; +"Scan could not finish" = "Scan could not finish"; +"Scan first, then review the exact files before removing anything." = "Scan first, then review the exact files before removing anything."; +"Scan stopped" = "Scan stopped"; +"Scan this Mac" = "Scan this Mac"; +"Scan this category" = "Scan this category"; +"Scanning %@…" = "Scanning %@…"; +"Scheduled" = "Scheduled"; +"Security Settings" = "Security Settings"; +"See current resource use and review what starts in the background." = "See current resource use and review what starts in the background."; +"See what is taking up space" = "See what is taking up space"; +"Select %@" = "Select %@"; +"Select a tool from the sidebar." = "Select a tool from the sidebar."; +"Select any folder to see which files and subfolders occupy the most disk space." = "Select any folder to see which files and subfolders occupy the most disk space."; +"Select apps to update" = "Select apps to update"; +"Select at least one app to update." = "Select at least one app to update."; +"Select copies" = "Select copies"; +"Select the apps Homebrew should upgrade." = "Select the apps Homebrew should upgrade."; +"Select the extra copies you want to review" = "Select the extra copies you want to review"; +"Select visible" = "Select visible"; +"Selected" = "Selected"; +"Selected cleanup items are permanently removed." = "Selected cleanup items are permanently removed."; +"Share of scanned space" = "Share of scanned space"; +"Shares storage with %@" = "Shares storage with %@"; +"Show %@ in Finder" = "Show %@ in Finder"; +"Show in Finder" = "Show in Finder"; +"Shows a confirmation before moving the selected copies" = "Shows a confirmation before moving the selected copies"; +"Similar Photos" = "Similar Photos"; +"Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality." = "Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality."; +"Size unavailable" = "Size unavailable"; +"Skipped items" = "Skipped items"; +"Smallest first" = "Smallest first"; +"Snapshot could not be deleted" = "Snapshot could not be deleted"; +"Software Update" = "Software Update"; +"Some contents were skipped or inaccessible" = "Some contents were skipped or inaccessible"; +"Some files were not moved" = "Some files were not moved"; +"Some information could not be read (%lld)" = "Some information could not be read (%lld)"; +"Some items need attention" = "Some items need attention"; +"Some locations are unavailable" = "Some locations are unavailable"; +"Some protected locations are unavailable. Full Disk Access allows a more complete scan." = "Some protected locations are unavailable. Full Disk Access allows a more complete scan."; +"Some selected files" = "Some selected files"; +"Sort" = "Sort"; +"Space Explorer" = "Space Explorer"; +"Startup and background items" = "Startup and background items"; +"Stop" = "Stop"; +"Stop scan" = "Stop scan"; +"Stopped" = "Stopped"; +"Stopping keeps the results found so far." = "Stopping keeps the results found so far."; +"Stops scanning without changing any files" = "Stops scanning without changing any files"; +"Suggested groups" = "Suggested groups"; +"Symbolic link" = "Symbolic link"; +"Symbolic links and cloud-only items are excluded." = "Symbolic links and cloud-only items are excluded."; +"Symbolic links cannot be scanned: %@" = "Symbolic links cannot be scanned: %@"; +"Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted." = "Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted."; +"System Integrity Protection" = "System Integrity Protection"; +"System Integrity Protection is turned off." = "System Integrity Protection is turned off."; +"System daemon" = "System daemon"; +"System update" = "System update"; +"System-wide agent" = "System-wide agent"; +"The analyzed photos did not meet PureMac's visual similarity threshold." = "The analyzed photos did not meet PureMac's visual similarity threshold."; +"The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan." = "The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan."; +"The check timed out." = "The check timed out."; +"The copy marked Keep is missing or changed: %@" = "The copy marked Keep is missing or changed: %@"; +"The inspected user and third-party launch folders are empty." = "The inspected user and third-party launch folders are empty."; +"The launch item is not a property-list dictionary." = "The launch item is not a property-list dictionary."; +"The macOS application firewall is turned off." = "The macOS application firewall is turned off."; +"The protected copy cannot be moved to Trash: %@" = "The protected copy cannot be moved to Trash: %@"; +"The scan stopped. Available results are ready to review." = "The scan stopped. Available results are ready to review."; +"The selected folder cannot be scanned: %@" = "The selected folder cannot be scanned: %@"; +"The selected folder could not be read: %@" = "The selected folder could not be read: %@"; +"The selected folder is stored in the cloud and has not been downloaded: %@" = "The selected folder is stored in the cloud and has not been downloaded: %@"; +"The selected item is not a folder: %@" = "The selected item is not a folder: %@"; +"The startup disk is encrypted with FileVault." = "The startup disk is encrypted with FileVault."; +"The startup disk is not encrypted with FileVault." = "The startup disk is not encrypted with FileVault."; +"The system returned an unrecognized status." = "The system returned an unrecognized status."; +"There are no cleanup items in this category." = "There are no cleanup items in this category."; +"This folder is empty or its contents were excluded from the scan." = "This folder is empty or its contents were excluded from the scan."; +"This permanently removes %@. Its size is unknown, and the action cannot be undone." = "This permanently removes %@. Its size is unknown, and the action cannot be undone."; +"This permanently removes the selected Time Machine snapshot." = "This permanently removes the selected Time Machine snapshot."; +"This snapshot does not have a verified Time Machine timestamp." = "This snapshot does not have a verified Time Machine timestamp."; +"Time Machine" = "Time Machine"; +"Time Machine Settings" = "Time Machine Settings"; +"Time Machine did not report any snapshots for the startup disk." = "Time Machine did not report any snapshots for the startup disk."; +"Time Machine snapshots are unavailable" = "Time Machine snapshots are unavailable"; +"Time Machine snapshots can be reviewed and removed individually" = "Time Machine snapshots can be reviewed and removed individually"; +"Tools" = "Tools"; +"Try Again" = "Try Again"; +"Try another name, size, or date range." = "Try another name, size, or date range."; +"Uninstaller" = "Uninstaller"; +"Unknown" = "Unknown"; +"Unknown error" = "Unknown error"; +"Updates from Homebrew" = "Updates from Homebrew"; +"Updating…" = "Updating…"; +"Upgrade %lld Apps" = "Upgrade %lld Apps"; +"Upgrade 1 App" = "Upgrade 1 App"; +"Upgrade selected apps?" = "Upgrade selected apps?"; +"User agent" = "User agent"; +"Verifying possible matches" = "Verifying possible matches"; +"Watches folders" = "Watches folders"; +"Watches paths" = "Watches paths"; +"XProtect" = "XProtect"; +"allocated in this folder" = "allocated in this folder"; +"definitions %@" = "definitions %@"; +"engine %@" = "engine %@"; +"macOS does not report reliable per-snapshot sizes in this listing." = "macOS does not report reliable per-snapshot sizes in this listing."; +"reclaimed" = "reclaimed"; +"similar group" = "similar group"; +"similar groups" = "similar groups"; +"tmutil is not available on this Mac." = "tmutil is not available on this Mac."; diff --git a/PureMac/ja.lproj/Localizable.strings b/PureMac/ja.lproj/Localizable.strings index 1cf5a3f..8f69462 100644 --- a/PureMac/ja.lproj/Localizable.strings +++ b/PureMac/ja.lproj/Localizable.strings @@ -460,3 +460,410 @@ /* Simulator runtimes */ "Simulator runtime" = "シミュレータランタイム"; + +/* Current dashboard, tools, and cleanup review — English fallback until translated */ +"\nAnd %lld more." = "\nAnd %lld more."; +"%@ %@ to %@" = "%@ %@ to %@"; +"%@ available" = "%@ available"; +"%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again." = "%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again."; +"%@ did not finish within the allowed time." = "%@ did not finish within the allowed time."; +"%@ exited with status %d%@" = "%@ exited with status %d%@"; +"%@ files inspected" = "%@ files inspected"; +"%@ found across %lld categories." = "%@ found across %lld categories."; +"%@ found before the scan stopped. Results may be incomplete." = "%@ found before the scan stopped. Results may be incomplete."; +"%@ of %@" = "%@ of %@"; +"%@ of %@ candidates · %@ verified" = "%@ of %@ candidates · %@ verified"; +"%@ reviewable" = "%@ reviewable"; +"%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone." = "%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone."; +"%@ will move to Trash" = "%@ will move to Trash"; +"%lld analyzed" = "%lld analyzed"; +"%lld apps selected" = "%lld apps selected"; +"%lld areas" = "%lld areas"; +"%lld compared" = "%lld compared"; +"%lld exact copies · %@ each" = "%lld exact copies · %@ each"; +"%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access." = "%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access."; +"%lld file(s) could not be removed. Check that the items still exist and are not in use." = "%lld file(s) could not be removed. Check that the items still exist and are not in use."; +"%lld files totaling %@ were moved. Every protected copy remains in place." = "%lld files totaling %@ were moved. Every protected copy remains in place."; +"%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place." = "%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place."; +"%lld files · %lld folders" = "%lld files · %lld folders"; +"%lld folders" = "%lld folders"; +"%lld found" = "%lld found"; +"%lld inaccessible" = "%lld inaccessible"; +"%lld items · %@ found" = "%lld items · %@ found"; +"%lld matched" = "%lld matched"; +"%lld of %lld items shown" = "%lld of %lld items shown"; +"%lld percent" = "%lld percent"; +"%lld photos" = "%lld photos"; +"%lld photos · %@" = "%lld photos · %@"; +"%lld selected items will be permanently deleted. Review the list before continuing." = "%lld selected items will be permanently deleted. Review the list before continuing."; +"%lld selected · %@" = "%lld selected · %@"; +"%lld skipped" = "%lld skipped"; +"%lld unsafe or unavailable items were not scanned" = "%lld unsafe or unavailable items were not scanned"; +"%lld unsafe or unavailable items were skipped." = "%lld unsafe or unavailable items were skipped."; +"%lld updates available" = "%lld updates available"; +"%lld%% visual score" = "%lld%% visual score"; +", and %lld more" = ", and %lld more"; +"1 app selected" = "1 app selected"; +"1 update available" = "1 update available"; +"500 photo limit" = "500 photo limit"; +"A clear view of reclaimable storage and the tools that manage it." = "A clear view of reclaimable storage and the tools that manage it."; +"A selected file is missing or changed: %@" = "A selected file is missing or changed: %@"; +"A selected file no longer matches its kept copy: %@" = "A selected file no longer matches its kept copy: %@"; +"Access denied" = "Access denied"; +"Administrator removal failed: %@" = "Administrator removal failed: %@"; +"Always exclude from cleanup" = "Always exclude from cleanup"; +"Any age" = "Any age"; +"Any size" = "Any size"; +"App Updates" = "App Updates"; +"App and document packages are excluded: %@" = "App and document packages are excluded: %@"; +"App bundle missing" = "App bundle missing"; +"App downloads are checked before opening." = "App downloads are checked before opening."; +"App permissions" = "App permissions"; +"Apple Guide" = "Apple Guide"; +"Apple's built-in malware protection is installed. Update recency is managed by macOS." = "Apple's built-in malware protection is installed. Update recency is managed by macOS."; +"Application Firewall" = "Application Firewall"; +"Apps outside Homebrew" = "Apps outside Homebrew"; +"At login" = "At login"; +"Available" = "Available"; +"Available to review" = "Available to review"; +"Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions." = "Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions."; +"Browser privacy" = "Browser privacy"; +"Building visual signatures" = "Building visual signatures"; +"Camera" = "Camera"; +"Care" = "Care"; +"Changed during scan" = "Changed during scan"; +"Check Again" = "Check Again"; +"Check again" = "Check again"; +"Check built-in safeguards" = "Check built-in safeguards"; +"Check installed apps for new versions" = "Check installed apps for new versions"; +"Check installed cask apps" = "Check installed cask apps"; +"Checked %@. Unknown means the setting could not be confirmed." = "Checked %@. Unknown means the setting could not be confirmed."; +"Checking" = "Checking"; +"Checking Homebrew casks" = "Checking Homebrew casks"; +"Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation." = "Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation."; +"Checking your Mac. Nothing is removed during a scan." = "Checking your Mac. Nothing is removed during a scan."; +"Choose Another Folder" = "Choose Another Folder"; +"Choose Folder" = "Choose Folder"; +"Choose a Folder" = "Choose a Folder"; +"Choose a folder of photos" = "Choose a folder of photos"; +"Choose a folder to check for duplicate files" = "Choose a folder to check for duplicate files"; +"Choose a folder to inspect" = "Choose a folder to inspect"; +"Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically." = "Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically."; +"Choose a photo folder" = "Choose a photo folder"; +"Choose where to look" = "Choose where to look"; +"Chrome privacy guide" = "Chrome privacy guide"; +"Clean selected items" = "Clean selected items"; +"Cleaning selected items" = "Cleaning selected items"; +"Cleanup Exclusions" = "Cleanup Exclusions"; +"Cleanup finished and disk information is refreshing." = "Cleanup finished and disk information is refreshing."; +"Cleanup plan" = "Cleanup plan"; +"Clear Selection" = "Clear Selection"; +"Clear filters" = "Clear filters"; +"Clear search" = "Clear search"; +"Clear selection" = "Clear selection"; +"Cloud-only file" = "Cloud-only file"; +"Collapse duplicate group" = "Collapse duplicate group"; +"Compare visually similar photos" = "Compare visually similar photos"; +"Conditional keep alive" = "Conditional keep alive"; +"Copy path" = "Copy path"; +"Could not inspect %@" = "Could not inspect %@"; +"Could not list Time Machine snapshots" = "Could not list Time Machine snapshots"; +"Could not read" = "Could not read"; +"Could not read %@" = "Could not read %@"; +"Couldn't check for updates" = "Couldn't check for updates"; +"Current scan path" = "Current scan path"; +"Delete" = "Delete"; +"Delete Snapshot" = "Delete Snapshot"; +"Delete local snapshot?" = "Delete local snapshot?"; +"Deselect visible" = "Deselect visible"; +"Developer Cleanup" = "Developer Cleanup"; +"Disabled" = "Disabled"; +"Downloaded apps are not being assessed by Gatekeeper." = "Downloaded apps are not being assessed by Gatekeeper."; +"Drag to tilt" = "Drag to tilt"; +"Duplicate Finder" = "Duplicate Finder"; +"Duplicate groups" = "Duplicate groups"; +"Every %lld seconds" = "Every %lld seconds"; +"Every eligible file was checked." = "Every eligible file was checked."; +"Exact-match cleanup with a protected copy in every group" = "Exact-match cleanup with a protected copy in every group"; +"Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it." = "Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it."; +"Expand duplicate group" = "Expand duplicate group"; +"File" = "File"; +"FileVault" = "FileVault"; +"FileVault Settings" = "FileVault Settings"; +"Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them." = "Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them."; +"Filter cleanup files" = "Filter cleanup files"; +"Find a file or path" = "Find a file or path"; +"Find copies that are exactly the same" = "Find copies that are exactly the same"; +"Find space to reclaim." = "Find space to reclaim."; +"Find visually related shots in a folder and review them side by side." = "Find visually related shots in a folder and review them side by side."; +"Find what uses the most disk space" = "Find what uses the most disk space"; +"Finding local photos" = "Finding local photos"; +"Firewall Settings" = "Firewall Settings"; +"Focused utilities for storage, apps, and system maintenance" = "Focused utilities for storage, apps, and system maintenance"; +"Folder could not be inspected" = "Folder could not be inspected"; +"Full Disk Access is off" = "Full Disk Access is off"; +"Full access" = "Full access"; +"Gatekeeper" = "Gatekeeper"; +"Group %lld" = "Group %lld"; +"Grouping similar shots" = "Grouping similar shots"; +"Hard-linked copy" = "Hard-linked copy"; +"Homebrew apps are up to date" = "Homebrew apps are up to date"; +"Homebrew did not finish before the operation timed out." = "Homebrew did not finish before the operation timed out."; +"Homebrew finished, but %lld selected apps still report updates." = "Homebrew finished, but %lld selected apps still report updates."; +"Homebrew finished, but 1 selected app still reports an update." = "Homebrew finished, but 1 selected app still reports an update."; +"Homebrew finished. Check again to verify installed versions." = "Homebrew finished. Check again to verify installed versions."; +"Homebrew not found" = "Homebrew not found"; +"Homebrew produced more output than PureMac could safely retain." = "Homebrew produced more output than PureMac could safely retain."; +"Homebrew returned an invalid cask identifier: %@" = "Homebrew returned an invalid cask identifier: %@"; +"Homebrew returned update information PureMac could not read." = "Homebrew returned update information PureMac could not read."; +"Homebrew updated the %lld selected apps." = "Homebrew updated the %lld selected apps."; +"Homebrew updated the selected app." = "Homebrew updated the selected app."; +"Homebrew was not found in a standard installation location." = "Homebrew was not found in a standard installation location."; +"Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process." = "Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process."; +"Includes %lld selected items hidden by filters." = "Includes %lld selected items hidden by filters."; +"Incoming network connections are filtered." = "Incoming network connections are filtered."; +"Inspect" = "Inspect"; +"Inspect a folder by allocated disk space. Your files are never changed." = "Inspect a folder by allocated disk space. Your files are never changed."; +"Inspect memory and background activity" = "Inspect memory and background activity"; +"Inspect startup items and local snapshots again" = "Inspect startup items and local snapshots again"; +"Inspected %@ files in %@. %@" = "Inspected %@ files in %@. %@"; +"Inspecting startup items and local snapshots…" = "Inspecting startup items and local snapshots…"; +"Inspection stopped" = "Inspection stopped"; +"Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels." = "Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels."; +"Installed" = "Installed"; +"Installed %@" = "Installed %@"; +"Keep" = "Keep"; +"Keep PureMac open until this pass finishes." = "Keep PureMac open until this pass finishes."; +"Keep alive" = "Keep alive"; +"Largest first" = "Largest first"; +"Largest items" = "Largest items"; +"Last activity: %@" = "Last activity: %@"; +"Last checked" = "Last checked"; +"Launch agents and daemons installed outside macOS system folders" = "Launch agents and daemons installed outside macOS system folders"; +"Leftovers" = "Leftovers"; +"Live" = "Live"; +"Live resources" = "Live resources"; +"Local and private" = "Local and private"; +"Local files" = "Local files"; +"Local snapshot" = "Local snapshot"; +"Local snapshots" = "Local snapshots"; +"Location" = "Location"; +"Login Items Settings" = "Login Items Settings"; +"Looking through files" = "Looking through files"; +"Mac storage" = "Mac storage"; +"Managed cleanup action" = "Managed cleanup action"; +"Matching files" = "Matching files"; +"Measuring allocated space" = "Measuring allocated space"; +"Memory pressure use" = "Memory pressure use"; +"Microphone" = "Microphone"; +"Modified" = "Modified"; +"Move selected duplicates to Trash?" = "Move selected duplicates to Trash?"; +"Moved to Trash" = "Moved to Trash"; +"Name" = "Name"; +"Needs attention" = "Needs attention"; +"Network state" = "Network state"; +"No exact duplicates found" = "No exact duplicates found"; +"No excluded paths" = "No excluded paths"; +"No files found" = "No files found"; +"No files were changed. Rescan this folder when you are ready." = "No files were changed. Rescan this folder when you are ready."; +"No launchd items found" = "No launchd items found"; +"No local snapshots reported" = "No local snapshots reported"; +"No matching files" = "No matching files"; +"No measurable items" = "No measurable items"; +"No photos were changed. You can scan the folder again at any time." = "No photos were changed. You can scan the folder again at any time."; +"No reclaimable items were found before the scan stopped." = "No reclaimable items were found before the scan stopped."; +"No reclaimable items were found in the areas checked." = "No reclaimable items were found in the areas checked."; +"No results yet" = "No results yet"; +"No scan run yet" = "No scan run yet"; +"No similar groups found" = "No similar groups found"; +"No updates are currently available for the cask apps Homebrew manages." = "No updates are currently available for the cask apps Homebrew manages."; +"Nothing selected" = "Nothing selected"; +"Nothing to clean" = "Nothing to clean"; +"Nothing was moved" = "Nothing was moved"; +"Off" = "Off"; +"Older than 30 days" = "Older than 30 days"; +"Older than 6 months" = "Older than 6 months"; +"Older than a year" = "Older than a year"; +"Oldest first" = "Oldest first"; +"On" = "On"; +"Open Activity Monitor" = "Open Activity Monitor"; +"Open App Store Updates" = "Open App Store Updates"; +"Open Folder" = "Open Folder"; +"Open a category to review individual items" = "Open a category to review individual items"; +"Open folder" = "Open folder"; +"Open the App Store updates page. Direct-download apps may provide their own updater." = "Open the App Store updates page. Direct-download apps may provide their own updater."; +"Opens a folder picker" = "Opens a folder picker"; +"Over 1 GB" = "Over 1 GB"; +"Over 10 GB" = "Over 10 GB"; +"Over 100 MB" = "Over 100 MB"; +"Package" = "Package"; +"Package contents" = "Package contents"; +"Package · %lld files" = "Package · %lld files"; +"Partial result" = "Partial result"; +"Partial results" = "Partial results"; +"Performance" = "Performance"; +"Permanently delete %@?" = "Permanently delete %@?"; +"Permanently remove %lld items" = "Permanently remove %lld items"; +"Personal data or an optional cleanup action. Left unselected by default." = "Personal data or an optional cleanup action. Left unselected by default."; +"Photos could not be compared" = "Photos could not be compared"; +"Pinned" = "Pinned"; +"Preparing scan" = "Preparing scan"; +"Preparing the next area…" = "Preparing the next area…"; +"Preparing visual comparison" = "Preparing visual comparison"; +"Program not declared in this plist" = "Program not declared in this plist"; +"Protected caches and app containers will be skipped." = "Protected caches and app containers will be skipped."; +"Protected copy" = "Protected copy"; +"Protected system locations and processes are restricted." = "Protected system locations and processes are restricted."; +"Protection" = "Protection"; +"PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review." = "PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review."; +"PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed." = "PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed."; +"PureMac compares local image thumbnails without changing your photos." = "PureMac compares local image thumbnails without changing your photos."; +"PureMac could not confirm the local XProtect installation." = "PureMac could not confirm the local XProtect installation."; +"PureMac could not read this setting." = "PureMac could not read this setting."; +"PureMac did not find removable items in the selected scan areas." = "PureMac did not find removable items in the selected scan areas."; +"PureMac measures allocated disk space without changing files." = "PureMac measures allocated disk space without changing files."; +"PureMac reads the selected folder and does not change anything during a scan." = "PureMac reads the selected folder and does not change anything during a scan."; +"PureMac will ask Homebrew for available versions when you start the check." = "PureMac will ask Homebrew for available versions when you start the check."; +"PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing." = "PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing."; +"PureMac.app" = "PureMac.app"; +"Ready for protected locations" = "Ready for protected locations"; +"Refresh disk information" = "Refresh disk information"; +"Refreshing package data and comparing installed versions." = "Refreshing package data and comparing installed versions."; +"Refused to delete %lld protected item(s) (home credential directory or similar)." = "Refused to delete %lld protected item(s) (home credential directory or similar)."; +"Remove %lld files" = "Remove %lld files"; +"Remove %lld items" = "Remove %lld items"; +"Remove apps and their related files" = "Remove apps and their related files"; +"Remove selected app files?" = "Remove selected app files?"; +"Remove selected files?" = "Remove selected files?"; +"Remove selected leftovers?" = "Remove selected leftovers?"; +"Removing the items you selected." = "Removing the items you selected."; +"Reveal %@ in Finder" = "Reveal %@ in Finder"; +"Reveal plist in Finder" = "Reveal plist in Finder"; +"Reveal skipped item in Finder" = "Reveal skipped item in Finder"; +"Review and update apps installed as Homebrew casks." = "Review and update apps installed as Homebrew casks."; +"Review built-in privacy and safety checks" = "Review built-in privacy and safety checks"; +"Review matching files side by side" = "Review matching files side by side"; +"Review only" = "Review only"; +"Review removal" = "Review removal"; +"Review the groups before acting" = "Review the groups before acting"; +"Review the macOS safeguards that protect apps, disks, network access, and system files." = "Review the macOS safeguards that protect apps, disks, network access, and system files."; +"Review the results and choose exactly what to remove." = "Review the results and choose exactly what to remove."; +"Review which apps can access private data and hardware." = "Review which apps can access private data and hardware."; +"Run audit" = "Run audit"; +"Run the scan again when you are ready to check every area." = "Run the scan again when you are ready to check every area."; +"Safari privacy guide" = "Safari privacy guide"; +"Safari: Settings > Privacy" = "Safari: Settings > Privacy"; +"Sample limit reached" = "Sample limit reached"; +"Scan Another Folder" = "Scan Another Folder"; +"Scan Folder" = "Scan Folder"; +"Scan Photos" = "Scan Photos"; +"Scan again" = "Scan again"; +"Scan complete" = "Scan complete"; +"Scan could not finish" = "Scan could not finish"; +"Scan first, then review the exact files before removing anything." = "Scan first, then review the exact files before removing anything."; +"Scan stopped" = "Scan stopped"; +"Scan this Mac" = "Scan this Mac"; +"Scan this category" = "Scan this category"; +"Scanning %@…" = "Scanning %@…"; +"Scheduled" = "Scheduled"; +"Security Settings" = "Security Settings"; +"See current resource use and review what starts in the background." = "See current resource use and review what starts in the background."; +"See what is taking up space" = "See what is taking up space"; +"Select %@" = "Select %@"; +"Select a tool from the sidebar." = "Select a tool from the sidebar."; +"Select any folder to see which files and subfolders occupy the most disk space." = "Select any folder to see which files and subfolders occupy the most disk space."; +"Select apps to update" = "Select apps to update"; +"Select at least one app to update." = "Select at least one app to update."; +"Select copies" = "Select copies"; +"Select the apps Homebrew should upgrade." = "Select the apps Homebrew should upgrade."; +"Select the extra copies you want to review" = "Select the extra copies you want to review"; +"Select visible" = "Select visible"; +"Selected" = "Selected"; +"Selected cleanup items are permanently removed." = "Selected cleanup items are permanently removed."; +"Share of scanned space" = "Share of scanned space"; +"Shares storage with %@" = "Shares storage with %@"; +"Show %@ in Finder" = "Show %@ in Finder"; +"Show in Finder" = "Show in Finder"; +"Shows a confirmation before moving the selected copies" = "Shows a confirmation before moving the selected copies"; +"Similar Photos" = "Similar Photos"; +"Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality." = "Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality."; +"Size unavailable" = "Size unavailable"; +"Skipped items" = "Skipped items"; +"Smallest first" = "Smallest first"; +"Snapshot could not be deleted" = "Snapshot could not be deleted"; +"Software Update" = "Software Update"; +"Some contents were skipped or inaccessible" = "Some contents were skipped or inaccessible"; +"Some files were not moved" = "Some files were not moved"; +"Some information could not be read (%lld)" = "Some information could not be read (%lld)"; +"Some items need attention" = "Some items need attention"; +"Some locations are unavailable" = "Some locations are unavailable"; +"Some protected locations are unavailable. Full Disk Access allows a more complete scan." = "Some protected locations are unavailable. Full Disk Access allows a more complete scan."; +"Some selected files" = "Some selected files"; +"Sort" = "Sort"; +"Space Explorer" = "Space Explorer"; +"Startup and background items" = "Startup and background items"; +"Stop" = "Stop"; +"Stop scan" = "Stop scan"; +"Stopped" = "Stopped"; +"Stopping keeps the results found so far." = "Stopping keeps the results found so far."; +"Stops scanning without changing any files" = "Stops scanning without changing any files"; +"Suggested groups" = "Suggested groups"; +"Symbolic link" = "Symbolic link"; +"Symbolic links and cloud-only items are excluded." = "Symbolic links and cloud-only items are excluded."; +"Symbolic links cannot be scanned: %@" = "Symbolic links cannot be scanned: %@"; +"Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted." = "Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted."; +"System Integrity Protection" = "System Integrity Protection"; +"System Integrity Protection is turned off." = "System Integrity Protection is turned off."; +"System daemon" = "System daemon"; +"System update" = "System update"; +"System-wide agent" = "System-wide agent"; +"The analyzed photos did not meet PureMac's visual similarity threshold." = "The analyzed photos did not meet PureMac's visual similarity threshold."; +"The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan." = "The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan."; +"The check timed out." = "The check timed out."; +"The copy marked Keep is missing or changed: %@" = "The copy marked Keep is missing or changed: %@"; +"The inspected user and third-party launch folders are empty." = "The inspected user and third-party launch folders are empty."; +"The launch item is not a property-list dictionary." = "The launch item is not a property-list dictionary."; +"The macOS application firewall is turned off." = "The macOS application firewall is turned off."; +"The protected copy cannot be moved to Trash: %@" = "The protected copy cannot be moved to Trash: %@"; +"The scan stopped. Available results are ready to review." = "The scan stopped. Available results are ready to review."; +"The selected folder cannot be scanned: %@" = "The selected folder cannot be scanned: %@"; +"The selected folder could not be read: %@" = "The selected folder could not be read: %@"; +"The selected folder is stored in the cloud and has not been downloaded: %@" = "The selected folder is stored in the cloud and has not been downloaded: %@"; +"The selected item is not a folder: %@" = "The selected item is not a folder: %@"; +"The startup disk is encrypted with FileVault." = "The startup disk is encrypted with FileVault."; +"The startup disk is not encrypted with FileVault." = "The startup disk is not encrypted with FileVault."; +"The system returned an unrecognized status." = "The system returned an unrecognized status."; +"There are no cleanup items in this category." = "There are no cleanup items in this category."; +"This folder is empty or its contents were excluded from the scan." = "This folder is empty or its contents were excluded from the scan."; +"This permanently removes %@. Its size is unknown, and the action cannot be undone." = "This permanently removes %@. Its size is unknown, and the action cannot be undone."; +"This permanently removes the selected Time Machine snapshot." = "This permanently removes the selected Time Machine snapshot."; +"This snapshot does not have a verified Time Machine timestamp." = "This snapshot does not have a verified Time Machine timestamp."; +"Time Machine" = "Time Machine"; +"Time Machine Settings" = "Time Machine Settings"; +"Time Machine did not report any snapshots for the startup disk." = "Time Machine did not report any snapshots for the startup disk."; +"Time Machine snapshots are unavailable" = "Time Machine snapshots are unavailable"; +"Time Machine snapshots can be reviewed and removed individually" = "Time Machine snapshots can be reviewed and removed individually"; +"Tools" = "Tools"; +"Try Again" = "Try Again"; +"Try another name, size, or date range." = "Try another name, size, or date range."; +"Uninstaller" = "Uninstaller"; +"Unknown" = "Unknown"; +"Unknown error" = "Unknown error"; +"Updates from Homebrew" = "Updates from Homebrew"; +"Updating…" = "Updating…"; +"Upgrade %lld Apps" = "Upgrade %lld Apps"; +"Upgrade 1 App" = "Upgrade 1 App"; +"Upgrade selected apps?" = "Upgrade selected apps?"; +"User agent" = "User agent"; +"Verifying possible matches" = "Verifying possible matches"; +"Watches folders" = "Watches folders"; +"Watches paths" = "Watches paths"; +"XProtect" = "XProtect"; +"allocated in this folder" = "allocated in this folder"; +"definitions %@" = "definitions %@"; +"engine %@" = "engine %@"; +"macOS does not report reliable per-snapshot sizes in this listing." = "macOS does not report reliable per-snapshot sizes in this listing."; +"reclaimed" = "reclaimed"; +"similar group" = "similar group"; +"similar groups" = "similar groups"; +"tmutil is not available on this Mac." = "tmutil is not available on this Mac."; diff --git a/PureMac/pl.lproj/Localizable.strings b/PureMac/pl.lproj/Localizable.strings index 376acd2..4795b4c 100644 --- a/PureMac/pl.lproj/Localizable.strings +++ b/PureMac/pl.lproj/Localizable.strings @@ -460,3 +460,410 @@ /* Simulator runtimes */ "Simulator runtime" = "Środowisko uruchomieniowe symulatora"; + +/* Current dashboard, tools, and cleanup review — English fallback until translated */ +"\nAnd %lld more." = "\nAnd %lld more."; +"%@ %@ to %@" = "%@ %@ to %@"; +"%@ available" = "%@ available"; +"%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again." = "%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again."; +"%@ did not finish within the allowed time." = "%@ did not finish within the allowed time."; +"%@ exited with status %d%@" = "%@ exited with status %d%@"; +"%@ files inspected" = "%@ files inspected"; +"%@ found across %lld categories." = "%@ found across %lld categories."; +"%@ found before the scan stopped. Results may be incomplete." = "%@ found before the scan stopped. Results may be incomplete."; +"%@ of %@" = "%@ of %@"; +"%@ of %@ candidates · %@ verified" = "%@ of %@ candidates · %@ verified"; +"%@ reviewable" = "%@ reviewable"; +"%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone." = "%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone."; +"%@ will move to Trash" = "%@ will move to Trash"; +"%lld analyzed" = "%lld analyzed"; +"%lld apps selected" = "%lld apps selected"; +"%lld areas" = "%lld areas"; +"%lld compared" = "%lld compared"; +"%lld exact copies · %@ each" = "%lld exact copies · %@ each"; +"%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access." = "%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access."; +"%lld file(s) could not be removed. Check that the items still exist and are not in use." = "%lld file(s) could not be removed. Check that the items still exist and are not in use."; +"%lld files totaling %@ were moved. Every protected copy remains in place." = "%lld files totaling %@ were moved. Every protected copy remains in place."; +"%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place." = "%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place."; +"%lld files · %lld folders" = "%lld files · %lld folders"; +"%lld folders" = "%lld folders"; +"%lld found" = "%lld found"; +"%lld inaccessible" = "%lld inaccessible"; +"%lld items · %@ found" = "%lld items · %@ found"; +"%lld matched" = "%lld matched"; +"%lld of %lld items shown" = "%lld of %lld items shown"; +"%lld percent" = "%lld percent"; +"%lld photos" = "%lld photos"; +"%lld photos · %@" = "%lld photos · %@"; +"%lld selected items will be permanently deleted. Review the list before continuing." = "%lld selected items will be permanently deleted. Review the list before continuing."; +"%lld selected · %@" = "%lld selected · %@"; +"%lld skipped" = "%lld skipped"; +"%lld unsafe or unavailable items were not scanned" = "%lld unsafe or unavailable items were not scanned"; +"%lld unsafe or unavailable items were skipped." = "%lld unsafe or unavailable items were skipped."; +"%lld updates available" = "%lld updates available"; +"%lld%% visual score" = "%lld%% visual score"; +", and %lld more" = ", and %lld more"; +"1 app selected" = "1 app selected"; +"1 update available" = "1 update available"; +"500 photo limit" = "500 photo limit"; +"A clear view of reclaimable storage and the tools that manage it." = "A clear view of reclaimable storage and the tools that manage it."; +"A selected file is missing or changed: %@" = "A selected file is missing or changed: %@"; +"A selected file no longer matches its kept copy: %@" = "A selected file no longer matches its kept copy: %@"; +"Access denied" = "Access denied"; +"Administrator removal failed: %@" = "Administrator removal failed: %@"; +"Always exclude from cleanup" = "Always exclude from cleanup"; +"Any age" = "Any age"; +"Any size" = "Any size"; +"App Updates" = "App Updates"; +"App and document packages are excluded: %@" = "App and document packages are excluded: %@"; +"App bundle missing" = "App bundle missing"; +"App downloads are checked before opening." = "App downloads are checked before opening."; +"App permissions" = "App permissions"; +"Apple Guide" = "Apple Guide"; +"Apple's built-in malware protection is installed. Update recency is managed by macOS." = "Apple's built-in malware protection is installed. Update recency is managed by macOS."; +"Application Firewall" = "Application Firewall"; +"Apps outside Homebrew" = "Apps outside Homebrew"; +"At login" = "At login"; +"Available" = "Available"; +"Available to review" = "Available to review"; +"Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions." = "Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions."; +"Browser privacy" = "Browser privacy"; +"Building visual signatures" = "Building visual signatures"; +"Camera" = "Camera"; +"Care" = "Care"; +"Changed during scan" = "Changed during scan"; +"Check Again" = "Check Again"; +"Check again" = "Check again"; +"Check built-in safeguards" = "Check built-in safeguards"; +"Check installed apps for new versions" = "Check installed apps for new versions"; +"Check installed cask apps" = "Check installed cask apps"; +"Checked %@. Unknown means the setting could not be confirmed." = "Checked %@. Unknown means the setting could not be confirmed."; +"Checking" = "Checking"; +"Checking Homebrew casks" = "Checking Homebrew casks"; +"Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation." = "Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation."; +"Checking your Mac. Nothing is removed during a scan." = "Checking your Mac. Nothing is removed during a scan."; +"Choose Another Folder" = "Choose Another Folder"; +"Choose Folder" = "Choose Folder"; +"Choose a Folder" = "Choose a Folder"; +"Choose a folder of photos" = "Choose a folder of photos"; +"Choose a folder to check for duplicate files" = "Choose a folder to check for duplicate files"; +"Choose a folder to inspect" = "Choose a folder to inspect"; +"Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically." = "Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically."; +"Choose a photo folder" = "Choose a photo folder"; +"Choose where to look" = "Choose where to look"; +"Chrome privacy guide" = "Chrome privacy guide"; +"Clean selected items" = "Clean selected items"; +"Cleaning selected items" = "Cleaning selected items"; +"Cleanup Exclusions" = "Cleanup Exclusions"; +"Cleanup finished and disk information is refreshing." = "Cleanup finished and disk information is refreshing."; +"Cleanup plan" = "Cleanup plan"; +"Clear Selection" = "Clear Selection"; +"Clear filters" = "Clear filters"; +"Clear search" = "Clear search"; +"Clear selection" = "Clear selection"; +"Cloud-only file" = "Cloud-only file"; +"Collapse duplicate group" = "Collapse duplicate group"; +"Compare visually similar photos" = "Compare visually similar photos"; +"Conditional keep alive" = "Conditional keep alive"; +"Copy path" = "Copy path"; +"Could not inspect %@" = "Could not inspect %@"; +"Could not list Time Machine snapshots" = "Could not list Time Machine snapshots"; +"Could not read" = "Could not read"; +"Could not read %@" = "Could not read %@"; +"Couldn't check for updates" = "Couldn't check for updates"; +"Current scan path" = "Current scan path"; +"Delete" = "Delete"; +"Delete Snapshot" = "Delete Snapshot"; +"Delete local snapshot?" = "Delete local snapshot?"; +"Deselect visible" = "Deselect visible"; +"Developer Cleanup" = "Developer Cleanup"; +"Disabled" = "Disabled"; +"Downloaded apps are not being assessed by Gatekeeper." = "Downloaded apps are not being assessed by Gatekeeper."; +"Drag to tilt" = "Drag to tilt"; +"Duplicate Finder" = "Duplicate Finder"; +"Duplicate groups" = "Duplicate groups"; +"Every %lld seconds" = "Every %lld seconds"; +"Every eligible file was checked." = "Every eligible file was checked."; +"Exact-match cleanup with a protected copy in every group" = "Exact-match cleanup with a protected copy in every group"; +"Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it." = "Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it."; +"Expand duplicate group" = "Expand duplicate group"; +"File" = "File"; +"FileVault" = "FileVault"; +"FileVault Settings" = "FileVault Settings"; +"Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them." = "Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them."; +"Filter cleanup files" = "Filter cleanup files"; +"Find a file or path" = "Find a file or path"; +"Find copies that are exactly the same" = "Find copies that are exactly the same"; +"Find space to reclaim." = "Find space to reclaim."; +"Find visually related shots in a folder and review them side by side." = "Find visually related shots in a folder and review them side by side."; +"Find what uses the most disk space" = "Find what uses the most disk space"; +"Finding local photos" = "Finding local photos"; +"Firewall Settings" = "Firewall Settings"; +"Focused utilities for storage, apps, and system maintenance" = "Focused utilities for storage, apps, and system maintenance"; +"Folder could not be inspected" = "Folder could not be inspected"; +"Full Disk Access is off" = "Full Disk Access is off"; +"Full access" = "Full access"; +"Gatekeeper" = "Gatekeeper"; +"Group %lld" = "Group %lld"; +"Grouping similar shots" = "Grouping similar shots"; +"Hard-linked copy" = "Hard-linked copy"; +"Homebrew apps are up to date" = "Homebrew apps are up to date"; +"Homebrew did not finish before the operation timed out." = "Homebrew did not finish before the operation timed out."; +"Homebrew finished, but %lld selected apps still report updates." = "Homebrew finished, but %lld selected apps still report updates."; +"Homebrew finished, but 1 selected app still reports an update." = "Homebrew finished, but 1 selected app still reports an update."; +"Homebrew finished. Check again to verify installed versions." = "Homebrew finished. Check again to verify installed versions."; +"Homebrew not found" = "Homebrew not found"; +"Homebrew produced more output than PureMac could safely retain." = "Homebrew produced more output than PureMac could safely retain."; +"Homebrew returned an invalid cask identifier: %@" = "Homebrew returned an invalid cask identifier: %@"; +"Homebrew returned update information PureMac could not read." = "Homebrew returned update information PureMac could not read."; +"Homebrew updated the %lld selected apps." = "Homebrew updated the %lld selected apps."; +"Homebrew updated the selected app." = "Homebrew updated the selected app."; +"Homebrew was not found in a standard installation location." = "Homebrew was not found in a standard installation location."; +"Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process." = "Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process."; +"Includes %lld selected items hidden by filters." = "Includes %lld selected items hidden by filters."; +"Incoming network connections are filtered." = "Incoming network connections are filtered."; +"Inspect" = "Inspect"; +"Inspect a folder by allocated disk space. Your files are never changed." = "Inspect a folder by allocated disk space. Your files are never changed."; +"Inspect memory and background activity" = "Inspect memory and background activity"; +"Inspect startup items and local snapshots again" = "Inspect startup items and local snapshots again"; +"Inspected %@ files in %@. %@" = "Inspected %@ files in %@. %@"; +"Inspecting startup items and local snapshots…" = "Inspecting startup items and local snapshots…"; +"Inspection stopped" = "Inspection stopped"; +"Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels." = "Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels."; +"Installed" = "Installed"; +"Installed %@" = "Installed %@"; +"Keep" = "Keep"; +"Keep PureMac open until this pass finishes." = "Keep PureMac open until this pass finishes."; +"Keep alive" = "Keep alive"; +"Largest first" = "Largest first"; +"Largest items" = "Largest items"; +"Last activity: %@" = "Last activity: %@"; +"Last checked" = "Last checked"; +"Launch agents and daemons installed outside macOS system folders" = "Launch agents and daemons installed outside macOS system folders"; +"Leftovers" = "Leftovers"; +"Live" = "Live"; +"Live resources" = "Live resources"; +"Local and private" = "Local and private"; +"Local files" = "Local files"; +"Local snapshot" = "Local snapshot"; +"Local snapshots" = "Local snapshots"; +"Location" = "Location"; +"Login Items Settings" = "Login Items Settings"; +"Looking through files" = "Looking through files"; +"Mac storage" = "Mac storage"; +"Managed cleanup action" = "Managed cleanup action"; +"Matching files" = "Matching files"; +"Measuring allocated space" = "Measuring allocated space"; +"Memory pressure use" = "Memory pressure use"; +"Microphone" = "Microphone"; +"Modified" = "Modified"; +"Move selected duplicates to Trash?" = "Move selected duplicates to Trash?"; +"Moved to Trash" = "Moved to Trash"; +"Name" = "Name"; +"Needs attention" = "Needs attention"; +"Network state" = "Network state"; +"No exact duplicates found" = "No exact duplicates found"; +"No excluded paths" = "No excluded paths"; +"No files found" = "No files found"; +"No files were changed. Rescan this folder when you are ready." = "No files were changed. Rescan this folder when you are ready."; +"No launchd items found" = "No launchd items found"; +"No local snapshots reported" = "No local snapshots reported"; +"No matching files" = "No matching files"; +"No measurable items" = "No measurable items"; +"No photos were changed. You can scan the folder again at any time." = "No photos were changed. You can scan the folder again at any time."; +"No reclaimable items were found before the scan stopped." = "No reclaimable items were found before the scan stopped."; +"No reclaimable items were found in the areas checked." = "No reclaimable items were found in the areas checked."; +"No results yet" = "No results yet"; +"No scan run yet" = "No scan run yet"; +"No similar groups found" = "No similar groups found"; +"No updates are currently available for the cask apps Homebrew manages." = "No updates are currently available for the cask apps Homebrew manages."; +"Nothing selected" = "Nothing selected"; +"Nothing to clean" = "Nothing to clean"; +"Nothing was moved" = "Nothing was moved"; +"Off" = "Off"; +"Older than 30 days" = "Older than 30 days"; +"Older than 6 months" = "Older than 6 months"; +"Older than a year" = "Older than a year"; +"Oldest first" = "Oldest first"; +"On" = "On"; +"Open Activity Monitor" = "Open Activity Monitor"; +"Open App Store Updates" = "Open App Store Updates"; +"Open Folder" = "Open Folder"; +"Open a category to review individual items" = "Open a category to review individual items"; +"Open folder" = "Open folder"; +"Open the App Store updates page. Direct-download apps may provide their own updater." = "Open the App Store updates page. Direct-download apps may provide their own updater."; +"Opens a folder picker" = "Opens a folder picker"; +"Over 1 GB" = "Over 1 GB"; +"Over 10 GB" = "Over 10 GB"; +"Over 100 MB" = "Over 100 MB"; +"Package" = "Package"; +"Package contents" = "Package contents"; +"Package · %lld files" = "Package · %lld files"; +"Partial result" = "Partial result"; +"Partial results" = "Partial results"; +"Performance" = "Performance"; +"Permanently delete %@?" = "Permanently delete %@?"; +"Permanently remove %lld items" = "Permanently remove %lld items"; +"Personal data or an optional cleanup action. Left unselected by default." = "Personal data or an optional cleanup action. Left unselected by default."; +"Photos could not be compared" = "Photos could not be compared"; +"Pinned" = "Pinned"; +"Preparing scan" = "Preparing scan"; +"Preparing the next area…" = "Preparing the next area…"; +"Preparing visual comparison" = "Preparing visual comparison"; +"Program not declared in this plist" = "Program not declared in this plist"; +"Protected caches and app containers will be skipped." = "Protected caches and app containers will be skipped."; +"Protected copy" = "Protected copy"; +"Protected system locations and processes are restricted." = "Protected system locations and processes are restricted."; +"Protection" = "Protection"; +"PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review." = "PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review."; +"PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed." = "PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed."; +"PureMac compares local image thumbnails without changing your photos." = "PureMac compares local image thumbnails without changing your photos."; +"PureMac could not confirm the local XProtect installation." = "PureMac could not confirm the local XProtect installation."; +"PureMac could not read this setting." = "PureMac could not read this setting."; +"PureMac did not find removable items in the selected scan areas." = "PureMac did not find removable items in the selected scan areas."; +"PureMac measures allocated disk space without changing files." = "PureMac measures allocated disk space without changing files."; +"PureMac reads the selected folder and does not change anything during a scan." = "PureMac reads the selected folder and does not change anything during a scan."; +"PureMac will ask Homebrew for available versions when you start the check." = "PureMac will ask Homebrew for available versions when you start the check."; +"PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing." = "PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing."; +"PureMac.app" = "PureMac.app"; +"Ready for protected locations" = "Ready for protected locations"; +"Refresh disk information" = "Refresh disk information"; +"Refreshing package data and comparing installed versions." = "Refreshing package data and comparing installed versions."; +"Refused to delete %lld protected item(s) (home credential directory or similar)." = "Refused to delete %lld protected item(s) (home credential directory or similar)."; +"Remove %lld files" = "Remove %lld files"; +"Remove %lld items" = "Remove %lld items"; +"Remove apps and their related files" = "Remove apps and their related files"; +"Remove selected app files?" = "Remove selected app files?"; +"Remove selected files?" = "Remove selected files?"; +"Remove selected leftovers?" = "Remove selected leftovers?"; +"Removing the items you selected." = "Removing the items you selected."; +"Reveal %@ in Finder" = "Reveal %@ in Finder"; +"Reveal plist in Finder" = "Reveal plist in Finder"; +"Reveal skipped item in Finder" = "Reveal skipped item in Finder"; +"Review and update apps installed as Homebrew casks." = "Review and update apps installed as Homebrew casks."; +"Review built-in privacy and safety checks" = "Review built-in privacy and safety checks"; +"Review matching files side by side" = "Review matching files side by side"; +"Review only" = "Review only"; +"Review removal" = "Review removal"; +"Review the groups before acting" = "Review the groups before acting"; +"Review the macOS safeguards that protect apps, disks, network access, and system files." = "Review the macOS safeguards that protect apps, disks, network access, and system files."; +"Review the results and choose exactly what to remove." = "Review the results and choose exactly what to remove."; +"Review which apps can access private data and hardware." = "Review which apps can access private data and hardware."; +"Run audit" = "Run audit"; +"Run the scan again when you are ready to check every area." = "Run the scan again when you are ready to check every area."; +"Safari privacy guide" = "Safari privacy guide"; +"Safari: Settings > Privacy" = "Safari: Settings > Privacy"; +"Sample limit reached" = "Sample limit reached"; +"Scan Another Folder" = "Scan Another Folder"; +"Scan Folder" = "Scan Folder"; +"Scan Photos" = "Scan Photos"; +"Scan again" = "Scan again"; +"Scan complete" = "Scan complete"; +"Scan could not finish" = "Scan could not finish"; +"Scan first, then review the exact files before removing anything." = "Scan first, then review the exact files before removing anything."; +"Scan stopped" = "Scan stopped"; +"Scan this Mac" = "Scan this Mac"; +"Scan this category" = "Scan this category"; +"Scanning %@…" = "Scanning %@…"; +"Scheduled" = "Scheduled"; +"Security Settings" = "Security Settings"; +"See current resource use and review what starts in the background." = "See current resource use and review what starts in the background."; +"See what is taking up space" = "See what is taking up space"; +"Select %@" = "Select %@"; +"Select a tool from the sidebar." = "Select a tool from the sidebar."; +"Select any folder to see which files and subfolders occupy the most disk space." = "Select any folder to see which files and subfolders occupy the most disk space."; +"Select apps to update" = "Select apps to update"; +"Select at least one app to update." = "Select at least one app to update."; +"Select copies" = "Select copies"; +"Select the apps Homebrew should upgrade." = "Select the apps Homebrew should upgrade."; +"Select the extra copies you want to review" = "Select the extra copies you want to review"; +"Select visible" = "Select visible"; +"Selected" = "Selected"; +"Selected cleanup items are permanently removed." = "Selected cleanup items are permanently removed."; +"Share of scanned space" = "Share of scanned space"; +"Shares storage with %@" = "Shares storage with %@"; +"Show %@ in Finder" = "Show %@ in Finder"; +"Show in Finder" = "Show in Finder"; +"Shows a confirmation before moving the selected copies" = "Shows a confirmation before moving the selected copies"; +"Similar Photos" = "Similar Photos"; +"Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality." = "Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality."; +"Size unavailable" = "Size unavailable"; +"Skipped items" = "Skipped items"; +"Smallest first" = "Smallest first"; +"Snapshot could not be deleted" = "Snapshot could not be deleted"; +"Software Update" = "Software Update"; +"Some contents were skipped or inaccessible" = "Some contents were skipped or inaccessible"; +"Some files were not moved" = "Some files were not moved"; +"Some information could not be read (%lld)" = "Some information could not be read (%lld)"; +"Some items need attention" = "Some items need attention"; +"Some locations are unavailable" = "Some locations are unavailable"; +"Some protected locations are unavailable. Full Disk Access allows a more complete scan." = "Some protected locations are unavailable. Full Disk Access allows a more complete scan."; +"Some selected files" = "Some selected files"; +"Sort" = "Sort"; +"Space Explorer" = "Space Explorer"; +"Startup and background items" = "Startup and background items"; +"Stop" = "Stop"; +"Stop scan" = "Stop scan"; +"Stopped" = "Stopped"; +"Stopping keeps the results found so far." = "Stopping keeps the results found so far."; +"Stops scanning without changing any files" = "Stops scanning without changing any files"; +"Suggested groups" = "Suggested groups"; +"Symbolic link" = "Symbolic link"; +"Symbolic links and cloud-only items are excluded." = "Symbolic links and cloud-only items are excluded."; +"Symbolic links cannot be scanned: %@" = "Symbolic links cannot be scanned: %@"; +"Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted." = "Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted."; +"System Integrity Protection" = "System Integrity Protection"; +"System Integrity Protection is turned off." = "System Integrity Protection is turned off."; +"System daemon" = "System daemon"; +"System update" = "System update"; +"System-wide agent" = "System-wide agent"; +"The analyzed photos did not meet PureMac's visual similarity threshold." = "The analyzed photos did not meet PureMac's visual similarity threshold."; +"The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan." = "The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan."; +"The check timed out." = "The check timed out."; +"The copy marked Keep is missing or changed: %@" = "The copy marked Keep is missing or changed: %@"; +"The inspected user and third-party launch folders are empty." = "The inspected user and third-party launch folders are empty."; +"The launch item is not a property-list dictionary." = "The launch item is not a property-list dictionary."; +"The macOS application firewall is turned off." = "The macOS application firewall is turned off."; +"The protected copy cannot be moved to Trash: %@" = "The protected copy cannot be moved to Trash: %@"; +"The scan stopped. Available results are ready to review." = "The scan stopped. Available results are ready to review."; +"The selected folder cannot be scanned: %@" = "The selected folder cannot be scanned: %@"; +"The selected folder could not be read: %@" = "The selected folder could not be read: %@"; +"The selected folder is stored in the cloud and has not been downloaded: %@" = "The selected folder is stored in the cloud and has not been downloaded: %@"; +"The selected item is not a folder: %@" = "The selected item is not a folder: %@"; +"The startup disk is encrypted with FileVault." = "The startup disk is encrypted with FileVault."; +"The startup disk is not encrypted with FileVault." = "The startup disk is not encrypted with FileVault."; +"The system returned an unrecognized status." = "The system returned an unrecognized status."; +"There are no cleanup items in this category." = "There are no cleanup items in this category."; +"This folder is empty or its contents were excluded from the scan." = "This folder is empty or its contents were excluded from the scan."; +"This permanently removes %@. Its size is unknown, and the action cannot be undone." = "This permanently removes %@. Its size is unknown, and the action cannot be undone."; +"This permanently removes the selected Time Machine snapshot." = "This permanently removes the selected Time Machine snapshot."; +"This snapshot does not have a verified Time Machine timestamp." = "This snapshot does not have a verified Time Machine timestamp."; +"Time Machine" = "Time Machine"; +"Time Machine Settings" = "Time Machine Settings"; +"Time Machine did not report any snapshots for the startup disk." = "Time Machine did not report any snapshots for the startup disk."; +"Time Machine snapshots are unavailable" = "Time Machine snapshots are unavailable"; +"Time Machine snapshots can be reviewed and removed individually" = "Time Machine snapshots can be reviewed and removed individually"; +"Tools" = "Tools"; +"Try Again" = "Try Again"; +"Try another name, size, or date range." = "Try another name, size, or date range."; +"Uninstaller" = "Uninstaller"; +"Unknown" = "Unknown"; +"Unknown error" = "Unknown error"; +"Updates from Homebrew" = "Updates from Homebrew"; +"Updating…" = "Updating…"; +"Upgrade %lld Apps" = "Upgrade %lld Apps"; +"Upgrade 1 App" = "Upgrade 1 App"; +"Upgrade selected apps?" = "Upgrade selected apps?"; +"User agent" = "User agent"; +"Verifying possible matches" = "Verifying possible matches"; +"Watches folders" = "Watches folders"; +"Watches paths" = "Watches paths"; +"XProtect" = "XProtect"; +"allocated in this folder" = "allocated in this folder"; +"definitions %@" = "definitions %@"; +"engine %@" = "engine %@"; +"macOS does not report reliable per-snapshot sizes in this listing." = "macOS does not report reliable per-snapshot sizes in this listing."; +"reclaimed" = "reclaimed"; +"similar group" = "similar group"; +"similar groups" = "similar groups"; +"tmutil is not available on this Mac." = "tmutil is not available on this Mac."; diff --git a/PureMac/pt-BR.lproj/Localizable.strings b/PureMac/pt-BR.lproj/Localizable.strings index 2efda7d..ab73796 100644 --- a/PureMac/pt-BR.lproj/Localizable.strings +++ b/PureMac/pt-BR.lproj/Localizable.strings @@ -460,3 +460,410 @@ /* Simulator runtimes */ "Simulator runtime" = "Runtime do simulador"; + +/* Current dashboard, tools, and cleanup review — English fallback until translated */ +"\nAnd %lld more." = "\nAnd %lld more."; +"%@ %@ to %@" = "%@ %@ to %@"; +"%@ available" = "%@ available"; +"%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again." = "%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again."; +"%@ did not finish within the allowed time." = "%@ did not finish within the allowed time."; +"%@ exited with status %d%@" = "%@ exited with status %d%@"; +"%@ files inspected" = "%@ files inspected"; +"%@ found across %lld categories." = "%@ found across %lld categories."; +"%@ found before the scan stopped. Results may be incomplete." = "%@ found before the scan stopped. Results may be incomplete."; +"%@ of %@" = "%@ of %@"; +"%@ of %@ candidates · %@ verified" = "%@ of %@ candidates · %@ verified"; +"%@ reviewable" = "%@ reviewable"; +"%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone." = "%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone."; +"%@ will move to Trash" = "%@ will move to Trash"; +"%lld analyzed" = "%lld analyzed"; +"%lld apps selected" = "%lld apps selected"; +"%lld areas" = "%lld areas"; +"%lld compared" = "%lld compared"; +"%lld exact copies · %@ each" = "%lld exact copies · %@ each"; +"%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access." = "%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access."; +"%lld file(s) could not be removed. Check that the items still exist and are not in use." = "%lld file(s) could not be removed. Check that the items still exist and are not in use."; +"%lld files totaling %@ were moved. Every protected copy remains in place." = "%lld files totaling %@ were moved. Every protected copy remains in place."; +"%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place." = "%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place."; +"%lld files · %lld folders" = "%lld files · %lld folders"; +"%lld folders" = "%lld folders"; +"%lld found" = "%lld found"; +"%lld inaccessible" = "%lld inaccessible"; +"%lld items · %@ found" = "%lld items · %@ found"; +"%lld matched" = "%lld matched"; +"%lld of %lld items shown" = "%lld of %lld items shown"; +"%lld percent" = "%lld percent"; +"%lld photos" = "%lld photos"; +"%lld photos · %@" = "%lld photos · %@"; +"%lld selected items will be permanently deleted. Review the list before continuing." = "%lld selected items will be permanently deleted. Review the list before continuing."; +"%lld selected · %@" = "%lld selected · %@"; +"%lld skipped" = "%lld skipped"; +"%lld unsafe or unavailable items were not scanned" = "%lld unsafe or unavailable items were not scanned"; +"%lld unsafe or unavailable items were skipped." = "%lld unsafe or unavailable items were skipped."; +"%lld updates available" = "%lld updates available"; +"%lld%% visual score" = "%lld%% visual score"; +", and %lld more" = ", and %lld more"; +"1 app selected" = "1 app selected"; +"1 update available" = "1 update available"; +"500 photo limit" = "500 photo limit"; +"A clear view of reclaimable storage and the tools that manage it." = "A clear view of reclaimable storage and the tools that manage it."; +"A selected file is missing or changed: %@" = "A selected file is missing or changed: %@"; +"A selected file no longer matches its kept copy: %@" = "A selected file no longer matches its kept copy: %@"; +"Access denied" = "Access denied"; +"Administrator removal failed: %@" = "Administrator removal failed: %@"; +"Always exclude from cleanup" = "Always exclude from cleanup"; +"Any age" = "Any age"; +"Any size" = "Any size"; +"App Updates" = "App Updates"; +"App and document packages are excluded: %@" = "App and document packages are excluded: %@"; +"App bundle missing" = "App bundle missing"; +"App downloads are checked before opening." = "App downloads are checked before opening."; +"App permissions" = "App permissions"; +"Apple Guide" = "Apple Guide"; +"Apple's built-in malware protection is installed. Update recency is managed by macOS." = "Apple's built-in malware protection is installed. Update recency is managed by macOS."; +"Application Firewall" = "Application Firewall"; +"Apps outside Homebrew" = "Apps outside Homebrew"; +"At login" = "At login"; +"Available" = "Available"; +"Available to review" = "Available to review"; +"Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions." = "Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions."; +"Browser privacy" = "Browser privacy"; +"Building visual signatures" = "Building visual signatures"; +"Camera" = "Camera"; +"Care" = "Care"; +"Changed during scan" = "Changed during scan"; +"Check Again" = "Check Again"; +"Check again" = "Check again"; +"Check built-in safeguards" = "Check built-in safeguards"; +"Check installed apps for new versions" = "Check installed apps for new versions"; +"Check installed cask apps" = "Check installed cask apps"; +"Checked %@. Unknown means the setting could not be confirmed." = "Checked %@. Unknown means the setting could not be confirmed."; +"Checking" = "Checking"; +"Checking Homebrew casks" = "Checking Homebrew casks"; +"Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation." = "Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation."; +"Checking your Mac. Nothing is removed during a scan." = "Checking your Mac. Nothing is removed during a scan."; +"Choose Another Folder" = "Choose Another Folder"; +"Choose Folder" = "Choose Folder"; +"Choose a Folder" = "Choose a Folder"; +"Choose a folder of photos" = "Choose a folder of photos"; +"Choose a folder to check for duplicate files" = "Choose a folder to check for duplicate files"; +"Choose a folder to inspect" = "Choose a folder to inspect"; +"Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically." = "Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically."; +"Choose a photo folder" = "Choose a photo folder"; +"Choose where to look" = "Choose where to look"; +"Chrome privacy guide" = "Chrome privacy guide"; +"Clean selected items" = "Clean selected items"; +"Cleaning selected items" = "Cleaning selected items"; +"Cleanup Exclusions" = "Cleanup Exclusions"; +"Cleanup finished and disk information is refreshing." = "Cleanup finished and disk information is refreshing."; +"Cleanup plan" = "Cleanup plan"; +"Clear Selection" = "Clear Selection"; +"Clear filters" = "Clear filters"; +"Clear search" = "Clear search"; +"Clear selection" = "Clear selection"; +"Cloud-only file" = "Cloud-only file"; +"Collapse duplicate group" = "Collapse duplicate group"; +"Compare visually similar photos" = "Compare visually similar photos"; +"Conditional keep alive" = "Conditional keep alive"; +"Copy path" = "Copy path"; +"Could not inspect %@" = "Could not inspect %@"; +"Could not list Time Machine snapshots" = "Could not list Time Machine snapshots"; +"Could not read" = "Could not read"; +"Could not read %@" = "Could not read %@"; +"Couldn't check for updates" = "Couldn't check for updates"; +"Current scan path" = "Current scan path"; +"Delete" = "Delete"; +"Delete Snapshot" = "Delete Snapshot"; +"Delete local snapshot?" = "Delete local snapshot?"; +"Deselect visible" = "Deselect visible"; +"Developer Cleanup" = "Developer Cleanup"; +"Disabled" = "Disabled"; +"Downloaded apps are not being assessed by Gatekeeper." = "Downloaded apps are not being assessed by Gatekeeper."; +"Drag to tilt" = "Drag to tilt"; +"Duplicate Finder" = "Duplicate Finder"; +"Duplicate groups" = "Duplicate groups"; +"Every %lld seconds" = "Every %lld seconds"; +"Every eligible file was checked." = "Every eligible file was checked."; +"Exact-match cleanup with a protected copy in every group" = "Exact-match cleanup with a protected copy in every group"; +"Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it." = "Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it."; +"Expand duplicate group" = "Expand duplicate group"; +"File" = "File"; +"FileVault" = "FileVault"; +"FileVault Settings" = "FileVault Settings"; +"Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them." = "Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them."; +"Filter cleanup files" = "Filter cleanup files"; +"Find a file or path" = "Find a file or path"; +"Find copies that are exactly the same" = "Find copies that are exactly the same"; +"Find space to reclaim." = "Find space to reclaim."; +"Find visually related shots in a folder and review them side by side." = "Find visually related shots in a folder and review them side by side."; +"Find what uses the most disk space" = "Find what uses the most disk space"; +"Finding local photos" = "Finding local photos"; +"Firewall Settings" = "Firewall Settings"; +"Focused utilities for storage, apps, and system maintenance" = "Focused utilities for storage, apps, and system maintenance"; +"Folder could not be inspected" = "Folder could not be inspected"; +"Full Disk Access is off" = "Full Disk Access is off"; +"Full access" = "Full access"; +"Gatekeeper" = "Gatekeeper"; +"Group %lld" = "Group %lld"; +"Grouping similar shots" = "Grouping similar shots"; +"Hard-linked copy" = "Hard-linked copy"; +"Homebrew apps are up to date" = "Homebrew apps are up to date"; +"Homebrew did not finish before the operation timed out." = "Homebrew did not finish before the operation timed out."; +"Homebrew finished, but %lld selected apps still report updates." = "Homebrew finished, but %lld selected apps still report updates."; +"Homebrew finished, but 1 selected app still reports an update." = "Homebrew finished, but 1 selected app still reports an update."; +"Homebrew finished. Check again to verify installed versions." = "Homebrew finished. Check again to verify installed versions."; +"Homebrew not found" = "Homebrew not found"; +"Homebrew produced more output than PureMac could safely retain." = "Homebrew produced more output than PureMac could safely retain."; +"Homebrew returned an invalid cask identifier: %@" = "Homebrew returned an invalid cask identifier: %@"; +"Homebrew returned update information PureMac could not read." = "Homebrew returned update information PureMac could not read."; +"Homebrew updated the %lld selected apps." = "Homebrew updated the %lld selected apps."; +"Homebrew updated the selected app." = "Homebrew updated the selected app."; +"Homebrew was not found in a standard installation location." = "Homebrew was not found in a standard installation location."; +"Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process." = "Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process."; +"Includes %lld selected items hidden by filters." = "Includes %lld selected items hidden by filters."; +"Incoming network connections are filtered." = "Incoming network connections are filtered."; +"Inspect" = "Inspect"; +"Inspect a folder by allocated disk space. Your files are never changed." = "Inspect a folder by allocated disk space. Your files are never changed."; +"Inspect memory and background activity" = "Inspect memory and background activity"; +"Inspect startup items and local snapshots again" = "Inspect startup items and local snapshots again"; +"Inspected %@ files in %@. %@" = "Inspected %@ files in %@. %@"; +"Inspecting startup items and local snapshots…" = "Inspecting startup items and local snapshots…"; +"Inspection stopped" = "Inspection stopped"; +"Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels." = "Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels."; +"Installed" = "Installed"; +"Installed %@" = "Installed %@"; +"Keep" = "Keep"; +"Keep PureMac open until this pass finishes." = "Keep PureMac open until this pass finishes."; +"Keep alive" = "Keep alive"; +"Largest first" = "Largest first"; +"Largest items" = "Largest items"; +"Last activity: %@" = "Last activity: %@"; +"Last checked" = "Last checked"; +"Launch agents and daemons installed outside macOS system folders" = "Launch agents and daemons installed outside macOS system folders"; +"Leftovers" = "Leftovers"; +"Live" = "Live"; +"Live resources" = "Live resources"; +"Local and private" = "Local and private"; +"Local files" = "Local files"; +"Local snapshot" = "Local snapshot"; +"Local snapshots" = "Local snapshots"; +"Location" = "Location"; +"Login Items Settings" = "Login Items Settings"; +"Looking through files" = "Looking through files"; +"Mac storage" = "Mac storage"; +"Managed cleanup action" = "Managed cleanup action"; +"Matching files" = "Matching files"; +"Measuring allocated space" = "Measuring allocated space"; +"Memory pressure use" = "Memory pressure use"; +"Microphone" = "Microphone"; +"Modified" = "Modified"; +"Move selected duplicates to Trash?" = "Move selected duplicates to Trash?"; +"Moved to Trash" = "Moved to Trash"; +"Name" = "Name"; +"Needs attention" = "Needs attention"; +"Network state" = "Network state"; +"No exact duplicates found" = "No exact duplicates found"; +"No excluded paths" = "No excluded paths"; +"No files found" = "No files found"; +"No files were changed. Rescan this folder when you are ready." = "No files were changed. Rescan this folder when you are ready."; +"No launchd items found" = "No launchd items found"; +"No local snapshots reported" = "No local snapshots reported"; +"No matching files" = "No matching files"; +"No measurable items" = "No measurable items"; +"No photos were changed. You can scan the folder again at any time." = "No photos were changed. You can scan the folder again at any time."; +"No reclaimable items were found before the scan stopped." = "No reclaimable items were found before the scan stopped."; +"No reclaimable items were found in the areas checked." = "No reclaimable items were found in the areas checked."; +"No results yet" = "No results yet"; +"No scan run yet" = "No scan run yet"; +"No similar groups found" = "No similar groups found"; +"No updates are currently available for the cask apps Homebrew manages." = "No updates are currently available for the cask apps Homebrew manages."; +"Nothing selected" = "Nothing selected"; +"Nothing to clean" = "Nothing to clean"; +"Nothing was moved" = "Nothing was moved"; +"Off" = "Off"; +"Older than 30 days" = "Older than 30 days"; +"Older than 6 months" = "Older than 6 months"; +"Older than a year" = "Older than a year"; +"Oldest first" = "Oldest first"; +"On" = "On"; +"Open Activity Monitor" = "Open Activity Monitor"; +"Open App Store Updates" = "Open App Store Updates"; +"Open Folder" = "Open Folder"; +"Open a category to review individual items" = "Open a category to review individual items"; +"Open folder" = "Open folder"; +"Open the App Store updates page. Direct-download apps may provide their own updater." = "Open the App Store updates page. Direct-download apps may provide their own updater."; +"Opens a folder picker" = "Opens a folder picker"; +"Over 1 GB" = "Over 1 GB"; +"Over 10 GB" = "Over 10 GB"; +"Over 100 MB" = "Over 100 MB"; +"Package" = "Package"; +"Package contents" = "Package contents"; +"Package · %lld files" = "Package · %lld files"; +"Partial result" = "Partial result"; +"Partial results" = "Partial results"; +"Performance" = "Performance"; +"Permanently delete %@?" = "Permanently delete %@?"; +"Permanently remove %lld items" = "Permanently remove %lld items"; +"Personal data or an optional cleanup action. Left unselected by default." = "Personal data or an optional cleanup action. Left unselected by default."; +"Photos could not be compared" = "Photos could not be compared"; +"Pinned" = "Pinned"; +"Preparing scan" = "Preparing scan"; +"Preparing the next area…" = "Preparing the next area…"; +"Preparing visual comparison" = "Preparing visual comparison"; +"Program not declared in this plist" = "Program not declared in this plist"; +"Protected caches and app containers will be skipped." = "Protected caches and app containers will be skipped."; +"Protected copy" = "Protected copy"; +"Protected system locations and processes are restricted." = "Protected system locations and processes are restricted."; +"Protection" = "Protection"; +"PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review." = "PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review."; +"PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed." = "PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed."; +"PureMac compares local image thumbnails without changing your photos." = "PureMac compares local image thumbnails without changing your photos."; +"PureMac could not confirm the local XProtect installation." = "PureMac could not confirm the local XProtect installation."; +"PureMac could not read this setting." = "PureMac could not read this setting."; +"PureMac did not find removable items in the selected scan areas." = "PureMac did not find removable items in the selected scan areas."; +"PureMac measures allocated disk space without changing files." = "PureMac measures allocated disk space without changing files."; +"PureMac reads the selected folder and does not change anything during a scan." = "PureMac reads the selected folder and does not change anything during a scan."; +"PureMac will ask Homebrew for available versions when you start the check." = "PureMac will ask Homebrew for available versions when you start the check."; +"PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing." = "PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing."; +"PureMac.app" = "PureMac.app"; +"Ready for protected locations" = "Ready for protected locations"; +"Refresh disk information" = "Refresh disk information"; +"Refreshing package data and comparing installed versions." = "Refreshing package data and comparing installed versions."; +"Refused to delete %lld protected item(s) (home credential directory or similar)." = "Refused to delete %lld protected item(s) (home credential directory or similar)."; +"Remove %lld files" = "Remove %lld files"; +"Remove %lld items" = "Remove %lld items"; +"Remove apps and their related files" = "Remove apps and their related files"; +"Remove selected app files?" = "Remove selected app files?"; +"Remove selected files?" = "Remove selected files?"; +"Remove selected leftovers?" = "Remove selected leftovers?"; +"Removing the items you selected." = "Removing the items you selected."; +"Reveal %@ in Finder" = "Reveal %@ in Finder"; +"Reveal plist in Finder" = "Reveal plist in Finder"; +"Reveal skipped item in Finder" = "Reveal skipped item in Finder"; +"Review and update apps installed as Homebrew casks." = "Review and update apps installed as Homebrew casks."; +"Review built-in privacy and safety checks" = "Review built-in privacy and safety checks"; +"Review matching files side by side" = "Review matching files side by side"; +"Review only" = "Review only"; +"Review removal" = "Review removal"; +"Review the groups before acting" = "Review the groups before acting"; +"Review the macOS safeguards that protect apps, disks, network access, and system files." = "Review the macOS safeguards that protect apps, disks, network access, and system files."; +"Review the results and choose exactly what to remove." = "Review the results and choose exactly what to remove."; +"Review which apps can access private data and hardware." = "Review which apps can access private data and hardware."; +"Run audit" = "Run audit"; +"Run the scan again when you are ready to check every area." = "Run the scan again when you are ready to check every area."; +"Safari privacy guide" = "Safari privacy guide"; +"Safari: Settings > Privacy" = "Safari: Settings > Privacy"; +"Sample limit reached" = "Sample limit reached"; +"Scan Another Folder" = "Scan Another Folder"; +"Scan Folder" = "Scan Folder"; +"Scan Photos" = "Scan Photos"; +"Scan again" = "Scan again"; +"Scan complete" = "Scan complete"; +"Scan could not finish" = "Scan could not finish"; +"Scan first, then review the exact files before removing anything." = "Scan first, then review the exact files before removing anything."; +"Scan stopped" = "Scan stopped"; +"Scan this Mac" = "Scan this Mac"; +"Scan this category" = "Scan this category"; +"Scanning %@…" = "Scanning %@…"; +"Scheduled" = "Scheduled"; +"Security Settings" = "Security Settings"; +"See current resource use and review what starts in the background." = "See current resource use and review what starts in the background."; +"See what is taking up space" = "See what is taking up space"; +"Select %@" = "Select %@"; +"Select a tool from the sidebar." = "Select a tool from the sidebar."; +"Select any folder to see which files and subfolders occupy the most disk space." = "Select any folder to see which files and subfolders occupy the most disk space."; +"Select apps to update" = "Select apps to update"; +"Select at least one app to update." = "Select at least one app to update."; +"Select copies" = "Select copies"; +"Select the apps Homebrew should upgrade." = "Select the apps Homebrew should upgrade."; +"Select the extra copies you want to review" = "Select the extra copies you want to review"; +"Select visible" = "Select visible"; +"Selected" = "Selected"; +"Selected cleanup items are permanently removed." = "Selected cleanup items are permanently removed."; +"Share of scanned space" = "Share of scanned space"; +"Shares storage with %@" = "Shares storage with %@"; +"Show %@ in Finder" = "Show %@ in Finder"; +"Show in Finder" = "Show in Finder"; +"Shows a confirmation before moving the selected copies" = "Shows a confirmation before moving the selected copies"; +"Similar Photos" = "Similar Photos"; +"Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality." = "Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality."; +"Size unavailable" = "Size unavailable"; +"Skipped items" = "Skipped items"; +"Smallest first" = "Smallest first"; +"Snapshot could not be deleted" = "Snapshot could not be deleted"; +"Software Update" = "Software Update"; +"Some contents were skipped or inaccessible" = "Some contents were skipped or inaccessible"; +"Some files were not moved" = "Some files were not moved"; +"Some information could not be read (%lld)" = "Some information could not be read (%lld)"; +"Some items need attention" = "Some items need attention"; +"Some locations are unavailable" = "Some locations are unavailable"; +"Some protected locations are unavailable. Full Disk Access allows a more complete scan." = "Some protected locations are unavailable. Full Disk Access allows a more complete scan."; +"Some selected files" = "Some selected files"; +"Sort" = "Sort"; +"Space Explorer" = "Space Explorer"; +"Startup and background items" = "Startup and background items"; +"Stop" = "Stop"; +"Stop scan" = "Stop scan"; +"Stopped" = "Stopped"; +"Stopping keeps the results found so far." = "Stopping keeps the results found so far."; +"Stops scanning without changing any files" = "Stops scanning without changing any files"; +"Suggested groups" = "Suggested groups"; +"Symbolic link" = "Symbolic link"; +"Symbolic links and cloud-only items are excluded." = "Symbolic links and cloud-only items are excluded."; +"Symbolic links cannot be scanned: %@" = "Symbolic links cannot be scanned: %@"; +"Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted." = "Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted."; +"System Integrity Protection" = "System Integrity Protection"; +"System Integrity Protection is turned off." = "System Integrity Protection is turned off."; +"System daemon" = "System daemon"; +"System update" = "System update"; +"System-wide agent" = "System-wide agent"; +"The analyzed photos did not meet PureMac's visual similarity threshold." = "The analyzed photos did not meet PureMac's visual similarity threshold."; +"The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan." = "The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan."; +"The check timed out." = "The check timed out."; +"The copy marked Keep is missing or changed: %@" = "The copy marked Keep is missing or changed: %@"; +"The inspected user and third-party launch folders are empty." = "The inspected user and third-party launch folders are empty."; +"The launch item is not a property-list dictionary." = "The launch item is not a property-list dictionary."; +"The macOS application firewall is turned off." = "The macOS application firewall is turned off."; +"The protected copy cannot be moved to Trash: %@" = "The protected copy cannot be moved to Trash: %@"; +"The scan stopped. Available results are ready to review." = "The scan stopped. Available results are ready to review."; +"The selected folder cannot be scanned: %@" = "The selected folder cannot be scanned: %@"; +"The selected folder could not be read: %@" = "The selected folder could not be read: %@"; +"The selected folder is stored in the cloud and has not been downloaded: %@" = "The selected folder is stored in the cloud and has not been downloaded: %@"; +"The selected item is not a folder: %@" = "The selected item is not a folder: %@"; +"The startup disk is encrypted with FileVault." = "The startup disk is encrypted with FileVault."; +"The startup disk is not encrypted with FileVault." = "The startup disk is not encrypted with FileVault."; +"The system returned an unrecognized status." = "The system returned an unrecognized status."; +"There are no cleanup items in this category." = "There are no cleanup items in this category."; +"This folder is empty or its contents were excluded from the scan." = "This folder is empty or its contents were excluded from the scan."; +"This permanently removes %@. Its size is unknown, and the action cannot be undone." = "This permanently removes %@. Its size is unknown, and the action cannot be undone."; +"This permanently removes the selected Time Machine snapshot." = "This permanently removes the selected Time Machine snapshot."; +"This snapshot does not have a verified Time Machine timestamp." = "This snapshot does not have a verified Time Machine timestamp."; +"Time Machine" = "Time Machine"; +"Time Machine Settings" = "Time Machine Settings"; +"Time Machine did not report any snapshots for the startup disk." = "Time Machine did not report any snapshots for the startup disk."; +"Time Machine snapshots are unavailable" = "Time Machine snapshots are unavailable"; +"Time Machine snapshots can be reviewed and removed individually" = "Time Machine snapshots can be reviewed and removed individually"; +"Tools" = "Tools"; +"Try Again" = "Try Again"; +"Try another name, size, or date range." = "Try another name, size, or date range."; +"Uninstaller" = "Uninstaller"; +"Unknown" = "Unknown"; +"Unknown error" = "Unknown error"; +"Updates from Homebrew" = "Updates from Homebrew"; +"Updating…" = "Updating…"; +"Upgrade %lld Apps" = "Upgrade %lld Apps"; +"Upgrade 1 App" = "Upgrade 1 App"; +"Upgrade selected apps?" = "Upgrade selected apps?"; +"User agent" = "User agent"; +"Verifying possible matches" = "Verifying possible matches"; +"Watches folders" = "Watches folders"; +"Watches paths" = "Watches paths"; +"XProtect" = "XProtect"; +"allocated in this folder" = "allocated in this folder"; +"definitions %@" = "definitions %@"; +"engine %@" = "engine %@"; +"macOS does not report reliable per-snapshot sizes in this listing." = "macOS does not report reliable per-snapshot sizes in this listing."; +"reclaimed" = "reclaimed"; +"similar group" = "similar group"; +"similar groups" = "similar groups"; +"tmutil is not available on this Mac." = "tmutil is not available on this Mac."; diff --git a/PureMac/ru.lproj/Localizable.strings b/PureMac/ru.lproj/Localizable.strings index e51435a..ea8df3e 100644 --- a/PureMac/ru.lproj/Localizable.strings +++ b/PureMac/ru.lproj/Localizable.strings @@ -460,3 +460,410 @@ /* Simulator runtimes */ "Simulator runtime" = "Среда выполнения симулятора"; + +/* Current dashboard, tools, and cleanup review — English fallback until translated */ +"\nAnd %lld more." = "\nAnd %lld more."; +"%@ %@ to %@" = "%@ %@ to %@"; +"%@ available" = "%@ available"; +"%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again." = "%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again."; +"%@ did not finish within the allowed time." = "%@ did not finish within the allowed time."; +"%@ exited with status %d%@" = "%@ exited with status %d%@"; +"%@ files inspected" = "%@ files inspected"; +"%@ found across %lld categories." = "%@ found across %lld categories."; +"%@ found before the scan stopped. Results may be incomplete." = "%@ found before the scan stopped. Results may be incomplete."; +"%@ of %@" = "%@ of %@"; +"%@ of %@ candidates · %@ verified" = "%@ of %@ candidates · %@ verified"; +"%@ reviewable" = "%@ reviewable"; +"%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone." = "%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone."; +"%@ will move to Trash" = "%@ will move to Trash"; +"%lld analyzed" = "%lld analyzed"; +"%lld apps selected" = "%lld apps selected"; +"%lld areas" = "%lld areas"; +"%lld compared" = "%lld compared"; +"%lld exact copies · %@ each" = "%lld exact copies · %@ each"; +"%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access." = "%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access."; +"%lld file(s) could not be removed. Check that the items still exist and are not in use." = "%lld file(s) could not be removed. Check that the items still exist and are not in use."; +"%lld files totaling %@ were moved. Every protected copy remains in place." = "%lld files totaling %@ were moved. Every protected copy remains in place."; +"%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place." = "%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place."; +"%lld files · %lld folders" = "%lld files · %lld folders"; +"%lld folders" = "%lld folders"; +"%lld found" = "%lld found"; +"%lld inaccessible" = "%lld inaccessible"; +"%lld items · %@ found" = "%lld items · %@ found"; +"%lld matched" = "%lld matched"; +"%lld of %lld items shown" = "%lld of %lld items shown"; +"%lld percent" = "%lld percent"; +"%lld photos" = "%lld photos"; +"%lld photos · %@" = "%lld photos · %@"; +"%lld selected items will be permanently deleted. Review the list before continuing." = "%lld selected items will be permanently deleted. Review the list before continuing."; +"%lld selected · %@" = "%lld selected · %@"; +"%lld skipped" = "%lld skipped"; +"%lld unsafe or unavailable items were not scanned" = "%lld unsafe or unavailable items were not scanned"; +"%lld unsafe or unavailable items were skipped." = "%lld unsafe or unavailable items were skipped."; +"%lld updates available" = "%lld updates available"; +"%lld%% visual score" = "%lld%% visual score"; +", and %lld more" = ", and %lld more"; +"1 app selected" = "1 app selected"; +"1 update available" = "1 update available"; +"500 photo limit" = "500 photo limit"; +"A clear view of reclaimable storage and the tools that manage it." = "A clear view of reclaimable storage and the tools that manage it."; +"A selected file is missing or changed: %@" = "A selected file is missing or changed: %@"; +"A selected file no longer matches its kept copy: %@" = "A selected file no longer matches its kept copy: %@"; +"Access denied" = "Access denied"; +"Administrator removal failed: %@" = "Administrator removal failed: %@"; +"Always exclude from cleanup" = "Always exclude from cleanup"; +"Any age" = "Any age"; +"Any size" = "Any size"; +"App Updates" = "App Updates"; +"App and document packages are excluded: %@" = "App and document packages are excluded: %@"; +"App bundle missing" = "App bundle missing"; +"App downloads are checked before opening." = "App downloads are checked before opening."; +"App permissions" = "App permissions"; +"Apple Guide" = "Apple Guide"; +"Apple's built-in malware protection is installed. Update recency is managed by macOS." = "Apple's built-in malware protection is installed. Update recency is managed by macOS."; +"Application Firewall" = "Application Firewall"; +"Apps outside Homebrew" = "Apps outside Homebrew"; +"At login" = "At login"; +"Available" = "Available"; +"Available to review" = "Available to review"; +"Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions." = "Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions."; +"Browser privacy" = "Browser privacy"; +"Building visual signatures" = "Building visual signatures"; +"Camera" = "Camera"; +"Care" = "Care"; +"Changed during scan" = "Changed during scan"; +"Check Again" = "Check Again"; +"Check again" = "Check again"; +"Check built-in safeguards" = "Check built-in safeguards"; +"Check installed apps for new versions" = "Check installed apps for new versions"; +"Check installed cask apps" = "Check installed cask apps"; +"Checked %@. Unknown means the setting could not be confirmed." = "Checked %@. Unknown means the setting could not be confirmed."; +"Checking" = "Checking"; +"Checking Homebrew casks" = "Checking Homebrew casks"; +"Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation." = "Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation."; +"Checking your Mac. Nothing is removed during a scan." = "Checking your Mac. Nothing is removed during a scan."; +"Choose Another Folder" = "Choose Another Folder"; +"Choose Folder" = "Choose Folder"; +"Choose a Folder" = "Choose a Folder"; +"Choose a folder of photos" = "Choose a folder of photos"; +"Choose a folder to check for duplicate files" = "Choose a folder to check for duplicate files"; +"Choose a folder to inspect" = "Choose a folder to inspect"; +"Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically." = "Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically."; +"Choose a photo folder" = "Choose a photo folder"; +"Choose where to look" = "Choose where to look"; +"Chrome privacy guide" = "Chrome privacy guide"; +"Clean selected items" = "Clean selected items"; +"Cleaning selected items" = "Cleaning selected items"; +"Cleanup Exclusions" = "Cleanup Exclusions"; +"Cleanup finished and disk information is refreshing." = "Cleanup finished and disk information is refreshing."; +"Cleanup plan" = "Cleanup plan"; +"Clear Selection" = "Clear Selection"; +"Clear filters" = "Clear filters"; +"Clear search" = "Clear search"; +"Clear selection" = "Clear selection"; +"Cloud-only file" = "Cloud-only file"; +"Collapse duplicate group" = "Collapse duplicate group"; +"Compare visually similar photos" = "Compare visually similar photos"; +"Conditional keep alive" = "Conditional keep alive"; +"Copy path" = "Copy path"; +"Could not inspect %@" = "Could not inspect %@"; +"Could not list Time Machine snapshots" = "Could not list Time Machine snapshots"; +"Could not read" = "Could not read"; +"Could not read %@" = "Could not read %@"; +"Couldn't check for updates" = "Couldn't check for updates"; +"Current scan path" = "Current scan path"; +"Delete" = "Delete"; +"Delete Snapshot" = "Delete Snapshot"; +"Delete local snapshot?" = "Delete local snapshot?"; +"Deselect visible" = "Deselect visible"; +"Developer Cleanup" = "Developer Cleanup"; +"Disabled" = "Disabled"; +"Downloaded apps are not being assessed by Gatekeeper." = "Downloaded apps are not being assessed by Gatekeeper."; +"Drag to tilt" = "Drag to tilt"; +"Duplicate Finder" = "Duplicate Finder"; +"Duplicate groups" = "Duplicate groups"; +"Every %lld seconds" = "Every %lld seconds"; +"Every eligible file was checked." = "Every eligible file was checked."; +"Exact-match cleanup with a protected copy in every group" = "Exact-match cleanup with a protected copy in every group"; +"Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it." = "Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it."; +"Expand duplicate group" = "Expand duplicate group"; +"File" = "File"; +"FileVault" = "FileVault"; +"FileVault Settings" = "FileVault Settings"; +"Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them." = "Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them."; +"Filter cleanup files" = "Filter cleanup files"; +"Find a file or path" = "Find a file or path"; +"Find copies that are exactly the same" = "Find copies that are exactly the same"; +"Find space to reclaim." = "Find space to reclaim."; +"Find visually related shots in a folder and review them side by side." = "Find visually related shots in a folder and review them side by side."; +"Find what uses the most disk space" = "Find what uses the most disk space"; +"Finding local photos" = "Finding local photos"; +"Firewall Settings" = "Firewall Settings"; +"Focused utilities for storage, apps, and system maintenance" = "Focused utilities for storage, apps, and system maintenance"; +"Folder could not be inspected" = "Folder could not be inspected"; +"Full Disk Access is off" = "Full Disk Access is off"; +"Full access" = "Full access"; +"Gatekeeper" = "Gatekeeper"; +"Group %lld" = "Group %lld"; +"Grouping similar shots" = "Grouping similar shots"; +"Hard-linked copy" = "Hard-linked copy"; +"Homebrew apps are up to date" = "Homebrew apps are up to date"; +"Homebrew did not finish before the operation timed out." = "Homebrew did not finish before the operation timed out."; +"Homebrew finished, but %lld selected apps still report updates." = "Homebrew finished, but %lld selected apps still report updates."; +"Homebrew finished, but 1 selected app still reports an update." = "Homebrew finished, but 1 selected app still reports an update."; +"Homebrew finished. Check again to verify installed versions." = "Homebrew finished. Check again to verify installed versions."; +"Homebrew not found" = "Homebrew not found"; +"Homebrew produced more output than PureMac could safely retain." = "Homebrew produced more output than PureMac could safely retain."; +"Homebrew returned an invalid cask identifier: %@" = "Homebrew returned an invalid cask identifier: %@"; +"Homebrew returned update information PureMac could not read." = "Homebrew returned update information PureMac could not read."; +"Homebrew updated the %lld selected apps." = "Homebrew updated the %lld selected apps."; +"Homebrew updated the selected app." = "Homebrew updated the selected app."; +"Homebrew was not found in a standard installation location." = "Homebrew was not found in a standard installation location."; +"Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process." = "Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process."; +"Includes %lld selected items hidden by filters." = "Includes %lld selected items hidden by filters."; +"Incoming network connections are filtered." = "Incoming network connections are filtered."; +"Inspect" = "Inspect"; +"Inspect a folder by allocated disk space. Your files are never changed." = "Inspect a folder by allocated disk space. Your files are never changed."; +"Inspect memory and background activity" = "Inspect memory and background activity"; +"Inspect startup items and local snapshots again" = "Inspect startup items and local snapshots again"; +"Inspected %@ files in %@. %@" = "Inspected %@ files in %@. %@"; +"Inspecting startup items and local snapshots…" = "Inspecting startup items and local snapshots…"; +"Inspection stopped" = "Inspection stopped"; +"Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels." = "Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels."; +"Installed" = "Installed"; +"Installed %@" = "Installed %@"; +"Keep" = "Keep"; +"Keep PureMac open until this pass finishes." = "Keep PureMac open until this pass finishes."; +"Keep alive" = "Keep alive"; +"Largest first" = "Largest first"; +"Largest items" = "Largest items"; +"Last activity: %@" = "Last activity: %@"; +"Last checked" = "Last checked"; +"Launch agents and daemons installed outside macOS system folders" = "Launch agents and daemons installed outside macOS system folders"; +"Leftovers" = "Leftovers"; +"Live" = "Live"; +"Live resources" = "Live resources"; +"Local and private" = "Local and private"; +"Local files" = "Local files"; +"Local snapshot" = "Local snapshot"; +"Local snapshots" = "Local snapshots"; +"Location" = "Location"; +"Login Items Settings" = "Login Items Settings"; +"Looking through files" = "Looking through files"; +"Mac storage" = "Mac storage"; +"Managed cleanup action" = "Managed cleanup action"; +"Matching files" = "Matching files"; +"Measuring allocated space" = "Measuring allocated space"; +"Memory pressure use" = "Memory pressure use"; +"Microphone" = "Microphone"; +"Modified" = "Modified"; +"Move selected duplicates to Trash?" = "Move selected duplicates to Trash?"; +"Moved to Trash" = "Moved to Trash"; +"Name" = "Name"; +"Needs attention" = "Needs attention"; +"Network state" = "Network state"; +"No exact duplicates found" = "No exact duplicates found"; +"No excluded paths" = "No excluded paths"; +"No files found" = "No files found"; +"No files were changed. Rescan this folder when you are ready." = "No files were changed. Rescan this folder when you are ready."; +"No launchd items found" = "No launchd items found"; +"No local snapshots reported" = "No local snapshots reported"; +"No matching files" = "No matching files"; +"No measurable items" = "No measurable items"; +"No photos were changed. You can scan the folder again at any time." = "No photos were changed. You can scan the folder again at any time."; +"No reclaimable items were found before the scan stopped." = "No reclaimable items were found before the scan stopped."; +"No reclaimable items were found in the areas checked." = "No reclaimable items were found in the areas checked."; +"No results yet" = "No results yet"; +"No scan run yet" = "No scan run yet"; +"No similar groups found" = "No similar groups found"; +"No updates are currently available for the cask apps Homebrew manages." = "No updates are currently available for the cask apps Homebrew manages."; +"Nothing selected" = "Nothing selected"; +"Nothing to clean" = "Nothing to clean"; +"Nothing was moved" = "Nothing was moved"; +"Off" = "Off"; +"Older than 30 days" = "Older than 30 days"; +"Older than 6 months" = "Older than 6 months"; +"Older than a year" = "Older than a year"; +"Oldest first" = "Oldest first"; +"On" = "On"; +"Open Activity Monitor" = "Open Activity Monitor"; +"Open App Store Updates" = "Open App Store Updates"; +"Open Folder" = "Open Folder"; +"Open a category to review individual items" = "Open a category to review individual items"; +"Open folder" = "Open folder"; +"Open the App Store updates page. Direct-download apps may provide their own updater." = "Open the App Store updates page. Direct-download apps may provide their own updater."; +"Opens a folder picker" = "Opens a folder picker"; +"Over 1 GB" = "Over 1 GB"; +"Over 10 GB" = "Over 10 GB"; +"Over 100 MB" = "Over 100 MB"; +"Package" = "Package"; +"Package contents" = "Package contents"; +"Package · %lld files" = "Package · %lld files"; +"Partial result" = "Partial result"; +"Partial results" = "Partial results"; +"Performance" = "Performance"; +"Permanently delete %@?" = "Permanently delete %@?"; +"Permanently remove %lld items" = "Permanently remove %lld items"; +"Personal data or an optional cleanup action. Left unselected by default." = "Personal data or an optional cleanup action. Left unselected by default."; +"Photos could not be compared" = "Photos could not be compared"; +"Pinned" = "Pinned"; +"Preparing scan" = "Preparing scan"; +"Preparing the next area…" = "Preparing the next area…"; +"Preparing visual comparison" = "Preparing visual comparison"; +"Program not declared in this plist" = "Program not declared in this plist"; +"Protected caches and app containers will be skipped." = "Protected caches and app containers will be skipped."; +"Protected copy" = "Protected copy"; +"Protected system locations and processes are restricted." = "Protected system locations and processes are restricted."; +"Protection" = "Protection"; +"PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review." = "PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review."; +"PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed." = "PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed."; +"PureMac compares local image thumbnails without changing your photos." = "PureMac compares local image thumbnails without changing your photos."; +"PureMac could not confirm the local XProtect installation." = "PureMac could not confirm the local XProtect installation."; +"PureMac could not read this setting." = "PureMac could not read this setting."; +"PureMac did not find removable items in the selected scan areas." = "PureMac did not find removable items in the selected scan areas."; +"PureMac measures allocated disk space without changing files." = "PureMac measures allocated disk space without changing files."; +"PureMac reads the selected folder and does not change anything during a scan." = "PureMac reads the selected folder and does not change anything during a scan."; +"PureMac will ask Homebrew for available versions when you start the check." = "PureMac will ask Homebrew for available versions when you start the check."; +"PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing." = "PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing."; +"PureMac.app" = "PureMac.app"; +"Ready for protected locations" = "Ready for protected locations"; +"Refresh disk information" = "Refresh disk information"; +"Refreshing package data and comparing installed versions." = "Refreshing package data and comparing installed versions."; +"Refused to delete %lld protected item(s) (home credential directory or similar)." = "Refused to delete %lld protected item(s) (home credential directory or similar)."; +"Remove %lld files" = "Remove %lld files"; +"Remove %lld items" = "Remove %lld items"; +"Remove apps and their related files" = "Remove apps and their related files"; +"Remove selected app files?" = "Remove selected app files?"; +"Remove selected files?" = "Remove selected files?"; +"Remove selected leftovers?" = "Remove selected leftovers?"; +"Removing the items you selected." = "Removing the items you selected."; +"Reveal %@ in Finder" = "Reveal %@ in Finder"; +"Reveal plist in Finder" = "Reveal plist in Finder"; +"Reveal skipped item in Finder" = "Reveal skipped item in Finder"; +"Review and update apps installed as Homebrew casks." = "Review and update apps installed as Homebrew casks."; +"Review built-in privacy and safety checks" = "Review built-in privacy and safety checks"; +"Review matching files side by side" = "Review matching files side by side"; +"Review only" = "Review only"; +"Review removal" = "Review removal"; +"Review the groups before acting" = "Review the groups before acting"; +"Review the macOS safeguards that protect apps, disks, network access, and system files." = "Review the macOS safeguards that protect apps, disks, network access, and system files."; +"Review the results and choose exactly what to remove." = "Review the results and choose exactly what to remove."; +"Review which apps can access private data and hardware." = "Review which apps can access private data and hardware."; +"Run audit" = "Run audit"; +"Run the scan again when you are ready to check every area." = "Run the scan again when you are ready to check every area."; +"Safari privacy guide" = "Safari privacy guide"; +"Safari: Settings > Privacy" = "Safari: Settings > Privacy"; +"Sample limit reached" = "Sample limit reached"; +"Scan Another Folder" = "Scan Another Folder"; +"Scan Folder" = "Scan Folder"; +"Scan Photos" = "Scan Photos"; +"Scan again" = "Scan again"; +"Scan complete" = "Scan complete"; +"Scan could not finish" = "Scan could not finish"; +"Scan first, then review the exact files before removing anything." = "Scan first, then review the exact files before removing anything."; +"Scan stopped" = "Scan stopped"; +"Scan this Mac" = "Scan this Mac"; +"Scan this category" = "Scan this category"; +"Scanning %@…" = "Scanning %@…"; +"Scheduled" = "Scheduled"; +"Security Settings" = "Security Settings"; +"See current resource use and review what starts in the background." = "See current resource use and review what starts in the background."; +"See what is taking up space" = "See what is taking up space"; +"Select %@" = "Select %@"; +"Select a tool from the sidebar." = "Select a tool from the sidebar."; +"Select any folder to see which files and subfolders occupy the most disk space." = "Select any folder to see which files and subfolders occupy the most disk space."; +"Select apps to update" = "Select apps to update"; +"Select at least one app to update." = "Select at least one app to update."; +"Select copies" = "Select copies"; +"Select the apps Homebrew should upgrade." = "Select the apps Homebrew should upgrade."; +"Select the extra copies you want to review" = "Select the extra copies you want to review"; +"Select visible" = "Select visible"; +"Selected" = "Selected"; +"Selected cleanup items are permanently removed." = "Selected cleanup items are permanently removed."; +"Share of scanned space" = "Share of scanned space"; +"Shares storage with %@" = "Shares storage with %@"; +"Show %@ in Finder" = "Show %@ in Finder"; +"Show in Finder" = "Show in Finder"; +"Shows a confirmation before moving the selected copies" = "Shows a confirmation before moving the selected copies"; +"Similar Photos" = "Similar Photos"; +"Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality." = "Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality."; +"Size unavailable" = "Size unavailable"; +"Skipped items" = "Skipped items"; +"Smallest first" = "Smallest first"; +"Snapshot could not be deleted" = "Snapshot could not be deleted"; +"Software Update" = "Software Update"; +"Some contents were skipped or inaccessible" = "Some contents were skipped or inaccessible"; +"Some files were not moved" = "Some files were not moved"; +"Some information could not be read (%lld)" = "Some information could not be read (%lld)"; +"Some items need attention" = "Some items need attention"; +"Some locations are unavailable" = "Some locations are unavailable"; +"Some protected locations are unavailable. Full Disk Access allows a more complete scan." = "Some protected locations are unavailable. Full Disk Access allows a more complete scan."; +"Some selected files" = "Some selected files"; +"Sort" = "Sort"; +"Space Explorer" = "Space Explorer"; +"Startup and background items" = "Startup and background items"; +"Stop" = "Stop"; +"Stop scan" = "Stop scan"; +"Stopped" = "Stopped"; +"Stopping keeps the results found so far." = "Stopping keeps the results found so far."; +"Stops scanning without changing any files" = "Stops scanning without changing any files"; +"Suggested groups" = "Suggested groups"; +"Symbolic link" = "Symbolic link"; +"Symbolic links and cloud-only items are excluded." = "Symbolic links and cloud-only items are excluded."; +"Symbolic links cannot be scanned: %@" = "Symbolic links cannot be scanned: %@"; +"Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted." = "Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted."; +"System Integrity Protection" = "System Integrity Protection"; +"System Integrity Protection is turned off." = "System Integrity Protection is turned off."; +"System daemon" = "System daemon"; +"System update" = "System update"; +"System-wide agent" = "System-wide agent"; +"The analyzed photos did not meet PureMac's visual similarity threshold." = "The analyzed photos did not meet PureMac's visual similarity threshold."; +"The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan." = "The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan."; +"The check timed out." = "The check timed out."; +"The copy marked Keep is missing or changed: %@" = "The copy marked Keep is missing or changed: %@"; +"The inspected user and third-party launch folders are empty." = "The inspected user and third-party launch folders are empty."; +"The launch item is not a property-list dictionary." = "The launch item is not a property-list dictionary."; +"The macOS application firewall is turned off." = "The macOS application firewall is turned off."; +"The protected copy cannot be moved to Trash: %@" = "The protected copy cannot be moved to Trash: %@"; +"The scan stopped. Available results are ready to review." = "The scan stopped. Available results are ready to review."; +"The selected folder cannot be scanned: %@" = "The selected folder cannot be scanned: %@"; +"The selected folder could not be read: %@" = "The selected folder could not be read: %@"; +"The selected folder is stored in the cloud and has not been downloaded: %@" = "The selected folder is stored in the cloud and has not been downloaded: %@"; +"The selected item is not a folder: %@" = "The selected item is not a folder: %@"; +"The startup disk is encrypted with FileVault." = "The startup disk is encrypted with FileVault."; +"The startup disk is not encrypted with FileVault." = "The startup disk is not encrypted with FileVault."; +"The system returned an unrecognized status." = "The system returned an unrecognized status."; +"There are no cleanup items in this category." = "There are no cleanup items in this category."; +"This folder is empty or its contents were excluded from the scan." = "This folder is empty or its contents were excluded from the scan."; +"This permanently removes %@. Its size is unknown, and the action cannot be undone." = "This permanently removes %@. Its size is unknown, and the action cannot be undone."; +"This permanently removes the selected Time Machine snapshot." = "This permanently removes the selected Time Machine snapshot."; +"This snapshot does not have a verified Time Machine timestamp." = "This snapshot does not have a verified Time Machine timestamp."; +"Time Machine" = "Time Machine"; +"Time Machine Settings" = "Time Machine Settings"; +"Time Machine did not report any snapshots for the startup disk." = "Time Machine did not report any snapshots for the startup disk."; +"Time Machine snapshots are unavailable" = "Time Machine snapshots are unavailable"; +"Time Machine snapshots can be reviewed and removed individually" = "Time Machine snapshots can be reviewed and removed individually"; +"Tools" = "Tools"; +"Try Again" = "Try Again"; +"Try another name, size, or date range." = "Try another name, size, or date range."; +"Uninstaller" = "Uninstaller"; +"Unknown" = "Unknown"; +"Unknown error" = "Unknown error"; +"Updates from Homebrew" = "Updates from Homebrew"; +"Updating…" = "Updating…"; +"Upgrade %lld Apps" = "Upgrade %lld Apps"; +"Upgrade 1 App" = "Upgrade 1 App"; +"Upgrade selected apps?" = "Upgrade selected apps?"; +"User agent" = "User agent"; +"Verifying possible matches" = "Verifying possible matches"; +"Watches folders" = "Watches folders"; +"Watches paths" = "Watches paths"; +"XProtect" = "XProtect"; +"allocated in this folder" = "allocated in this folder"; +"definitions %@" = "definitions %@"; +"engine %@" = "engine %@"; +"macOS does not report reliable per-snapshot sizes in this listing." = "macOS does not report reliable per-snapshot sizes in this listing."; +"reclaimed" = "reclaimed"; +"similar group" = "similar group"; +"similar groups" = "similar groups"; +"tmutil is not available on this Mac." = "tmutil is not available on this Mac."; diff --git a/PureMac/uk.lproj/Localizable.strings b/PureMac/uk.lproj/Localizable.strings index 3647f7d..d072188 100644 --- a/PureMac/uk.lproj/Localizable.strings +++ b/PureMac/uk.lproj/Localizable.strings @@ -460,3 +460,410 @@ /* Simulator runtimes */ "Simulator runtime" = "Середовище виконання симулятора"; + +/* Current dashboard, tools, and cleanup review — English fallback until translated */ +"\nAnd %lld more." = "\nAnd %lld more."; +"%@ %@ to %@" = "%@ %@ to %@"; +"%@ available" = "%@ available"; +"%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again." = "%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again."; +"%@ did not finish within the allowed time." = "%@ did not finish within the allowed time."; +"%@ exited with status %d%@" = "%@ exited with status %d%@"; +"%@ files inspected" = "%@ files inspected"; +"%@ found across %lld categories." = "%@ found across %lld categories."; +"%@ found before the scan stopped. Results may be incomplete." = "%@ found before the scan stopped. Results may be incomplete."; +"%@ of %@" = "%@ of %@"; +"%@ of %@ candidates · %@ verified" = "%@ of %@ candidates · %@ verified"; +"%@ reviewable" = "%@ reviewable"; +"%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone." = "%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone."; +"%@ will move to Trash" = "%@ will move to Trash"; +"%lld analyzed" = "%lld analyzed"; +"%lld apps selected" = "%lld apps selected"; +"%lld areas" = "%lld areas"; +"%lld compared" = "%lld compared"; +"%lld exact copies · %@ each" = "%lld exact copies · %@ each"; +"%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access." = "%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access."; +"%lld file(s) could not be removed. Check that the items still exist and are not in use." = "%lld file(s) could not be removed. Check that the items still exist and are not in use."; +"%lld files totaling %@ were moved. Every protected copy remains in place." = "%lld files totaling %@ were moved. Every protected copy remains in place."; +"%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place." = "%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place."; +"%lld files · %lld folders" = "%lld files · %lld folders"; +"%lld folders" = "%lld folders"; +"%lld found" = "%lld found"; +"%lld inaccessible" = "%lld inaccessible"; +"%lld items · %@ found" = "%lld items · %@ found"; +"%lld matched" = "%lld matched"; +"%lld of %lld items shown" = "%lld of %lld items shown"; +"%lld percent" = "%lld percent"; +"%lld photos" = "%lld photos"; +"%lld photos · %@" = "%lld photos · %@"; +"%lld selected items will be permanently deleted. Review the list before continuing." = "%lld selected items will be permanently deleted. Review the list before continuing."; +"%lld selected · %@" = "%lld selected · %@"; +"%lld skipped" = "%lld skipped"; +"%lld unsafe or unavailable items were not scanned" = "%lld unsafe or unavailable items were not scanned"; +"%lld unsafe or unavailable items were skipped." = "%lld unsafe or unavailable items were skipped."; +"%lld updates available" = "%lld updates available"; +"%lld%% visual score" = "%lld%% visual score"; +", and %lld more" = ", and %lld more"; +"1 app selected" = "1 app selected"; +"1 update available" = "1 update available"; +"500 photo limit" = "500 photo limit"; +"A clear view of reclaimable storage and the tools that manage it." = "A clear view of reclaimable storage and the tools that manage it."; +"A selected file is missing or changed: %@" = "A selected file is missing or changed: %@"; +"A selected file no longer matches its kept copy: %@" = "A selected file no longer matches its kept copy: %@"; +"Access denied" = "Access denied"; +"Administrator removal failed: %@" = "Administrator removal failed: %@"; +"Always exclude from cleanup" = "Always exclude from cleanup"; +"Any age" = "Any age"; +"Any size" = "Any size"; +"App Updates" = "App Updates"; +"App and document packages are excluded: %@" = "App and document packages are excluded: %@"; +"App bundle missing" = "App bundle missing"; +"App downloads are checked before opening." = "App downloads are checked before opening."; +"App permissions" = "App permissions"; +"Apple Guide" = "Apple Guide"; +"Apple's built-in malware protection is installed. Update recency is managed by macOS." = "Apple's built-in malware protection is installed. Update recency is managed by macOS."; +"Application Firewall" = "Application Firewall"; +"Apps outside Homebrew" = "Apps outside Homebrew"; +"At login" = "At login"; +"Available" = "Available"; +"Available to review" = "Available to review"; +"Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions." = "Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions."; +"Browser privacy" = "Browser privacy"; +"Building visual signatures" = "Building visual signatures"; +"Camera" = "Camera"; +"Care" = "Care"; +"Changed during scan" = "Changed during scan"; +"Check Again" = "Check Again"; +"Check again" = "Check again"; +"Check built-in safeguards" = "Check built-in safeguards"; +"Check installed apps for new versions" = "Check installed apps for new versions"; +"Check installed cask apps" = "Check installed cask apps"; +"Checked %@. Unknown means the setting could not be confirmed." = "Checked %@. Unknown means the setting could not be confirmed."; +"Checking" = "Checking"; +"Checking Homebrew casks" = "Checking Homebrew casks"; +"Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation." = "Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation."; +"Checking your Mac. Nothing is removed during a scan." = "Checking your Mac. Nothing is removed during a scan."; +"Choose Another Folder" = "Choose Another Folder"; +"Choose Folder" = "Choose Folder"; +"Choose a Folder" = "Choose a Folder"; +"Choose a folder of photos" = "Choose a folder of photos"; +"Choose a folder to check for duplicate files" = "Choose a folder to check for duplicate files"; +"Choose a folder to inspect" = "Choose a folder to inspect"; +"Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically." = "Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically."; +"Choose a photo folder" = "Choose a photo folder"; +"Choose where to look" = "Choose where to look"; +"Chrome privacy guide" = "Chrome privacy guide"; +"Clean selected items" = "Clean selected items"; +"Cleaning selected items" = "Cleaning selected items"; +"Cleanup Exclusions" = "Cleanup Exclusions"; +"Cleanup finished and disk information is refreshing." = "Cleanup finished and disk information is refreshing."; +"Cleanup plan" = "Cleanup plan"; +"Clear Selection" = "Clear Selection"; +"Clear filters" = "Clear filters"; +"Clear search" = "Clear search"; +"Clear selection" = "Clear selection"; +"Cloud-only file" = "Cloud-only file"; +"Collapse duplicate group" = "Collapse duplicate group"; +"Compare visually similar photos" = "Compare visually similar photos"; +"Conditional keep alive" = "Conditional keep alive"; +"Copy path" = "Copy path"; +"Could not inspect %@" = "Could not inspect %@"; +"Could not list Time Machine snapshots" = "Could not list Time Machine snapshots"; +"Could not read" = "Could not read"; +"Could not read %@" = "Could not read %@"; +"Couldn't check for updates" = "Couldn't check for updates"; +"Current scan path" = "Current scan path"; +"Delete" = "Delete"; +"Delete Snapshot" = "Delete Snapshot"; +"Delete local snapshot?" = "Delete local snapshot?"; +"Deselect visible" = "Deselect visible"; +"Developer Cleanup" = "Developer Cleanup"; +"Disabled" = "Disabled"; +"Downloaded apps are not being assessed by Gatekeeper." = "Downloaded apps are not being assessed by Gatekeeper."; +"Drag to tilt" = "Drag to tilt"; +"Duplicate Finder" = "Duplicate Finder"; +"Duplicate groups" = "Duplicate groups"; +"Every %lld seconds" = "Every %lld seconds"; +"Every eligible file was checked." = "Every eligible file was checked."; +"Exact-match cleanup with a protected copy in every group" = "Exact-match cleanup with a protected copy in every group"; +"Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it." = "Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it."; +"Expand duplicate group" = "Expand duplicate group"; +"File" = "File"; +"FileVault" = "FileVault"; +"FileVault Settings" = "FileVault Settings"; +"Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them." = "Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them."; +"Filter cleanup files" = "Filter cleanup files"; +"Find a file or path" = "Find a file or path"; +"Find copies that are exactly the same" = "Find copies that are exactly the same"; +"Find space to reclaim." = "Find space to reclaim."; +"Find visually related shots in a folder and review them side by side." = "Find visually related shots in a folder and review them side by side."; +"Find what uses the most disk space" = "Find what uses the most disk space"; +"Finding local photos" = "Finding local photos"; +"Firewall Settings" = "Firewall Settings"; +"Focused utilities for storage, apps, and system maintenance" = "Focused utilities for storage, apps, and system maintenance"; +"Folder could not be inspected" = "Folder could not be inspected"; +"Full Disk Access is off" = "Full Disk Access is off"; +"Full access" = "Full access"; +"Gatekeeper" = "Gatekeeper"; +"Group %lld" = "Group %lld"; +"Grouping similar shots" = "Grouping similar shots"; +"Hard-linked copy" = "Hard-linked copy"; +"Homebrew apps are up to date" = "Homebrew apps are up to date"; +"Homebrew did not finish before the operation timed out." = "Homebrew did not finish before the operation timed out."; +"Homebrew finished, but %lld selected apps still report updates." = "Homebrew finished, but %lld selected apps still report updates."; +"Homebrew finished, but 1 selected app still reports an update." = "Homebrew finished, but 1 selected app still reports an update."; +"Homebrew finished. Check again to verify installed versions." = "Homebrew finished. Check again to verify installed versions."; +"Homebrew not found" = "Homebrew not found"; +"Homebrew produced more output than PureMac could safely retain." = "Homebrew produced more output than PureMac could safely retain."; +"Homebrew returned an invalid cask identifier: %@" = "Homebrew returned an invalid cask identifier: %@"; +"Homebrew returned update information PureMac could not read." = "Homebrew returned update information PureMac could not read."; +"Homebrew updated the %lld selected apps." = "Homebrew updated the %lld selected apps."; +"Homebrew updated the selected app." = "Homebrew updated the selected app."; +"Homebrew was not found in a standard installation location." = "Homebrew was not found in a standard installation location."; +"Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process." = "Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process."; +"Includes %lld selected items hidden by filters." = "Includes %lld selected items hidden by filters."; +"Incoming network connections are filtered." = "Incoming network connections are filtered."; +"Inspect" = "Inspect"; +"Inspect a folder by allocated disk space. Your files are never changed." = "Inspect a folder by allocated disk space. Your files are never changed."; +"Inspect memory and background activity" = "Inspect memory and background activity"; +"Inspect startup items and local snapshots again" = "Inspect startup items and local snapshots again"; +"Inspected %@ files in %@. %@" = "Inspected %@ files in %@. %@"; +"Inspecting startup items and local snapshots…" = "Inspecting startup items and local snapshots…"; +"Inspection stopped" = "Inspection stopped"; +"Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels." = "Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels."; +"Installed" = "Installed"; +"Installed %@" = "Installed %@"; +"Keep" = "Keep"; +"Keep PureMac open until this pass finishes." = "Keep PureMac open until this pass finishes."; +"Keep alive" = "Keep alive"; +"Largest first" = "Largest first"; +"Largest items" = "Largest items"; +"Last activity: %@" = "Last activity: %@"; +"Last checked" = "Last checked"; +"Launch agents and daemons installed outside macOS system folders" = "Launch agents and daemons installed outside macOS system folders"; +"Leftovers" = "Leftovers"; +"Live" = "Live"; +"Live resources" = "Live resources"; +"Local and private" = "Local and private"; +"Local files" = "Local files"; +"Local snapshot" = "Local snapshot"; +"Local snapshots" = "Local snapshots"; +"Location" = "Location"; +"Login Items Settings" = "Login Items Settings"; +"Looking through files" = "Looking through files"; +"Mac storage" = "Mac storage"; +"Managed cleanup action" = "Managed cleanup action"; +"Matching files" = "Matching files"; +"Measuring allocated space" = "Measuring allocated space"; +"Memory pressure use" = "Memory pressure use"; +"Microphone" = "Microphone"; +"Modified" = "Modified"; +"Move selected duplicates to Trash?" = "Move selected duplicates to Trash?"; +"Moved to Trash" = "Moved to Trash"; +"Name" = "Name"; +"Needs attention" = "Needs attention"; +"Network state" = "Network state"; +"No exact duplicates found" = "No exact duplicates found"; +"No excluded paths" = "No excluded paths"; +"No files found" = "No files found"; +"No files were changed. Rescan this folder when you are ready." = "No files were changed. Rescan this folder when you are ready."; +"No launchd items found" = "No launchd items found"; +"No local snapshots reported" = "No local snapshots reported"; +"No matching files" = "No matching files"; +"No measurable items" = "No measurable items"; +"No photos were changed. You can scan the folder again at any time." = "No photos were changed. You can scan the folder again at any time."; +"No reclaimable items were found before the scan stopped." = "No reclaimable items were found before the scan stopped."; +"No reclaimable items were found in the areas checked." = "No reclaimable items were found in the areas checked."; +"No results yet" = "No results yet"; +"No scan run yet" = "No scan run yet"; +"No similar groups found" = "No similar groups found"; +"No updates are currently available for the cask apps Homebrew manages." = "No updates are currently available for the cask apps Homebrew manages."; +"Nothing selected" = "Nothing selected"; +"Nothing to clean" = "Nothing to clean"; +"Nothing was moved" = "Nothing was moved"; +"Off" = "Off"; +"Older than 30 days" = "Older than 30 days"; +"Older than 6 months" = "Older than 6 months"; +"Older than a year" = "Older than a year"; +"Oldest first" = "Oldest first"; +"On" = "On"; +"Open Activity Monitor" = "Open Activity Monitor"; +"Open App Store Updates" = "Open App Store Updates"; +"Open Folder" = "Open Folder"; +"Open a category to review individual items" = "Open a category to review individual items"; +"Open folder" = "Open folder"; +"Open the App Store updates page. Direct-download apps may provide their own updater." = "Open the App Store updates page. Direct-download apps may provide their own updater."; +"Opens a folder picker" = "Opens a folder picker"; +"Over 1 GB" = "Over 1 GB"; +"Over 10 GB" = "Over 10 GB"; +"Over 100 MB" = "Over 100 MB"; +"Package" = "Package"; +"Package contents" = "Package contents"; +"Package · %lld files" = "Package · %lld files"; +"Partial result" = "Partial result"; +"Partial results" = "Partial results"; +"Performance" = "Performance"; +"Permanently delete %@?" = "Permanently delete %@?"; +"Permanently remove %lld items" = "Permanently remove %lld items"; +"Personal data or an optional cleanup action. Left unselected by default." = "Personal data or an optional cleanup action. Left unselected by default."; +"Photos could not be compared" = "Photos could not be compared"; +"Pinned" = "Pinned"; +"Preparing scan" = "Preparing scan"; +"Preparing the next area…" = "Preparing the next area…"; +"Preparing visual comparison" = "Preparing visual comparison"; +"Program not declared in this plist" = "Program not declared in this plist"; +"Protected caches and app containers will be skipped." = "Protected caches and app containers will be skipped."; +"Protected copy" = "Protected copy"; +"Protected system locations and processes are restricted." = "Protected system locations and processes are restricted."; +"Protection" = "Protection"; +"PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review." = "PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review."; +"PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed." = "PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed."; +"PureMac compares local image thumbnails without changing your photos." = "PureMac compares local image thumbnails without changing your photos."; +"PureMac could not confirm the local XProtect installation." = "PureMac could not confirm the local XProtect installation."; +"PureMac could not read this setting." = "PureMac could not read this setting."; +"PureMac did not find removable items in the selected scan areas." = "PureMac did not find removable items in the selected scan areas."; +"PureMac measures allocated disk space without changing files." = "PureMac measures allocated disk space without changing files."; +"PureMac reads the selected folder and does not change anything during a scan." = "PureMac reads the selected folder and does not change anything during a scan."; +"PureMac will ask Homebrew for available versions when you start the check." = "PureMac will ask Homebrew for available versions when you start the check."; +"PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing." = "PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing."; +"PureMac.app" = "PureMac.app"; +"Ready for protected locations" = "Ready for protected locations"; +"Refresh disk information" = "Refresh disk information"; +"Refreshing package data and comparing installed versions." = "Refreshing package data and comparing installed versions."; +"Refused to delete %lld protected item(s) (home credential directory or similar)." = "Refused to delete %lld protected item(s) (home credential directory or similar)."; +"Remove %lld files" = "Remove %lld files"; +"Remove %lld items" = "Remove %lld items"; +"Remove apps and their related files" = "Remove apps and their related files"; +"Remove selected app files?" = "Remove selected app files?"; +"Remove selected files?" = "Remove selected files?"; +"Remove selected leftovers?" = "Remove selected leftovers?"; +"Removing the items you selected." = "Removing the items you selected."; +"Reveal %@ in Finder" = "Reveal %@ in Finder"; +"Reveal plist in Finder" = "Reveal plist in Finder"; +"Reveal skipped item in Finder" = "Reveal skipped item in Finder"; +"Review and update apps installed as Homebrew casks." = "Review and update apps installed as Homebrew casks."; +"Review built-in privacy and safety checks" = "Review built-in privacy and safety checks"; +"Review matching files side by side" = "Review matching files side by side"; +"Review only" = "Review only"; +"Review removal" = "Review removal"; +"Review the groups before acting" = "Review the groups before acting"; +"Review the macOS safeguards that protect apps, disks, network access, and system files." = "Review the macOS safeguards that protect apps, disks, network access, and system files."; +"Review the results and choose exactly what to remove." = "Review the results and choose exactly what to remove."; +"Review which apps can access private data and hardware." = "Review which apps can access private data and hardware."; +"Run audit" = "Run audit"; +"Run the scan again when you are ready to check every area." = "Run the scan again when you are ready to check every area."; +"Safari privacy guide" = "Safari privacy guide"; +"Safari: Settings > Privacy" = "Safari: Settings > Privacy"; +"Sample limit reached" = "Sample limit reached"; +"Scan Another Folder" = "Scan Another Folder"; +"Scan Folder" = "Scan Folder"; +"Scan Photos" = "Scan Photos"; +"Scan again" = "Scan again"; +"Scan complete" = "Scan complete"; +"Scan could not finish" = "Scan could not finish"; +"Scan first, then review the exact files before removing anything." = "Scan first, then review the exact files before removing anything."; +"Scan stopped" = "Scan stopped"; +"Scan this Mac" = "Scan this Mac"; +"Scan this category" = "Scan this category"; +"Scanning %@…" = "Scanning %@…"; +"Scheduled" = "Scheduled"; +"Security Settings" = "Security Settings"; +"See current resource use and review what starts in the background." = "See current resource use and review what starts in the background."; +"See what is taking up space" = "See what is taking up space"; +"Select %@" = "Select %@"; +"Select a tool from the sidebar." = "Select a tool from the sidebar."; +"Select any folder to see which files and subfolders occupy the most disk space." = "Select any folder to see which files and subfolders occupy the most disk space."; +"Select apps to update" = "Select apps to update"; +"Select at least one app to update." = "Select at least one app to update."; +"Select copies" = "Select copies"; +"Select the apps Homebrew should upgrade." = "Select the apps Homebrew should upgrade."; +"Select the extra copies you want to review" = "Select the extra copies you want to review"; +"Select visible" = "Select visible"; +"Selected" = "Selected"; +"Selected cleanup items are permanently removed." = "Selected cleanup items are permanently removed."; +"Share of scanned space" = "Share of scanned space"; +"Shares storage with %@" = "Shares storage with %@"; +"Show %@ in Finder" = "Show %@ in Finder"; +"Show in Finder" = "Show in Finder"; +"Shows a confirmation before moving the selected copies" = "Shows a confirmation before moving the selected copies"; +"Similar Photos" = "Similar Photos"; +"Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality." = "Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality."; +"Size unavailable" = "Size unavailable"; +"Skipped items" = "Skipped items"; +"Smallest first" = "Smallest first"; +"Snapshot could not be deleted" = "Snapshot could not be deleted"; +"Software Update" = "Software Update"; +"Some contents were skipped or inaccessible" = "Some contents were skipped or inaccessible"; +"Some files were not moved" = "Some files were not moved"; +"Some information could not be read (%lld)" = "Some information could not be read (%lld)"; +"Some items need attention" = "Some items need attention"; +"Some locations are unavailable" = "Some locations are unavailable"; +"Some protected locations are unavailable. Full Disk Access allows a more complete scan." = "Some protected locations are unavailable. Full Disk Access allows a more complete scan."; +"Some selected files" = "Some selected files"; +"Sort" = "Sort"; +"Space Explorer" = "Space Explorer"; +"Startup and background items" = "Startup and background items"; +"Stop" = "Stop"; +"Stop scan" = "Stop scan"; +"Stopped" = "Stopped"; +"Stopping keeps the results found so far." = "Stopping keeps the results found so far."; +"Stops scanning without changing any files" = "Stops scanning without changing any files"; +"Suggested groups" = "Suggested groups"; +"Symbolic link" = "Symbolic link"; +"Symbolic links and cloud-only items are excluded." = "Symbolic links and cloud-only items are excluded."; +"Symbolic links cannot be scanned: %@" = "Symbolic links cannot be scanned: %@"; +"Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted." = "Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted."; +"System Integrity Protection" = "System Integrity Protection"; +"System Integrity Protection is turned off." = "System Integrity Protection is turned off."; +"System daemon" = "System daemon"; +"System update" = "System update"; +"System-wide agent" = "System-wide agent"; +"The analyzed photos did not meet PureMac's visual similarity threshold." = "The analyzed photos did not meet PureMac's visual similarity threshold."; +"The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan." = "The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan."; +"The check timed out." = "The check timed out."; +"The copy marked Keep is missing or changed: %@" = "The copy marked Keep is missing or changed: %@"; +"The inspected user and third-party launch folders are empty." = "The inspected user and third-party launch folders are empty."; +"The launch item is not a property-list dictionary." = "The launch item is not a property-list dictionary."; +"The macOS application firewall is turned off." = "The macOS application firewall is turned off."; +"The protected copy cannot be moved to Trash: %@" = "The protected copy cannot be moved to Trash: %@"; +"The scan stopped. Available results are ready to review." = "The scan stopped. Available results are ready to review."; +"The selected folder cannot be scanned: %@" = "The selected folder cannot be scanned: %@"; +"The selected folder could not be read: %@" = "The selected folder could not be read: %@"; +"The selected folder is stored in the cloud and has not been downloaded: %@" = "The selected folder is stored in the cloud and has not been downloaded: %@"; +"The selected item is not a folder: %@" = "The selected item is not a folder: %@"; +"The startup disk is encrypted with FileVault." = "The startup disk is encrypted with FileVault."; +"The startup disk is not encrypted with FileVault." = "The startup disk is not encrypted with FileVault."; +"The system returned an unrecognized status." = "The system returned an unrecognized status."; +"There are no cleanup items in this category." = "There are no cleanup items in this category."; +"This folder is empty or its contents were excluded from the scan." = "This folder is empty or its contents were excluded from the scan."; +"This permanently removes %@. Its size is unknown, and the action cannot be undone." = "This permanently removes %@. Its size is unknown, and the action cannot be undone."; +"This permanently removes the selected Time Machine snapshot." = "This permanently removes the selected Time Machine snapshot."; +"This snapshot does not have a verified Time Machine timestamp." = "This snapshot does not have a verified Time Machine timestamp."; +"Time Machine" = "Time Machine"; +"Time Machine Settings" = "Time Machine Settings"; +"Time Machine did not report any snapshots for the startup disk." = "Time Machine did not report any snapshots for the startup disk."; +"Time Machine snapshots are unavailable" = "Time Machine snapshots are unavailable"; +"Time Machine snapshots can be reviewed and removed individually" = "Time Machine snapshots can be reviewed and removed individually"; +"Tools" = "Tools"; +"Try Again" = "Try Again"; +"Try another name, size, or date range." = "Try another name, size, or date range."; +"Uninstaller" = "Uninstaller"; +"Unknown" = "Unknown"; +"Unknown error" = "Unknown error"; +"Updates from Homebrew" = "Updates from Homebrew"; +"Updating…" = "Updating…"; +"Upgrade %lld Apps" = "Upgrade %lld Apps"; +"Upgrade 1 App" = "Upgrade 1 App"; +"Upgrade selected apps?" = "Upgrade selected apps?"; +"User agent" = "User agent"; +"Verifying possible matches" = "Verifying possible matches"; +"Watches folders" = "Watches folders"; +"Watches paths" = "Watches paths"; +"XProtect" = "XProtect"; +"allocated in this folder" = "allocated in this folder"; +"definitions %@" = "definitions %@"; +"engine %@" = "engine %@"; +"macOS does not report reliable per-snapshot sizes in this listing." = "macOS does not report reliable per-snapshot sizes in this listing."; +"reclaimed" = "reclaimed"; +"similar group" = "similar group"; +"similar groups" = "similar groups"; +"tmutil is not available on this Mac." = "tmutil is not available on this Mac."; diff --git a/PureMac/zh-Hans.lproj/InfoPlist.strings b/PureMac/zh-Hans.lproj/InfoPlist.strings new file mode 100644 index 0000000..094d771 --- /dev/null +++ b/PureMac/zh-Hans.lproj/InfoPlist.strings @@ -0,0 +1,8 @@ +/* macOS permission prompts */ +"NSAppleEventsUsageDescription" = "PureMac 需要与访达交互,以显示所选文件。"; +"NSDesktopFolderUsageDescription" = "PureMac 需要访问桌面,以查找可清理文件和应用残留。"; +"NSDocumentsFolderUsageDescription" = "PureMac 需要访问文稿文件夹,以查找可清理文件和应用残留。"; +"NSDownloadsFolderUsageDescription" = "PureMac 需要访问下载文件夹,以查找可清理文件和应用残留。"; +"NSRemovableVolumesUsageDescription" = "PureMac 需要访问可移动磁盘,以扫描可清理的文件。"; +"NSSystemAdministrationUsageDescription" = "PureMac 需要管理员权限,以清理受保护的缓存和应用文件。"; +"NSHumanReadableCopyright" = "版权所有 © 2026,采用 MIT 许可证。"; diff --git a/PureMac/zh-Hans.lproj/Localizable.strings b/PureMac/zh-Hans.lproj/Localizable.strings index 1885a9f..5e3133f 100644 --- a/PureMac/zh-Hans.lproj/Localizable.strings +++ b/PureMac/zh-Hans.lproj/Localizable.strings @@ -4,21 +4,21 @@ "Cleanup" = "清理"; "Dashboard" = "仪表盘"; "Installed Apps" = "已安装的应用"; -"Orphaned Files" = "孤立文件"; +"Orphaned Files" = "应用残留"; "PureMac" = "PureMac"; "Ready to clean" = "可以清理"; "Limited access" = "访问受限"; -"Full Disk Access granted" = "已授予完整磁盘访问权限"; -"Grant FDA in Settings" = "在“设置”中授予完整磁盘访问"; +"Full Disk Access granted" = "已授予完全磁盘访问权限"; +"Grant FDA in Settings" = "在系统设置中授予权限"; "Select a category from the sidebar to get started." = "从侧边栏选择一个类别开始使用。"; /* FDA toast + clean error alert (MainWindow) */ -"Couldn't clean everything" = "无法清理全部"; +"Couldn't clean everything" = "部分项目未能清理"; "Open System Settings" = "打开“系统设置”"; "OK" = "好"; -"Full Disk Access required" = "需要完整磁盘访问权限"; -"macOS blocks PureMac from cleaning caches and uninstalling apps until you grant access." = "在你授予访问权限之前,macOS 会阻止 PureMac 清理缓存和卸载应用。"; -"Grant Access" = "授予访问"; +"Full Disk Access required" = "需要完全磁盘访问权限"; +"macOS blocks PureMac from cleaning caches and uninstalling apps until you grant access." = "授予权限后,PureMac 才能访问受保护的缓存和应用文件。"; +"Grant Access" = "授予权限"; /* Dashboard */ "Storage" = "存储"; @@ -27,7 +27,7 @@ "%lld%% used" = "已使用 %lld%%"; "Used" = "已用"; "Junk" = "垃圾"; -"Purgeable" = "可清理"; +"Purgeable" = "系统可回收"; "USED" = "已用"; "SCANNING" = "扫描中"; "Free Space" = "可用空间"; @@ -37,14 +37,14 @@ "Run a scan" = "运行扫描"; "across %lld categories" = "跨 %lld 个类别"; "installed" = "已安装"; -"APFS reclaimable" = "APFS 可回收"; +"APFS reclaimable" = "APFS 可回收空间"; "Suggested for you" = "推荐"; "Found so far" = "目前发现"; "By category" = "按类别"; "Category" = "类别"; "%@ is using %@" = "%@ 占用 %@"; -"Grant Full Disk Access for full results" = "授予完整磁盘访问以获得完整结果"; -"Without it, most caches and uninstall flows fail." = "没有它,大多数缓存清理和卸载流程都会失败。"; +"Grant Full Disk Access for full results" = "授予完全磁盘访问权限以获取完整结果"; +"Without it, most caches and uninstall flows fail." = "缺少权限时,部分缓存和应用文件可能无法处理。"; "Action" = "操作"; "Scanning your Mac" = "正在扫描你的 Mac"; "Currently in: %@" = "当前: %@"; @@ -115,11 +115,11 @@ "This will permanently delete this file. This action cannot be undone." = "这将永久删除此文件。此操作无法撤销。"; /* Orphans */ -"Scanning for orphaned files..." = "正在扫描孤立文件..."; -"No Orphaned Files" = "没有孤立文件"; +"Scanning for orphaned files..." = "正在查找应用残留…"; +"No Orphaned Files" = "未发现应用残留"; "No leftover files from uninstalled apps were found." = "未发现已卸载应用的残留文件。"; -"Scan for Orphans" = "扫描孤立文件"; -"Orphaned Files (%lld)" = "孤立文件 (%lld)"; +"Scan for Orphans" = "查找应用残留"; +"Orphaned Files (%lld)" = "应用残留(%lld 项)"; "Remove Selected (%lld)" = "删除所选 (%lld)"; "Some files could not be removed" = "部分文件无法删除"; "blocked by safety policy" = "已被安全策略阻止"; @@ -134,17 +134,17 @@ "Find junk files across your system" = "在系统中查找垃圾文件"; "App Uninstaller" = "应用卸载器"; "Remove apps and all their files" = "删除应用及其所有文件"; -"Orphan Finder" = "孤立文件查找"; +"Orphan Finder" = "残留查找"; "Find leftovers from deleted apps" = "查找已删除应用的残留"; -"Full Disk Access" = "完整磁盘访问"; -"PureMac needs Full Disk Access to uninstall apps, find leftover files, and clean protected caches." = "PureMac 需要完整磁盘访问以卸载应用、查找残留文件并清理受保护的缓存。"; +"Full Disk Access" = "完全磁盘访问权限"; +"PureMac needs Full Disk Access to uninstall apps, find leftover files, and clean protected caches." = "PureMac 需要完全磁盘访问权限以卸载应用、查找残留文件并清理受保护的缓存。"; "We'll guide you through the next steps." = "我们将引导你完成接下来的步骤。"; "In System Settings, do this:" = "在“系统设置”中执行以下操作:"; -"Privacy & Security → Full Disk Access" = "隐私与安全性 → 完整磁盘访问"; +"Privacy & Security → Full Disk Access" = "隐私与安全性 → 完全磁盘访问权限"; "Find **PureMac** and turn the toggle on" = "找到 **PureMac** 并打开开关"; "Authenticate with Touch ID or your password" = "使用触控 ID 或密码进行验证"; "Reopen Settings" = "重新打开“设置”"; -"PureMac isn't in the list — reveal it" = "PureMac 不在列表中 — 显示"; +"PureMac isn't in the list — reveal it" = "列表中没有 PureMac?在访达中显示"; "Reset permissions and re-prompt" = "重置权限并再次提示"; "Hide diagnostics" = "隐藏诊断"; "Show diagnostics" = "显示诊断"; @@ -169,7 +169,7 @@ /* Settings */ "General" = "通用"; -"Cleaning" = "清理"; +"Cleaning" = "正在清理"; "Schedule" = "计划"; "About" = "关于"; "Startup" = "启动"; @@ -226,7 +226,7 @@ "Mail Files" = "邮件文件"; "Trash Bins" = "废纸篓"; "Large & Old Files" = "大文件和旧文件"; -"Purgeable Space" = "可清理空间"; +"Purgeable Space" = "系统可回收空间"; "Xcode Junk" = "Xcode 垃圾"; "Brew Cache" = "Brew 缓存"; "Node Cache" = "Node 缓存"; @@ -243,7 +243,7 @@ "Files in your Trash" = "废纸篓中的文件"; "Files over 100 MB or older than 1 year" = "大于 100 MB 或超过 1 年的文件"; "APFS purgeable disk space" = "APFS 可清理磁盘空间"; -"Derived data, archives, and simulator runtimes" = "派生数据、归档和模拟器"; +"Derived data, archives, and simulator runtimes" = "构建数据、归档和模拟器运行时"; "Homebrew download cache" = "Homebrew 下载缓存"; "npm, yarn, and pnpm download caches" = "npm、yarn 和 pnpm 下载缓存"; "Docker images, containers, and build cache" = "Docker 镜像、容器和构建缓存"; @@ -298,14 +298,14 @@ "Couldn't remove %@%@. They may be in use or protected by macOS." = "无法删除 %@%@。它们可能正在使用或受 macOS 保护。"; " and %lld more" = " 还有 %lld 个"; "Access granted. Retrying…" = "已授予访问权限。正在重试…"; -"1-tap setup. We'll detect the change automatically." = "一键设置。我们将自动检测更改。"; +"1-tap setup. We'll detect the change automatically." = "前往系统设置授权,我们会自动检测权限变化。"; "Open Settings & reveal PureMac" = "打开“设置”并显示 PureMac"; -"We'll open both windows side-by-side." = "我们会并排打开两个窗口。"; +"We'll open both windows side-by-side." = "将同时打开系统设置和访达。"; "Turn on PureMac" = "开启 PureMac"; -"Toggle the row that appears." = "打开出现的那一行。"; +"Toggle the row that appears." = "打开 PureMac 对应的开关。"; "Authenticate" = "验证身份"; "Touch ID or password." = "Touch ID 或密码。"; -"We auto-retry — no need to come back." = "我们会自动重试 - 无需返回。"; +"We auto-retry — no need to come back." = "授权后会自动重试,无需手动返回。"; "Watching for permission change…" = "正在监视权限变更…"; "PureMac not in the list?" = "PureMac 不在列表中?"; "Hide help" = "隐藏帮助"; @@ -319,44 +319,44 @@ "Access granted" = "已授予访问权限"; "Retrying the operation now." = "正在重试此操作。"; "Skip for now" = "暂时跳过"; -"I granted it — retry" = "我已授予 - 重试"; +"I granted it — retry" = "已授权,重试"; /* Dashboard polish */ "Low space" = "空间不足"; "CLEANING" = "正在清理"; "Quick Setup" = "快速设置"; -"1-tap setup. We'll auto-retry what failed." = "一键设置。我们会自动重试失败的操作。"; +"1-tap setup. We'll auto-retry what failed." = "授权后会自动重试未完成的操作。"; "Fix permission" = "修复权限"; "Dismiss" = "忽略"; "Fix" = "修复"; "Set up" = "设置"; /* Onboarding v2 */ -"Reclaim your Mac" = "夺回你的 Mac"; -"Apple sells you small disks. We help you keep them clean." = "苹果卖给你小硬盘。我们帮你保持整洁。"; -"Free. Open source. MIT licensed." = "免费。开源。MIT 许可。"; -"What's inside" = "里面有什么"; -"Three things, done well." = "三件事,做到极致。"; +"Reclaim your Mac" = "为你的 Mac 腾出空间"; +"Apple sells you small disks. We help you keep them clean." = "存储空间有限,让每一份空间都用在需要的地方。"; +"Free. Open source. MIT licensed." = "免费开源,采用 MIT 许可证。"; +"What's inside" = "主要功能"; +"Three things, done well." = "专注做好三件事。"; "Find caches, logs, broken installs, and the AI-app history hiding in your library." = "找出缓存、日志、损坏的安装文件,以及隐藏在资源库中的 AI 应用历史。"; -"Drag an app, see every file it dropped, remove all of it. No leftovers." = "拖入一个 App,看到它留下的每个文件,全部清除。不留残余。"; -"Surfaces files that outlived the apps that created them." = "显示比创建它们的应用更长寿的文件。"; -"One permission, then we're done" = "一个权限,就够了"; +"Drag an app, see every file it dropped, remove all of it. No leftovers." = "拖入应用,查看关联文件,确认后一起清理。"; +"Surfaces files that outlived the apps that created them." = "查找应用卸载后留下的文件。"; +"One permission, then we're done" = "再授予一项权限即可"; "Permission granted" = "权限已授予"; "PureMac can now reach the locations macOS protects by default." = "PureMac 现在可以访问 macOS 默认保护的位置。"; -"macOS hides certain folders from every app until you say otherwise. We need them to find caches and uninstall cleanly." = "在你允许之前,macOS 对所有 App 隐藏某些文件夹。我们需要它们来查找缓存并干净地卸载。"; -"All set — moving you to the next step." = "全部就绪 - 进入下一步。"; -"Reveal app again" = "再次显示 App"; +"macOS hides certain folders from every app until you say otherwise. We need them to find caches and uninstall cleanly." = "macOS 会限制应用访问部分文件夹。授予权限后,PureMac 才能检查其中的缓存和应用关联文件。"; +"All set — moving you to the next step." = "已准备就绪,正在进入下一步。"; +"Reveal app again" = "再次在访达中显示"; "Reset permissions" = "重置权限"; "You're ready" = "准备就绪"; -"Ready when you are" = "随时为你准备好"; -"Hit Start to run your first Smart Scan." = "按开始运行你的第一次智能扫描。"; +"Ready when you are" = "随时可以开始"; +"Hit Start to run your first Smart Scan." = "点击“开始”,进行首次智能扫描。"; "Skip" = "跳过"; "Start" = "开始"; "Continue" = "继续"; /* Drag handle */ "Drag to the Settings list" = "拖到设置列表"; -"Drag this icon into the Full Disk Access list in System Settings." = "将此图标拖入系统设置中的完整磁盘访问列表。"; +"Drag this icon into the Full Disk Access list in System Settings." = "将此图标拖入系统设置中的完全磁盘访问权限列表。"; "Tip: drag the icon on the left straight into the list." = "提示:把左侧图标直接拖入列表。"; "Or drag the icon on the left straight into Settings." = "或者把左侧图标直接拖入设置。"; @@ -378,7 +378,7 @@ /* v2.8.1: purgeable honesty */ "Managed by macOS" = "由 macOS 管理"; -"Reserved by macOS - freed automatically when space is needed" = "由 macOS 预留 - 需要空间时自动释放"; +"Reserved by macOS - freed automatically when space is needed" = "由 macOS 管理,在需要空间时自动释放"; /* v2.8.2: large-file folder exclusions (#121) */ "Excluded Folders" = "排除的文件夹"; @@ -389,9 +389,9 @@ /* v2.8.2: orphan ignore list (#114) */ "Always Ignore" = "始终忽略"; "Ignore Selected (%lld)" = "忽略所选 (%lld)"; -"Ignored orphans: %lld" = "已忽略的孤立文件:%lld"; +"Ignored orphans: %lld" = "已忽略的应用残留:%lld"; "Forget Ignored" = "清除已忽略"; -"Ignored files won't appear in future orphan scans." = "已忽略的文件不会出现在以后的孤立文件扫描中。"; +"Ignored files won't appear in future orphan scans." = "已忽略的文件不会出现在以后的应用残留扫描中。"; /* v2.8.3: menu-bar system monitor */ "System Monitor" = "系统监视器"; @@ -406,57 +406,464 @@ /* Finder Service */ "Select an application (.app) to uninstall." = "请选择要卸载的应用程序(.app)。"; -/* Smart Care dashboard hero + Care areas — English fallback, pending translation */ -"%@ free" = "%@ free"; -"%lld checks" = "%lld checks"; -"%lld items found" = "%lld items found"; -"%lld selected" = "%lld selected"; -"%lld-POINT LOCAL SCAN" = "%lld-POINT LOCAL SCAN"; -"%lld/%lld checked" = "%lld/%lld checked"; -"ALL CLEAR" = "ALL CLEAR"; -"Advanced Tools" = "Advanced Tools"; -"All clear" = "All clear"; -"App leftovers to inspect" = "App leftovers to inspect"; -"Appearance" = "Appearance"; -"Caches, mail, trash, and large files" = "Caches, mail, trash, and large files"; -"Care areas" = "Care areas"; -"Checks every cleanup category without deleting files" = "Checks every cleanup category without deleting files"; -"Choose what to keep, then clean everything in one controlled pass." = "Choose what to keep, then clean everything in one controlled pass."; -"Cleaning safely…" = "Cleaning safely…"; -"Cleanup complete" = "Cleanup complete"; -"Cleanup complete. Your storage summary is refreshing." = "Cleanup complete. Your storage summary is refreshing."; -"Clear" = "Clear"; -"Complete" = "Complete"; -"Developer" = "Developer"; -"Installed apps" = "Installed apps"; -"LOW SPACE" = "LOW SPACE"; -"Last clean: %@" = "Last clean: %@"; -"Local" = "Local"; -"Make room.\nKeep control." = "Make room.\nKeep control."; -"No cleanup run yet" = "No cleanup run yet"; -"No known leftovers" = "No known leftovers"; -"No removable junk was found in the areas PureMac checked." = "No removable junk was found in the areas PureMac checked."; -"One scan checks every cleanup tool and prepares a plan for your review." = "One scan checks every cleanup tool and prepares a plan for your review."; -"Private" = "Private"; -"PureMac builds a reviewable cleanup plan on your Mac. Nothing is removed until you approve it." = "PureMac builds a reviewable cleanup plan on your Mac. Nothing is removed until you approve it."; -"PureMac is checking your Mac without removing anything." = "PureMac is checking your Mac without removing anything."; -"Ready" = "Ready"; -"Ready for review" = "Ready for review"; -"Ready to reclaim" = "Ready to reclaim"; -"Review" = "Review"; -"Review ready" = "Review ready"; -"Review scan results" = "Review scan results"; -"Review what was found" = "Review what was found"; -"Reviewable" = "Reviewable"; -"SCAN COMPLETE" = "SCAN COMPLETE"; -"Scan My Mac" = "Scan My Mac"; -"Scan first.\nDecide what goes." = "Scan first.\nDecide what goes."; -"Scanning" = "Scanning"; -"Selected items are being removed safely." = "Selected items are being removed safely."; -"Smart Care" = "Smart Care"; -"Twelve-layer storage inspection model" = "Twelve-layer storage inspection model"; -"Xcode and package tools" = "Xcode and package tools"; -"Your Mac is in good shape." = "Your Mac is in good shape."; +/* Smart Care dashboard hero + Care areas */ +"%@ free" = "可用 %@"; +"%lld checks" = "%lld 项检查"; +"%lld items found" = "发现 %lld 个项目"; +"%lld selected" = "已选择 %lld 项"; +"%lld-POINT LOCAL SCAN" = "%lld 项本地扫描"; +"%lld/%lld checked" = "已检查 %lld / %lld 项"; +"ALL CLEAR" = "无需清理"; +"Advanced Tools" = "高级工具"; +"All clear" = "无需清理"; +"App leftovers to inspect" = "待检查的应用残留"; +"Appearance" = "外观"; +"Caches, mail, trash, and large files" = "缓存、邮件、废纸篓和大文件"; +"Care areas" = "检查范围"; +"Checks every cleanup category without deleting files" = "扫描所有清理类别,扫描期间不会删除文件"; +"Choose what to keep, then clean everything in one controlled pass." = "确认要保留的内容,再统一清理所选项目。"; +"Cleaning safely…" = "正在清理…"; +"Cleanup complete" = "清理完成"; +"Cleanup complete. Your storage summary is refreshing." = "清理已完成,正在更新存储信息。"; +"Clear" = "清除"; +"Complete" = "已完成"; +"Developer" = "开发工具"; +"Installed apps" = "已安装的应用"; +"LOW SPACE" = "空间不足"; +"Last clean: %@" = "上次清理:%@"; +"Local" = "本地处理"; +"Make room.\nKeep control." = "释放空间,\n由你做主。"; +"No cleanup run yet" = "尚未清理"; +"No known leftovers" = "未发现应用残留"; +"No removable junk was found in the areas PureMac checked." = "在已检查的位置中未发现可清理的文件。"; +"One scan checks every cleanup tool and prepares a plan for your review." = "一次扫描所有清理类别,生成清理方案供你确认。"; +"Private" = "保护隐私"; +"PureMac builds a reviewable cleanup plan on your Mac. Nothing is removed until you approve it." = "PureMac 在本机生成清理方案,确认后才会删除文件。"; +"PureMac is checking your Mac without removing anything." = "PureMac 正在检查你的 Mac,扫描期间不会删除任何内容。"; +"Ready" = "已就绪"; +"Ready for review" = "待确认"; +"Ready to reclaim" = "可释放空间"; +"Review" = "查看"; +"Review ready" = "待确认"; +"Review scan results" = "查看扫描结果"; +"Review what was found" = "查看发现的项目"; +"Reviewable" = "清理前确认"; +"SCAN COMPLETE" = "扫描完成"; +"Scan My Mac" = "扫描此 Mac"; +"Scan first.\nDecide what goes." = "先扫描,\n再决定清理什么。"; +"Scanning" = "正在扫描"; +"Selected items are being removed safely." = "正在删除所选项目。"; +"Smart Care" = "智能清理"; +"Twelve-layer storage inspection model" = "十二层存储检查"; +"Xcode and package tools" = "Xcode 和软件包管理工具"; +"Your Mac is in good shape." = "你的 Mac 状态良好。"; /* Simulator runtimes */ "Simulator runtime" = "模拟器运行时"; + +/* Current dashboard, tools, and cleanup review */ +"\nAnd %lld more." = "\n另有 %lld 项。"; +"%@ %@ to %@" = "%@:%@ → %@"; +"%@ available" = "可用 %@"; +"%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again." = "由于 PureMac 没有完全磁盘访问权限,无法删除%@。请在系统设置中授予权限后重试。"; +"%@ did not finish within the allowed time." = "%@ 未能在规定时间内完成。"; +"%@ exited with status %d%@" = "%@ 已退出,状态码为 %d%@"; +"%@ files inspected" = "已检查 %@ 个文件"; +"%@ found across %lld categories." = "在 %2$lld 个类别中发现 %1$@ 可清理内容。"; +"%@ found before the scan stopped. Results may be incomplete." = "扫描停止前发现 %@ 可清理内容,结果可能不完整。"; +"%@ of %@" = "已用 %@,共 %@"; +"%@ of %@ candidates · %@ verified" = "已校验 %@ / %@ 个候选文件,共 %@"; +"%@ reviewable" = "可供清理 %@"; +"%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone." = "已选择 %@。将永久删除所选文件或执行列出的清理操作,此操作无法撤销。"; +"%@ will move to Trash" = "将把 %@ 移到废纸篓"; +"%lld analyzed" = "已分析 %lld 张"; +"%lld apps selected" = "已选择 %lld 个应用"; +"%lld areas" = "%lld 个扫描类别"; +"%lld compared" = "已比较 %lld 张"; +"%lld exact copies · %@ each" = "%lld 个相同副本,每个 %@"; +"%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access." = "使用管理员权限仍无法删除 %lld 个文件。文件可能已发生变化,或 macOS 拒绝了访问。"; +"%lld file(s) could not be removed. Check that the items still exist and are not in use." = "无法删除 %lld 个文件。请确认文件仍然存在且未被占用。"; +"%lld files totaling %@ were moved. Every protected copy remains in place." = "已将 %lld 个文件(共 %@)移到废纸篓。所有受保护的副本均已保留。"; +"%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place." = "将把 %lld 个文件(共 %@)移到废纸篓。每组中受保护的副本都会保留。"; +"%lld files · %lld folders" = "%lld 个文件,%lld 个文件夹"; +"%lld folders" = "%lld 个文件夹"; +"%lld found" = "发现 %lld 项"; +"%lld inaccessible" = "%lld 项无法访问"; +"%lld items · %@ found" = "发现 %lld 项,共 %@"; +"%lld matched" = "匹配到 %lld 张"; +"%lld of %lld items shown" = "显示 %lld / %lld 项"; +"%lld percent" = "百分之 %lld"; +"%lld photos" = "%lld 张照片"; +"%lld photos · %@" = "%lld 张照片,共 %@"; +"%lld selected items will be permanently deleted. Review the list before continuing." = "将永久删除所选的 %lld 个项目。请确认列表后再继续。"; +"%lld selected · %@" = "已选 %lld 项,共 %@"; +"%lld skipped" = "已跳过 %lld 项"; +"%lld unsafe or unavailable items were not scanned" = "%lld 个不适合扫描或无法访问的项目已跳过"; +"%lld unsafe or unavailable items were skipped." = "已跳过 %lld 个不适合扫描或无法访问的项目。"; +"%lld updates available" = "有 %lld 个可用更新"; +"%lld%% visual score" = "画面相似度 %lld%%"; +", and %lld more" = ",另有 %lld 项"; +"1 app selected" = "已选择 1 个应用"; +"1 update available" = "有 1 个可用更新"; +"500 photo limit" = "最多扫描 500 张照片"; +"A clear view of reclaimable storage and the tools that manage it." = "了解可释放的存储空间,轻松管理你的 Mac。"; +"A selected file is missing or changed: %@" = "所选文件已丢失或发生变化:%@"; +"A selected file no longer matches its kept copy: %@" = "所选文件与保留副本的内容已不再相同:%@"; +"Access denied" = "访问被拒绝"; +"Administrator removal failed: %@" = "使用管理员权限删除失败:%@"; +"Always exclude from cleanup" = "始终排除此项"; +"Any age" = "不限时间"; +"Any size" = "不限大小"; +"App Updates" = "应用更新"; +"App and document packages are excluded: %@" = "已排除应用程序包和文稿包:%@"; +"App bundle missing" = "应用程序文件缺失"; +"App downloads are checked before opening." = "下载的应用会在打开前接受安全检查。"; +"App permissions" = "应用权限"; +"Apple Guide" = "Apple 使用指南"; +"Apple's built-in malware protection is installed. Update recency is managed by macOS." = "已安装 Apple 内置的恶意软件防护,更新由 macOS 管理。"; +"Application Firewall" = "应用防火墙"; +"Apps outside Homebrew" = "其他来源的应用"; +"At login" = "登录时运行"; +"Available" = "可用"; +"Available to review" = "待确认空间"; +"Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions." = "请在各浏览器中检查隐私设置。PureMac 不会更改 Cookie、历史记录、网站权限或扩展。"; +"Browser privacy" = "浏览器隐私"; +"Building visual signatures" = "正在分析图片特征"; +"Camera" = "相机"; +"Care" = "日常维护"; +"Changed during scan" = "扫描期间发生变化"; +"Check Again" = "重新检查"; +"Check again" = "重新检查"; +"Check built-in safeguards" = "检查系统安全设置"; +"Check installed apps for new versions" = "检查已安装应用的可用更新"; +"Check installed cask apps" = "检查已安装的 Homebrew 应用"; +"Checked %@. Unknown means the setting could not be confirmed." = "检查时间:%@。“未知”表示无法确认该设置的状态。"; +"Checking" = "正在检查"; +"Checking Homebrew casks" = "正在检查 Homebrew 应用"; +"Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation." = "检查更新时,Homebrew 会按需刷新软件包数据并连接已配置的软件源。PureMac 仅显示由当前 Homebrew 管理的图形应用。"; +"Checking your Mac. Nothing is removed during a scan." = "正在检查你的 Mac,扫描期间不会删除任何内容。"; +"Choose Another Folder" = "选择其他文件夹"; +"Choose Folder" = "选择文件夹"; +"Choose a Folder" = "选择文件夹"; +"Choose a folder of photos" = "选择照片文件夹"; +"Choose a folder to check for duplicate files" = "选择要查找重复文件的文件夹"; +"Choose a folder to inspect" = "选择要分析的文件夹"; +"Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically." = "选择一个文件夹。PureMac 会先比较文件大小,再校验文件内容。不会自动选择或删除任何文件。"; +"Choose a photo folder" = "选择照片文件夹"; +"Choose where to look" = "选择要分析的位置"; +"Chrome privacy guide" = "Chrome 隐私指南"; +"Clean selected items" = "清理所选项目"; +"Cleaning selected items" = "正在清理所选项目"; +"Cleanup Exclusions" = "清理排除项"; +"Cleanup finished and disk information is refreshing." = "清理已完成,正在更新存储信息。"; +"Cleanup plan" = "清理方案"; +"Clear Selection" = "清空选择"; +"Clear filters" = "清除筛选条件"; +"Clear search" = "清除搜索"; +"Clear selection" = "清空选择"; +"Cloud-only file" = "仅存于云端的文件"; +"Collapse duplicate group" = "收起此组重复文件"; +"Compare visually similar photos" = "比较画面相似的照片"; +"Conditional keep alive" = "按条件保持运行"; +"Copy path" = "复制路径"; +"Could not inspect %@" = "无法检查 %@"; +"Could not list Time Machine snapshots" = "无法列出时间机器快照"; +"Could not read" = "无法读取"; +"Could not read %@" = "无法读取 %@"; +"Couldn't check for updates" = "无法检查更新"; +"Current scan path" = "当前扫描路径"; +"Delete" = "删除"; +"Delete Snapshot" = "删除快照"; +"Delete local snapshot?" = "删除本地快照?"; +"Deselect visible" = "取消选择当前显示的项目"; +"Developer Cleanup" = "开发缓存清理"; +"Disabled" = "已停用"; +"Downloaded apps are not being assessed by Gatekeeper." = "门禁功能未对下载的应用进行安全检查。"; +"Drag to tilt" = "拖动以调整角度"; +"Duplicate Finder" = "重复文件"; +"Duplicate groups" = "重复文件组"; +"Every %lld seconds" = "每 %lld 秒"; +"Every eligible file was checked." = "已检查所有符合条件的文件。"; +"Exact-match cleanup with a protected copy in every group" = "查找内容相同的文件,每组保留一份副本"; +"Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it." = "手动和定时清理都会保留已排除的路径及包含它们的文件夹。右键点击扫描结果即可添加排除项。"; +"Expand duplicate group" = "展开此组重复文件"; +"File" = "文件"; +"FileVault" = "文件保险箱(FileVault)"; +"FileVault Settings" = "文件保险箱设置"; +"Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them." = "文件将移到废纸篓。需要管理员授权的项目可能会被永久删除。应用关联判断可能存在误差,请确认文件用途后再删除。"; +"Filter cleanup files" = "筛选待清理文件"; +"Find a file or path" = "搜索文件名或路径"; +"Find copies that are exactly the same" = "查找内容完全相同的文件"; +"Find space to reclaim." = "找出可释放的空间"; +"Find visually related shots in a folder and review them side by side." = "查找文件夹中画面相似的照片,并排比较。"; +"Find what uses the most disk space" = "找出占用空间最多的文件"; +"Finding local photos" = "正在查找本地照片"; +"Firewall Settings" = "防火墙设置"; +"Focused utilities for storage, apps, and system maintenance" = "管理存储、应用和系统的常用工具"; +"Folder could not be inspected" = "无法分析文件夹"; +"Full Disk Access is off" = "未开启完全磁盘访问权限"; +"Full access" = "已获完整访问权限"; +"Gatekeeper" = "门禁(Gatekeeper)"; +"Group %lld" = "第 %lld 组"; +"Grouping similar shots" = "正在对相似照片分组"; +"Hard-linked copy" = "硬链接副本"; +"Homebrew apps are up to date" = "Homebrew 应用均为最新版本"; +"Homebrew did not finish before the operation timed out." = "Homebrew 操作超时,未能完成。"; +"Homebrew finished, but %lld selected apps still report updates." = "Homebrew 已执行完毕,但仍有 %lld 个所选应用显示可用更新。"; +"Homebrew finished, but 1 selected app still reports an update." = "Homebrew 已执行完毕,但仍有 1 个所选应用显示可用更新。"; +"Homebrew finished. Check again to verify installed versions." = "Homebrew 已执行完毕。请重新检查以确认已安装的版本。"; +"Homebrew not found" = "未找到 Homebrew"; +"Homebrew produced more output than PureMac could safely retain." = "Homebrew 的输出超出了 PureMac 可处理的大小限制。"; +"Homebrew returned an invalid cask identifier: %@" = "Homebrew 返回了无效的应用标识:%@"; +"Homebrew returned update information PureMac could not read." = "无法读取 Homebrew 返回的更新信息。"; +"Homebrew updated the %lld selected apps." = "Homebrew 已更新所选的 %lld 个应用。"; +"Homebrew updated the selected app." = "Homebrew 已更新所选应用。"; +"Homebrew was not found in a standard installation location." = "未在常用安装位置找到 Homebrew。"; +"Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process." = "Homebrew 将更新 %@。更新过程中可能会退出正在运行的应用,并移除旧版本。"; +"Includes %lld selected items hidden by filters." = "包含被筛选条件隐藏的 %lld 个已选项目。"; +"Incoming network connections are filtered." = "已开启对传入网络连接的过滤。"; +"Inspect" = "分析"; +"Inspect a folder by allocated disk space. Your files are never changed." = "按实际磁盘占用分析文件夹,不会修改你的文件。"; +"Inspect memory and background activity" = "查看内存使用和后台活动"; +"Inspect startup items and local snapshots again" = "重新检查启动项和本地快照"; +"Inspected %@ files in %@. %@" = "已检查 %2$@ 中的 %1$@ 个文件。%3$@"; +"Inspecting startup items and local snapshots…" = "正在检查启动项和本地快照…"; +"Inspection stopped" = "检查已停止"; +"Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels." = "安装 Homebrew 后可在此检查其管理的应用。App Store 应用和直接下载的应用需要通过各自的渠道更新。"; +"Installed" = "已安装"; +"Installed %@" = "已安装 %@"; +"Keep" = "保留"; +"Keep PureMac open until this pass finishes." = "请保持 PureMac 运行,直到本次清理完成。"; +"Keep alive" = "保持运行"; +"Largest first" = "从大到小"; +"Largest items" = "空间占用排行"; +"Last activity: %@" = "上次操作:%@"; +"Last checked" = "上次检查"; +"Launch agents and daemons installed outside macOS system folders" = "安装在 macOS 系统文件夹之外的启动代理和守护进程"; +"Leftovers" = "应用残留"; +"Live" = "实时"; +"Live resources" = "实时资源使用"; +"Local and private" = "本地处理,保护隐私"; +"Local files" = "本地文件"; +"Local snapshot" = "本地快照"; +"Local snapshots" = "本地快照"; +"Location" = "定位"; +"Login Items Settings" = "登录项设置"; +"Looking through files" = "正在查找文件"; +"Mac storage" = "Mac 存储空间"; +"Managed cleanup action" = "由系统工具执行的清理操作"; +"Matching files" = "内容相同的文件"; +"Measuring allocated space" = "正在计算磁盘占用"; +"Memory pressure use" = "内存使用率"; +"Microphone" = "麦克风"; +"Modified" = "修改时间"; +"Move selected duplicates to Trash?" = "将所选重复文件移到废纸篓?"; +"Moved to Trash" = "已移到废纸篓"; +"Name" = "名称"; +"Needs attention" = "需要处理"; +"Network state" = "网络状态"; +"No exact duplicates found" = "未发现内容相同的文件"; +"No excluded paths" = "暂无清理排除项"; +"No files found" = "未发现文件"; +"No files were changed. Rescan this folder when you are ready." = "未修改任何文件。你可以重新扫描此文件夹。"; +"No launchd items found" = "未发现启动项"; +"No local snapshots reported" = "未发现本地快照"; +"No matching files" = "未找到匹配的文件"; +"No measurable items" = "没有可统计的项目"; +"No photos were changed. You can scan the folder again at any time." = "未修改任何照片。你可以随时重新扫描此文件夹。"; +"No reclaimable items were found before the scan stopped." = "扫描停止前未发现可清理的项目。"; +"No reclaimable items were found in the areas checked." = "在已检查的位置中未发现可清理的项目。"; +"No results yet" = "暂无扫描结果"; +"No scan run yet" = "尚未扫描"; +"No similar groups found" = "未发现相似照片"; +"No updates are currently available for the cask apps Homebrew manages." = "Homebrew 管理的应用目前没有可用更新。"; +"Nothing selected" = "尚未选择"; +"Nothing to clean" = "无需清理"; +"Nothing was moved" = "未移动任何文件"; +"Off" = "已关闭"; +"Older than 30 days" = "30 天前"; +"Older than 6 months" = "6 个月前"; +"Older than a year" = "1 年前"; +"Oldest first" = "最早修改优先"; +"On" = "已开启"; +"Open Activity Monitor" = "打开活动监视器"; +"Open App Store Updates" = "打开 App Store 更新"; +"Open Folder" = "打开文件夹"; +"Open a category to review individual items" = "打开类别,查看其中的具体项目"; +"Open folder" = "打开文件夹"; +"Open the App Store updates page. Direct-download apps may provide their own updater." = "打开 App Store 更新页面。直接下载安装的应用可能提供自己的更新功能。"; +"Opens a folder picker" = "打开文件夹选择窗口"; +"Over 1 GB" = "大于 1 GB"; +"Over 10 GB" = "大于 10 GB"; +"Over 100 MB" = "大于 100 MB"; +"Package" = "文件包"; +"Package contents" = "文件包内容"; +"Package · %lld files" = "文件包,含 %lld 个文件"; +"Partial result" = "结果不完整"; +"Partial results" = "部分扫描结果"; +"Performance" = "性能监测"; +"Permanently delete %@?" = "永久删除 %@ 的内容?"; +"Permanently remove %lld items" = "永久删除 %lld 项"; +"Personal data or an optional cleanup action. Left unselected by default." = "此项涉及个人数据或可选清理操作,默认不选中。"; +"Photos could not be compared" = "无法比较照片"; +"Pinned" = "已固定版本"; +"Preparing scan" = "正在准备扫描"; +"Preparing the next area…" = "正在准备扫描下一个类别…"; +"Preparing visual comparison" = "正在准备图片比较"; +"Program not declared in this plist" = "此配置文件未指定程序"; +"Protected caches and app containers will be skipped." = "扫描将跳过受保护的缓存和应用容器。"; +"Protected copy" = "保留的副本"; +"Protected system locations and processes are restricted." = "受保护的系统位置和进程已受到访问限制。"; +"Protection" = "安全检查"; +"PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review." = "PureMac 会在本机生成缩略图,比较画面结构与颜色,将可能相似的照片分组供你查看。"; +"PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed." = "扫描缓存、日志、开发数据、下载内容和废纸篓。先查看结果,再决定清理哪些项目。"; +"PureMac compares local image thumbnails without changing your photos." = "PureMac 在本机比较图片缩略图,不会修改照片。"; +"PureMac could not confirm the local XProtect installation." = "PureMac 无法确认本机是否安装了 XProtect。"; +"PureMac could not read this setting." = "PureMac 无法读取此设置。"; +"PureMac did not find removable items in the selected scan areas." = "PureMac 在所选扫描范围内未发现可清理的项目。"; +"PureMac measures allocated disk space without changing files." = "PureMac 会统计实际磁盘占用,不会修改文件。"; +"PureMac reads the selected folder and does not change anything during a scan." = "PureMac 只读取所选文件夹,扫描期间不会修改任何内容。"; +"PureMac will ask Homebrew for available versions when you start the check." = "开始检查后,PureMac 将通过 Homebrew 查询可用版本。"; +"PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing." = "PureMac 会将所选应用及其关联文件移到废纸篓。需要管理员授权的项目可能会被永久删除。请确认所选内容后再继续。"; +"PureMac.app" = "PureMac.app"; +"Ready for protected locations" = "可访问受保护的位置"; +"Refresh disk information" = "刷新存储信息"; +"Refreshing package data and comparing installed versions." = "正在刷新软件包数据并比较已安装的版本。"; +"Refused to delete %lld protected item(s) (home credential directory or similar)." = "已阻止删除 %lld 个受保护的项目(如用户凭据目录)。"; +"Remove %lld files" = "删除 %lld 个文件"; +"Remove %lld items" = "删除 %lld 项"; +"Remove apps and their related files" = "卸载应用并清理关联文件"; +"Remove selected app files?" = "删除所选应用文件?"; +"Remove selected files?" = "删除所选文件?"; +"Remove selected leftovers?" = "删除所选残留文件?"; +"Removing the items you selected." = "正在删除你选择的项目。"; +"Reveal %@ in Finder" = "在访达中显示 %@"; +"Reveal plist in Finder" = "在访达中显示配置文件"; +"Reveal skipped item in Finder" = "在访达中显示已跳过的项目"; +"Review and update apps installed as Homebrew casks." = "查看并更新通过 Homebrew 安装的应用。"; +"Review built-in privacy and safety checks" = "检查系统隐私与安全设置"; +"Review matching files side by side" = "并排比较内容相同的文件"; +"Review only" = "仅供查看"; +"Review removal" = "确认清理内容"; +"Review the groups before acting" = "处理前请先查看分组"; +"Review the macOS safeguards that protect apps, disks, network access, and system files." = "检查 macOS 对应用、磁盘、网络访问和系统文件的保护设置。"; +"Review the results and choose exactly what to remove." = "查看扫描结果,选择需要清理的项目。"; +"Review which apps can access private data and hardware." = "查看哪些应用可以访问个人数据和硬件。"; +"Run audit" = "开始检查"; +"Run the scan again when you are ready to check every area." = "重新扫描以检查所有类别。"; +"Safari privacy guide" = "Safari 隐私指南"; +"Safari: Settings > Privacy" = "Safari 浏览器:设置 > 隐私"; +"Sample limit reached" = "已达到扫描数量上限"; +"Scan Another Folder" = "扫描其他文件夹"; +"Scan Folder" = "扫描文件夹"; +"Scan Photos" = "扫描照片"; +"Scan again" = "重新扫描"; +"Scan complete" = "扫描完成"; +"Scan could not finish" = "扫描未能完成"; +"Scan first, then review the exact files before removing anything." = "先扫描并查看具体文件,确认后再清理。"; +"Scan stopped" = "扫描已停止"; +"Scan this Mac" = "扫描此 Mac"; +"Scan this category" = "扫描此类别"; +"Scanning %@…" = "正在扫描%@…"; +"Scheduled" = "定时运行"; +"Security Settings" = "安全设置"; +"See current resource use and review what starts in the background." = "查看当前资源使用情况和后台启动项目。"; +"See what is taking up space" = "查看空间占用情况"; +"Select %@" = "选择 %@"; +"Select a tool from the sidebar." = "从侧边栏选择一个工具。"; +"Select any folder to see which files and subfolders occupy the most disk space." = "选择一个文件夹,查看哪些文件和子文件夹占用了最多空间。"; +"Select apps to update" = "选择要更新的应用"; +"Select at least one app to update." = "请至少选择一个要更新的应用。"; +"Select copies" = "选择副本"; +"Select the apps Homebrew should upgrade." = "选择要通过 Homebrew 更新的应用。"; +"Select the extra copies you want to review" = "选择需要处理的多余副本"; +"Select visible" = "选择当前显示的项目"; +"Selected" = "已选择"; +"Selected cleanup items are permanently removed." = "所选清理项目将被永久删除。"; +"Share of scanned space" = "占已扫描空间的比例"; +"Shares storage with %@" = "与 %@ 共用存储空间"; +"Show %@ in Finder" = "在访达中显示 %@"; +"Show in Finder" = "在访达中显示"; +"Shows a confirmation before moving the selected copies" = "移动所选副本前显示确认提示"; +"Similar Photos" = "相似照片"; +"Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality." = "相似度只是对画面的估计,并不代表两个文件完全相同。可点击“在访达中显示”查看并比较原图。"; +"Size unavailable" = "大小未知"; +"Skipped items" = "已跳过的项目"; +"Smallest first" = "从小到大"; +"Snapshot could not be deleted" = "无法删除快照"; +"Software Update" = "软件更新"; +"Some contents were skipped or inaccessible" = "部分内容已跳过或无法访问"; +"Some files were not moved" = "部分文件未能移动"; +"Some information could not be read (%lld)" = "部分信息无法读取(%lld 项)"; +"Some items need attention" = "部分项目需要处理"; +"Some locations are unavailable" = "部分位置无法访问"; +"Some protected locations are unavailable. Full Disk Access allows a more complete scan." = "部分受保护的位置无法访问。授予完全磁盘访问权限后,可以扫描更多位置。"; +"Some selected files" = "部分所选文件"; +"Sort" = "排序"; +"Space Explorer" = "空间分析"; +"Startup and background items" = "启动项与后台项目"; +"Stop" = "停止"; +"Stop scan" = "停止扫描"; +"Stopped" = "已停止"; +"Stopping keeps the results found so far." = "停止后会保留已经完成的扫描结果。"; +"Stops scanning without changing any files" = "停止扫描,不修改任何文件"; +"Suggested groups" = "相似照片分组"; +"Symbolic link" = "符号链接"; +"Symbolic links and cloud-only items are excluded." = "跳过符号链接和仅存于云端的项目。"; +"Symbolic links cannot be scanned: %@" = "无法扫描符号链接:%@"; +"Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted." = "跳过符号链接、应用程序包、隐藏文件和未下载的云端文件。不会上传或删除照片。"; +"System Integrity Protection" = "系统完整性保护"; +"System Integrity Protection is turned off." = "系统完整性保护已关闭。"; +"System daemon" = "系统守护进程"; +"System update" = "系统更新"; +"System-wide agent" = "全局启动代理"; +"The analyzed photos did not meet PureMac's visual similarity threshold." = "已分析的照片未达到 PureMac 的相似度阈值。"; +"The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan." = "此检查只读取当前设置,不会修改你的 Mac。它用于检查安全配置,不会扫描恶意软件。"; +"The check timed out." = "检查超时。"; +"The copy marked Keep is missing or changed: %@" = "标记为保留的副本已丢失或发生变化:%@"; +"The inspected user and third-party launch folders are empty." = "已检查的用户和第三方启动文件夹为空。"; +"The launch item is not a property-list dictionary." = "启动项不是有效的属性列表字典。"; +"The macOS application firewall is turned off." = "macOS 应用防火墙已关闭。"; +"The protected copy cannot be moved to Trash: %@" = "无法将受保护的副本移到废纸篓:%@"; +"The scan stopped. Available results are ready to review." = "扫描已停止,你可以查看已完成的扫描结果。"; +"The selected folder cannot be scanned: %@" = "无法扫描所选文件夹:%@"; +"The selected folder could not be read: %@" = "无法读取所选文件夹:%@"; +"The selected folder is stored in the cloud and has not been downloaded: %@" = "所选文件夹存储在云端,尚未下载:%@"; +"The selected item is not a folder: %@" = "所选项目不是文件夹:%@"; +"The startup disk is encrypted with FileVault." = "启动磁盘已使用文件保险箱加密。"; +"The startup disk is not encrypted with FileVault." = "启动磁盘未使用文件保险箱加密。"; +"The system returned an unrecognized status." = "无法识别系统返回的状态。"; +"There are no cleanup items in this category." = "此类别中没有可清理的项目。"; +"This folder is empty or its contents were excluded from the scan." = "此文件夹为空,或其中的内容已被排除。"; +"This permanently removes %@. Its size is unknown, and the action cannot be undone." = "这将永久删除 %@。快照大小未知,此操作无法撤销。"; +"This permanently removes the selected Time Machine snapshot." = "这将永久删除所选的时间机器快照。"; +"This snapshot does not have a verified Time Machine timestamp." = "此快照没有经过验证的时间机器时间戳。"; +"Time Machine" = "时间机器"; +"Time Machine Settings" = "时间机器设置"; +"Time Machine did not report any snapshots for the startup disk." = "时间机器未报告启动磁盘上的任何快照。"; +"Time Machine snapshots are unavailable" = "无法获取时间机器快照"; +"Time Machine snapshots can be reviewed and removed individually" = "可以逐一查看和删除时间机器快照"; +"Tools" = "实用工具"; +"Try Again" = "重试"; +"Try another name, size, or date range." = "请尝试其他名称、大小或日期范围。"; +"Uninstaller" = "应用卸载"; +"Unknown" = "未知"; +"Unknown error" = "未知错误"; +"Updates from Homebrew" = "Homebrew 应用更新"; +"Updating…" = "正在更新…"; +"Upgrade %lld Apps" = "更新 %lld 个应用"; +"Upgrade 1 App" = "更新 1 个应用"; +"Upgrade selected apps?" = "更新所选应用?"; +"User agent" = "用户启动代理"; +"Verifying possible matches" = "正在校验可能重复的文件"; +"Watches folders" = "监视文件夹"; +"Watches paths" = "监视路径"; +"XProtect" = "XProtect"; +"allocated in this folder" = "此文件夹的实际磁盘占用"; +"definitions %@" = "病毒定义 %@"; +"engine %@" = "引擎 %@"; +"macOS does not report reliable per-snapshot sizes in this listing." = "macOS 无法提供此列表中每个快照的准确大小。"; +"reclaimed" = "已释放"; +"similar group" = "组相似照片"; +"similar groups" = "组相似照片"; +"tmutil is not available on this Mac." = "此 Mac 上无法使用 tmutil。"; diff --git a/PureMac/zh-Hans.lproj/ServicesMenu.strings b/PureMac/zh-Hans.lproj/ServicesMenu.strings new file mode 100644 index 0000000..59c18ab --- /dev/null +++ b/PureMac/zh-Hans.lproj/ServicesMenu.strings @@ -0,0 +1 @@ +"Uninstall with PureMac" = "使用 PureMac 卸载"; diff --git a/PureMac/zh-Hant.lproj/Localizable.strings b/PureMac/zh-Hant.lproj/Localizable.strings index a2dd3e2..d3a4124 100644 --- a/PureMac/zh-Hant.lproj/Localizable.strings +++ b/PureMac/zh-Hant.lproj/Localizable.strings @@ -460,3 +460,410 @@ /* Simulator runtimes */ "Simulator runtime" = "模擬器執行環境"; + +/* Current dashboard, tools, and cleanup review — English fallback until translated */ +"\nAnd %lld more." = "\nAnd %lld more."; +"%@ %@ to %@" = "%@ %@ to %@"; +"%@ available" = "%@ available"; +"%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again." = "%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again."; +"%@ did not finish within the allowed time." = "%@ did not finish within the allowed time."; +"%@ exited with status %d%@" = "%@ exited with status %d%@"; +"%@ files inspected" = "%@ files inspected"; +"%@ found across %lld categories." = "%@ found across %lld categories."; +"%@ found before the scan stopped. Results may be incomplete." = "%@ found before the scan stopped. Results may be incomplete."; +"%@ of %@" = "%@ of %@"; +"%@ of %@ candidates · %@ verified" = "%@ of %@ candidates · %@ verified"; +"%@ reviewable" = "%@ reviewable"; +"%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone." = "%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone."; +"%@ will move to Trash" = "%@ will move to Trash"; +"%lld analyzed" = "%lld analyzed"; +"%lld apps selected" = "%lld apps selected"; +"%lld areas" = "%lld areas"; +"%lld compared" = "%lld compared"; +"%lld exact copies · %@ each" = "%lld exact copies · %@ each"; +"%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access." = "%lld file(s) could not be removed with administrator privileges. The items may have changed or macOS denied access."; +"%lld file(s) could not be removed. Check that the items still exist and are not in use." = "%lld file(s) could not be removed. Check that the items still exist and are not in use."; +"%lld files totaling %@ were moved. Every protected copy remains in place." = "%lld files totaling %@ were moved. Every protected copy remains in place."; +"%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place." = "%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place."; +"%lld files · %lld folders" = "%lld files · %lld folders"; +"%lld folders" = "%lld folders"; +"%lld found" = "%lld found"; +"%lld inaccessible" = "%lld inaccessible"; +"%lld items · %@ found" = "%lld items · %@ found"; +"%lld matched" = "%lld matched"; +"%lld of %lld items shown" = "%lld of %lld items shown"; +"%lld percent" = "%lld percent"; +"%lld photos" = "%lld photos"; +"%lld photos · %@" = "%lld photos · %@"; +"%lld selected items will be permanently deleted. Review the list before continuing." = "%lld selected items will be permanently deleted. Review the list before continuing."; +"%lld selected · %@" = "%lld selected · %@"; +"%lld skipped" = "%lld skipped"; +"%lld unsafe or unavailable items were not scanned" = "%lld unsafe or unavailable items were not scanned"; +"%lld unsafe or unavailable items were skipped." = "%lld unsafe or unavailable items were skipped."; +"%lld updates available" = "%lld updates available"; +"%lld%% visual score" = "%lld%% visual score"; +", and %lld more" = ", and %lld more"; +"1 app selected" = "1 app selected"; +"1 update available" = "1 update available"; +"500 photo limit" = "500 photo limit"; +"A clear view of reclaimable storage and the tools that manage it." = "A clear view of reclaimable storage and the tools that manage it."; +"A selected file is missing or changed: %@" = "A selected file is missing or changed: %@"; +"A selected file no longer matches its kept copy: %@" = "A selected file no longer matches its kept copy: %@"; +"Access denied" = "Access denied"; +"Administrator removal failed: %@" = "Administrator removal failed: %@"; +"Always exclude from cleanup" = "Always exclude from cleanup"; +"Any age" = "Any age"; +"Any size" = "Any size"; +"App Updates" = "App Updates"; +"App and document packages are excluded: %@" = "App and document packages are excluded: %@"; +"App bundle missing" = "App bundle missing"; +"App downloads are checked before opening." = "App downloads are checked before opening."; +"App permissions" = "App permissions"; +"Apple Guide" = "Apple Guide"; +"Apple's built-in malware protection is installed. Update recency is managed by macOS." = "Apple's built-in malware protection is installed. Update recency is managed by macOS."; +"Application Firewall" = "Application Firewall"; +"Apps outside Homebrew" = "Apps outside Homebrew"; +"At login" = "At login"; +"Available" = "Available"; +"Available to review" = "Available to review"; +"Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions." = "Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions."; +"Browser privacy" = "Browser privacy"; +"Building visual signatures" = "Building visual signatures"; +"Camera" = "Camera"; +"Care" = "Care"; +"Changed during scan" = "Changed during scan"; +"Check Again" = "Check Again"; +"Check again" = "Check again"; +"Check built-in safeguards" = "Check built-in safeguards"; +"Check installed apps for new versions" = "Check installed apps for new versions"; +"Check installed cask apps" = "Check installed cask apps"; +"Checked %@. Unknown means the setting could not be confirmed." = "Checked %@. Unknown means the setting could not be confirmed."; +"Checking" = "Checking"; +"Checking Homebrew casks" = "Checking Homebrew casks"; +"Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation." = "Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation."; +"Checking your Mac. Nothing is removed during a scan." = "Checking your Mac. Nothing is removed during a scan."; +"Choose Another Folder" = "Choose Another Folder"; +"Choose Folder" = "Choose Folder"; +"Choose a Folder" = "Choose a Folder"; +"Choose a folder of photos" = "Choose a folder of photos"; +"Choose a folder to check for duplicate files" = "Choose a folder to check for duplicate files"; +"Choose a folder to inspect" = "Choose a folder to inspect"; +"Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically." = "Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically."; +"Choose a photo folder" = "Choose a photo folder"; +"Choose where to look" = "Choose where to look"; +"Chrome privacy guide" = "Chrome privacy guide"; +"Clean selected items" = "Clean selected items"; +"Cleaning selected items" = "Cleaning selected items"; +"Cleanup Exclusions" = "Cleanup Exclusions"; +"Cleanup finished and disk information is refreshing." = "Cleanup finished and disk information is refreshing."; +"Cleanup plan" = "Cleanup plan"; +"Clear Selection" = "Clear Selection"; +"Clear filters" = "Clear filters"; +"Clear search" = "Clear search"; +"Clear selection" = "Clear selection"; +"Cloud-only file" = "Cloud-only file"; +"Collapse duplicate group" = "Collapse duplicate group"; +"Compare visually similar photos" = "Compare visually similar photos"; +"Conditional keep alive" = "Conditional keep alive"; +"Copy path" = "Copy path"; +"Could not inspect %@" = "Could not inspect %@"; +"Could not list Time Machine snapshots" = "Could not list Time Machine snapshots"; +"Could not read" = "Could not read"; +"Could not read %@" = "Could not read %@"; +"Couldn't check for updates" = "Couldn't check for updates"; +"Current scan path" = "Current scan path"; +"Delete" = "Delete"; +"Delete Snapshot" = "Delete Snapshot"; +"Delete local snapshot?" = "Delete local snapshot?"; +"Deselect visible" = "Deselect visible"; +"Developer Cleanup" = "Developer Cleanup"; +"Disabled" = "Disabled"; +"Downloaded apps are not being assessed by Gatekeeper." = "Downloaded apps are not being assessed by Gatekeeper."; +"Drag to tilt" = "Drag to tilt"; +"Duplicate Finder" = "Duplicate Finder"; +"Duplicate groups" = "Duplicate groups"; +"Every %lld seconds" = "Every %lld seconds"; +"Every eligible file was checked." = "Every eligible file was checked."; +"Exact-match cleanup with a protected copy in every group" = "Exact-match cleanup with a protected copy in every group"; +"Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it." = "Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it."; +"Expand duplicate group" = "Expand duplicate group"; +"File" = "File"; +"FileVault" = "FileVault"; +"FileVault Settings" = "FileVault Settings"; +"Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them." = "Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them."; +"Filter cleanup files" = "Filter cleanup files"; +"Find a file or path" = "Find a file or path"; +"Find copies that are exactly the same" = "Find copies that are exactly the same"; +"Find space to reclaim." = "Find space to reclaim."; +"Find visually related shots in a folder and review them side by side." = "Find visually related shots in a folder and review them side by side."; +"Find what uses the most disk space" = "Find what uses the most disk space"; +"Finding local photos" = "Finding local photos"; +"Firewall Settings" = "Firewall Settings"; +"Focused utilities for storage, apps, and system maintenance" = "Focused utilities for storage, apps, and system maintenance"; +"Folder could not be inspected" = "Folder could not be inspected"; +"Full Disk Access is off" = "Full Disk Access is off"; +"Full access" = "Full access"; +"Gatekeeper" = "Gatekeeper"; +"Group %lld" = "Group %lld"; +"Grouping similar shots" = "Grouping similar shots"; +"Hard-linked copy" = "Hard-linked copy"; +"Homebrew apps are up to date" = "Homebrew apps are up to date"; +"Homebrew did not finish before the operation timed out." = "Homebrew did not finish before the operation timed out."; +"Homebrew finished, but %lld selected apps still report updates." = "Homebrew finished, but %lld selected apps still report updates."; +"Homebrew finished, but 1 selected app still reports an update." = "Homebrew finished, but 1 selected app still reports an update."; +"Homebrew finished. Check again to verify installed versions." = "Homebrew finished. Check again to verify installed versions."; +"Homebrew not found" = "Homebrew not found"; +"Homebrew produced more output than PureMac could safely retain." = "Homebrew produced more output than PureMac could safely retain."; +"Homebrew returned an invalid cask identifier: %@" = "Homebrew returned an invalid cask identifier: %@"; +"Homebrew returned update information PureMac could not read." = "Homebrew returned update information PureMac could not read."; +"Homebrew updated the %lld selected apps." = "Homebrew updated the %lld selected apps."; +"Homebrew updated the selected app." = "Homebrew updated the selected app."; +"Homebrew was not found in a standard installation location." = "Homebrew was not found in a standard installation location."; +"Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process." = "Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process."; +"Includes %lld selected items hidden by filters." = "Includes %lld selected items hidden by filters."; +"Incoming network connections are filtered." = "Incoming network connections are filtered."; +"Inspect" = "Inspect"; +"Inspect a folder by allocated disk space. Your files are never changed." = "Inspect a folder by allocated disk space. Your files are never changed."; +"Inspect memory and background activity" = "Inspect memory and background activity"; +"Inspect startup items and local snapshots again" = "Inspect startup items and local snapshots again"; +"Inspected %@ files in %@. %@" = "Inspected %@ files in %@. %@"; +"Inspecting startup items and local snapshots…" = "Inspecting startup items and local snapshots…"; +"Inspection stopped" = "Inspection stopped"; +"Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels." = "Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels."; +"Installed" = "Installed"; +"Installed %@" = "Installed %@"; +"Keep" = "Keep"; +"Keep PureMac open until this pass finishes." = "Keep PureMac open until this pass finishes."; +"Keep alive" = "Keep alive"; +"Largest first" = "Largest first"; +"Largest items" = "Largest items"; +"Last activity: %@" = "Last activity: %@"; +"Last checked" = "Last checked"; +"Launch agents and daemons installed outside macOS system folders" = "Launch agents and daemons installed outside macOS system folders"; +"Leftovers" = "Leftovers"; +"Live" = "Live"; +"Live resources" = "Live resources"; +"Local and private" = "Local and private"; +"Local files" = "Local files"; +"Local snapshot" = "Local snapshot"; +"Local snapshots" = "Local snapshots"; +"Location" = "Location"; +"Login Items Settings" = "Login Items Settings"; +"Looking through files" = "Looking through files"; +"Mac storage" = "Mac storage"; +"Managed cleanup action" = "Managed cleanup action"; +"Matching files" = "Matching files"; +"Measuring allocated space" = "Measuring allocated space"; +"Memory pressure use" = "Memory pressure use"; +"Microphone" = "Microphone"; +"Modified" = "Modified"; +"Move selected duplicates to Trash?" = "Move selected duplicates to Trash?"; +"Moved to Trash" = "Moved to Trash"; +"Name" = "Name"; +"Needs attention" = "Needs attention"; +"Network state" = "Network state"; +"No exact duplicates found" = "No exact duplicates found"; +"No excluded paths" = "No excluded paths"; +"No files found" = "No files found"; +"No files were changed. Rescan this folder when you are ready." = "No files were changed. Rescan this folder when you are ready."; +"No launchd items found" = "No launchd items found"; +"No local snapshots reported" = "No local snapshots reported"; +"No matching files" = "No matching files"; +"No measurable items" = "No measurable items"; +"No photos were changed. You can scan the folder again at any time." = "No photos were changed. You can scan the folder again at any time."; +"No reclaimable items were found before the scan stopped." = "No reclaimable items were found before the scan stopped."; +"No reclaimable items were found in the areas checked." = "No reclaimable items were found in the areas checked."; +"No results yet" = "No results yet"; +"No scan run yet" = "No scan run yet"; +"No similar groups found" = "No similar groups found"; +"No updates are currently available for the cask apps Homebrew manages." = "No updates are currently available for the cask apps Homebrew manages."; +"Nothing selected" = "Nothing selected"; +"Nothing to clean" = "Nothing to clean"; +"Nothing was moved" = "Nothing was moved"; +"Off" = "Off"; +"Older than 30 days" = "Older than 30 days"; +"Older than 6 months" = "Older than 6 months"; +"Older than a year" = "Older than a year"; +"Oldest first" = "Oldest first"; +"On" = "On"; +"Open Activity Monitor" = "Open Activity Monitor"; +"Open App Store Updates" = "Open App Store Updates"; +"Open Folder" = "Open Folder"; +"Open a category to review individual items" = "Open a category to review individual items"; +"Open folder" = "Open folder"; +"Open the App Store updates page. Direct-download apps may provide their own updater." = "Open the App Store updates page. Direct-download apps may provide their own updater."; +"Opens a folder picker" = "Opens a folder picker"; +"Over 1 GB" = "Over 1 GB"; +"Over 10 GB" = "Over 10 GB"; +"Over 100 MB" = "Over 100 MB"; +"Package" = "Package"; +"Package contents" = "Package contents"; +"Package · %lld files" = "Package · %lld files"; +"Partial result" = "Partial result"; +"Partial results" = "Partial results"; +"Performance" = "Performance"; +"Permanently delete %@?" = "Permanently delete %@?"; +"Permanently remove %lld items" = "Permanently remove %lld items"; +"Personal data or an optional cleanup action. Left unselected by default." = "Personal data or an optional cleanup action. Left unselected by default."; +"Photos could not be compared" = "Photos could not be compared"; +"Pinned" = "Pinned"; +"Preparing scan" = "Preparing scan"; +"Preparing the next area…" = "Preparing the next area…"; +"Preparing visual comparison" = "Preparing visual comparison"; +"Program not declared in this plist" = "Program not declared in this plist"; +"Protected caches and app containers will be skipped." = "Protected caches and app containers will be skipped."; +"Protected copy" = "Protected copy"; +"Protected system locations and processes are restricted." = "Protected system locations and processes are restricted."; +"Protection" = "Protection"; +"PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review." = "PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review."; +"PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed." = "PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed."; +"PureMac compares local image thumbnails without changing your photos." = "PureMac compares local image thumbnails without changing your photos."; +"PureMac could not confirm the local XProtect installation." = "PureMac could not confirm the local XProtect installation."; +"PureMac could not read this setting." = "PureMac could not read this setting."; +"PureMac did not find removable items in the selected scan areas." = "PureMac did not find removable items in the selected scan areas."; +"PureMac measures allocated disk space without changing files." = "PureMac measures allocated disk space without changing files."; +"PureMac reads the selected folder and does not change anything during a scan." = "PureMac reads the selected folder and does not change anything during a scan."; +"PureMac will ask Homebrew for available versions when you start the check." = "PureMac will ask Homebrew for available versions when you start the check."; +"PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing." = "PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing."; +"PureMac.app" = "PureMac.app"; +"Ready for protected locations" = "Ready for protected locations"; +"Refresh disk information" = "Refresh disk information"; +"Refreshing package data and comparing installed versions." = "Refreshing package data and comparing installed versions."; +"Refused to delete %lld protected item(s) (home credential directory or similar)." = "Refused to delete %lld protected item(s) (home credential directory or similar)."; +"Remove %lld files" = "Remove %lld files"; +"Remove %lld items" = "Remove %lld items"; +"Remove apps and their related files" = "Remove apps and their related files"; +"Remove selected app files?" = "Remove selected app files?"; +"Remove selected files?" = "Remove selected files?"; +"Remove selected leftovers?" = "Remove selected leftovers?"; +"Removing the items you selected." = "Removing the items you selected."; +"Reveal %@ in Finder" = "Reveal %@ in Finder"; +"Reveal plist in Finder" = "Reveal plist in Finder"; +"Reveal skipped item in Finder" = "Reveal skipped item in Finder"; +"Review and update apps installed as Homebrew casks." = "Review and update apps installed as Homebrew casks."; +"Review built-in privacy and safety checks" = "Review built-in privacy and safety checks"; +"Review matching files side by side" = "Review matching files side by side"; +"Review only" = "Review only"; +"Review removal" = "Review removal"; +"Review the groups before acting" = "Review the groups before acting"; +"Review the macOS safeguards that protect apps, disks, network access, and system files." = "Review the macOS safeguards that protect apps, disks, network access, and system files."; +"Review the results and choose exactly what to remove." = "Review the results and choose exactly what to remove."; +"Review which apps can access private data and hardware." = "Review which apps can access private data and hardware."; +"Run audit" = "Run audit"; +"Run the scan again when you are ready to check every area." = "Run the scan again when you are ready to check every area."; +"Safari privacy guide" = "Safari privacy guide"; +"Safari: Settings > Privacy" = "Safari: Settings > Privacy"; +"Sample limit reached" = "Sample limit reached"; +"Scan Another Folder" = "Scan Another Folder"; +"Scan Folder" = "Scan Folder"; +"Scan Photos" = "Scan Photos"; +"Scan again" = "Scan again"; +"Scan complete" = "Scan complete"; +"Scan could not finish" = "Scan could not finish"; +"Scan first, then review the exact files before removing anything." = "Scan first, then review the exact files before removing anything."; +"Scan stopped" = "Scan stopped"; +"Scan this Mac" = "Scan this Mac"; +"Scan this category" = "Scan this category"; +"Scanning %@…" = "Scanning %@…"; +"Scheduled" = "Scheduled"; +"Security Settings" = "Security Settings"; +"See current resource use and review what starts in the background." = "See current resource use and review what starts in the background."; +"See what is taking up space" = "See what is taking up space"; +"Select %@" = "Select %@"; +"Select a tool from the sidebar." = "Select a tool from the sidebar."; +"Select any folder to see which files and subfolders occupy the most disk space." = "Select any folder to see which files and subfolders occupy the most disk space."; +"Select apps to update" = "Select apps to update"; +"Select at least one app to update." = "Select at least one app to update."; +"Select copies" = "Select copies"; +"Select the apps Homebrew should upgrade." = "Select the apps Homebrew should upgrade."; +"Select the extra copies you want to review" = "Select the extra copies you want to review"; +"Select visible" = "Select visible"; +"Selected" = "Selected"; +"Selected cleanup items are permanently removed." = "Selected cleanup items are permanently removed."; +"Share of scanned space" = "Share of scanned space"; +"Shares storage with %@" = "Shares storage with %@"; +"Show %@ in Finder" = "Show %@ in Finder"; +"Show in Finder" = "Show in Finder"; +"Shows a confirmation before moving the selected copies" = "Shows a confirmation before moving the selected copies"; +"Similar Photos" = "Similar Photos"; +"Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality." = "Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality."; +"Size unavailable" = "Size unavailable"; +"Skipped items" = "Skipped items"; +"Smallest first" = "Smallest first"; +"Snapshot could not be deleted" = "Snapshot could not be deleted"; +"Software Update" = "Software Update"; +"Some contents were skipped or inaccessible" = "Some contents were skipped or inaccessible"; +"Some files were not moved" = "Some files were not moved"; +"Some information could not be read (%lld)" = "Some information could not be read (%lld)"; +"Some items need attention" = "Some items need attention"; +"Some locations are unavailable" = "Some locations are unavailable"; +"Some protected locations are unavailable. Full Disk Access allows a more complete scan." = "Some protected locations are unavailable. Full Disk Access allows a more complete scan."; +"Some selected files" = "Some selected files"; +"Sort" = "Sort"; +"Space Explorer" = "Space Explorer"; +"Startup and background items" = "Startup and background items"; +"Stop" = "Stop"; +"Stop scan" = "Stop scan"; +"Stopped" = "Stopped"; +"Stopping keeps the results found so far." = "Stopping keeps the results found so far."; +"Stops scanning without changing any files" = "Stops scanning without changing any files"; +"Suggested groups" = "Suggested groups"; +"Symbolic link" = "Symbolic link"; +"Symbolic links and cloud-only items are excluded." = "Symbolic links and cloud-only items are excluded."; +"Symbolic links cannot be scanned: %@" = "Symbolic links cannot be scanned: %@"; +"Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted." = "Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted."; +"System Integrity Protection" = "System Integrity Protection"; +"System Integrity Protection is turned off." = "System Integrity Protection is turned off."; +"System daemon" = "System daemon"; +"System update" = "System update"; +"System-wide agent" = "System-wide agent"; +"The analyzed photos did not meet PureMac's visual similarity threshold." = "The analyzed photos did not meet PureMac's visual similarity threshold."; +"The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan." = "The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan."; +"The check timed out." = "The check timed out."; +"The copy marked Keep is missing or changed: %@" = "The copy marked Keep is missing or changed: %@"; +"The inspected user and third-party launch folders are empty." = "The inspected user and third-party launch folders are empty."; +"The launch item is not a property-list dictionary." = "The launch item is not a property-list dictionary."; +"The macOS application firewall is turned off." = "The macOS application firewall is turned off."; +"The protected copy cannot be moved to Trash: %@" = "The protected copy cannot be moved to Trash: %@"; +"The scan stopped. Available results are ready to review." = "The scan stopped. Available results are ready to review."; +"The selected folder cannot be scanned: %@" = "The selected folder cannot be scanned: %@"; +"The selected folder could not be read: %@" = "The selected folder could not be read: %@"; +"The selected folder is stored in the cloud and has not been downloaded: %@" = "The selected folder is stored in the cloud and has not been downloaded: %@"; +"The selected item is not a folder: %@" = "The selected item is not a folder: %@"; +"The startup disk is encrypted with FileVault." = "The startup disk is encrypted with FileVault."; +"The startup disk is not encrypted with FileVault." = "The startup disk is not encrypted with FileVault."; +"The system returned an unrecognized status." = "The system returned an unrecognized status."; +"There are no cleanup items in this category." = "There are no cleanup items in this category."; +"This folder is empty or its contents were excluded from the scan." = "This folder is empty or its contents were excluded from the scan."; +"This permanently removes %@. Its size is unknown, and the action cannot be undone." = "This permanently removes %@. Its size is unknown, and the action cannot be undone."; +"This permanently removes the selected Time Machine snapshot." = "This permanently removes the selected Time Machine snapshot."; +"This snapshot does not have a verified Time Machine timestamp." = "This snapshot does not have a verified Time Machine timestamp."; +"Time Machine" = "Time Machine"; +"Time Machine Settings" = "Time Machine Settings"; +"Time Machine did not report any snapshots for the startup disk." = "Time Machine did not report any snapshots for the startup disk."; +"Time Machine snapshots are unavailable" = "Time Machine snapshots are unavailable"; +"Time Machine snapshots can be reviewed and removed individually" = "Time Machine snapshots can be reviewed and removed individually"; +"Tools" = "Tools"; +"Try Again" = "Try Again"; +"Try another name, size, or date range." = "Try another name, size, or date range."; +"Uninstaller" = "Uninstaller"; +"Unknown" = "Unknown"; +"Unknown error" = "Unknown error"; +"Updates from Homebrew" = "Updates from Homebrew"; +"Updating…" = "Updating…"; +"Upgrade %lld Apps" = "Upgrade %lld Apps"; +"Upgrade 1 App" = "Upgrade 1 App"; +"Upgrade selected apps?" = "Upgrade selected apps?"; +"User agent" = "User agent"; +"Verifying possible matches" = "Verifying possible matches"; +"Watches folders" = "Watches folders"; +"Watches paths" = "Watches paths"; +"XProtect" = "XProtect"; +"allocated in this folder" = "allocated in this folder"; +"definitions %@" = "definitions %@"; +"engine %@" = "engine %@"; +"macOS does not report reliable per-snapshot sizes in this listing." = "macOS does not report reliable per-snapshot sizes in this listing."; +"reclaimed" = "reclaimed"; +"similar group" = "similar group"; +"similar groups" = "similar groups"; +"tmutil is not available on this Mac." = "tmutil is not available on this Mac."; diff --git a/PureMacTests/LocalizationFilesTests.swift b/PureMacTests/LocalizationFilesTests.swift index ba38003..0ad84ee 100644 --- a/PureMacTests/LocalizationFilesTests.swift +++ b/PureMacTests/LocalizationFilesTests.swift @@ -8,8 +8,8 @@ final class LocalizationFilesTests: XCTestCase { XCTAssertNotNil(localizationFiles["uk"], "Expected uk.lproj/Localizable.strings to exist") } - func testBuiltAppBundleContainsRussianAndUkrainianLocalizations() throws { - for language in ["ru", "uk"] { + func testBuiltAppBundleContainsRussianUkrainianAndSimplifiedChineseLocalizations() throws { + for language in ["ru", "uk", "zh-Hans"] { XCTAssertTrue( Bundle.main.localizations.contains(language), "Expected the built app bundle to register the \(language) localization" @@ -104,6 +104,20 @@ final class LocalizationFilesTests: XCTestCase { } } + func testSimplifiedChineseHasNoEnglishPlaceholderValues() throws { + let files = try localizableStringsFiles() + let english = try localizedStrings(in: XCTUnwrap(files["en"])) + let chinese = try localizedStrings(in: XCTUnwrap(files["zh-Hans"])) + let unchangedNames: Set = ["PureMac", "PureMac.app", "CPU", "XProtect"] + + for (key, value) in english where !unchangedNames.contains(key) { + XCTAssertNotEqual( + chinese[key], value, + "Simplified Chinese still uses the English placeholder for: \(key)" + ) + } + } + private func localizableStringsFiles() throws -> [String: URL] { let sourceRoot = URL(fileURLWithPath: #filePath) .deletingLastPathComponent() @@ -152,7 +166,7 @@ final class LocalizationFilesTests: XCTestCase { } private func formatSignature(in value: String) -> [String] { - let pattern = #"%(?:(\d+)\$)?(lld|@|%)"# + let pattern = #"%(?:(\d+)\$)?(lld|llu|ld|lu|d|u|f|@|%)"# let regex = try! NSRegularExpression(pattern: pattern) let range = NSRange(value.startIndex..., in: value) var sequentialPosition = 1