mirror of
https://github.com/FBukovina/Atoll.git
synced 2026-10-27 15:14:33 +00:00
fix: correct localized string typo and replace remaining hardcoded strings
This commit is contained in:
parent
aecbe2ac35
commit
738a40ee88
6 changed files with 193 additions and 72 deletions
|
|
@ -3335,6 +3335,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Adjusts the lock screen timer widget width without affecting button sizing." : {
|
||||
|
||||
},
|
||||
"AI Assistant" : {
|
||||
"localizations" : {
|
||||
|
|
@ -6699,6 +6702,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Change Media Output" : {
|
||||
|
||||
},
|
||||
"Charging" : {
|
||||
"comment" : "Charging fallback label when no estimate is available",
|
||||
|
|
@ -9314,6 +9320,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Custom Focus metadata" : {
|
||||
|
||||
},
|
||||
"Custom height" : {
|
||||
"localizations" : {
|
||||
|
|
@ -10287,6 +10296,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Denied" : {
|
||||
|
||||
},
|
||||
"Denied/Revoked" : {
|
||||
"comment" : "A label describing an extension with denied or revoked permissions.",
|
||||
|
|
@ -11860,6 +11872,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Empty Slot" : {
|
||||
|
||||
},
|
||||
"Enable \"Idle Animation\" to customize animations" : {
|
||||
"localizations" : {
|
||||
|
|
@ -11994,6 +12009,9 @@
|
|||
},
|
||||
"Enable Color Picker" : {
|
||||
|
||||
},
|
||||
"Enable colored spectograms" : {
|
||||
|
||||
},
|
||||
"Enable colored spectrograms" : {
|
||||
"localizations" : {
|
||||
|
|
@ -13868,6 +13886,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Forward 10s" : {
|
||||
|
||||
},
|
||||
"Free" : {
|
||||
|
||||
|
|
@ -13916,6 +13937,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Full Access" : {
|
||||
|
||||
},
|
||||
"Full charge" : {
|
||||
"comment" : "Text displayed in the status text when the battery is fully charged.",
|
||||
|
|
@ -13951,6 +13975,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Full Disk Access unlocks custom Focus icons, colors, and labels. Standard Focus detection still works without it—grant access only if you need personalized indicators." : {
|
||||
|
||||
},
|
||||
"Fully charged" : {
|
||||
"comment" : "Charging fallback label when already charged",
|
||||
|
|
@ -14922,6 +14949,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Hide active event and show next upcoming event" : {
|
||||
|
||||
},
|
||||
"Hide all-day events" : {
|
||||
"comment" : "A toggle to hide all-day events in the calendar.",
|
||||
|
|
@ -15365,6 +15395,9 @@
|
|||
}
|
||||
},
|
||||
"shouldTranslate" : false
|
||||
},
|
||||
"Hours" : {
|
||||
|
||||
},
|
||||
"https://example.com/animation.json" : {
|
||||
"comment" : "A placeholder text for a Lottie JSON URL input field.",
|
||||
|
|
@ -16453,6 +16486,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Last Update" : {
|
||||
|
||||
},
|
||||
"Last Updated" : {
|
||||
"localizations" : {
|
||||
|
|
@ -17440,6 +17476,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Lyrics" : {
|
||||
|
||||
},
|
||||
"Mac battery at %d percent" : {
|
||||
"comment" : "Mac battery gauge accessibility label",
|
||||
|
|
@ -18370,6 +18409,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Media Panel Width" : {
|
||||
|
||||
},
|
||||
"Media playback live activity" : {
|
||||
"localizations" : {
|
||||
|
|
@ -19704,6 +19746,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Music" : {
|
||||
|
||||
},
|
||||
"Music panel variant" : {
|
||||
"localizations" : {
|
||||
|
|
@ -20334,6 +20379,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Next Track" : {
|
||||
|
||||
},
|
||||
"No active interfaces detected yet." : {
|
||||
"comment" : "A message displayed when there are no active network interfaces to display.",
|
||||
|
|
@ -21237,6 +21285,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Not Determined" : {
|
||||
|
||||
},
|
||||
"Not Now" : {
|
||||
"localizations" : {
|
||||
|
|
@ -22104,6 +22155,9 @@
|
|||
},
|
||||
"Open notch on hover" : {
|
||||
|
||||
},
|
||||
"Open Privacy & Security" : {
|
||||
|
||||
},
|
||||
"Open shelf tab by default if items added" : {
|
||||
|
||||
|
|
@ -22585,6 +22639,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Play / Pause" : {
|
||||
|
||||
},
|
||||
"Play feedback when volume is changed" : {
|
||||
|
||||
|
|
@ -22965,6 +23022,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Previous Track" : {
|
||||
|
||||
},
|
||||
"Privacy Indicators" : {
|
||||
"comment" : "A heading for the section that lists privacy indicators.",
|
||||
|
|
@ -23592,6 +23652,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Recommended minimum width adjusts automatically based on the number of enabled tabs." : {
|
||||
|
||||
},
|
||||
"Recording" : {
|
||||
"localizations" : {
|
||||
|
|
@ -24012,6 +24075,9 @@
|
|||
},
|
||||
"Renderer" : {
|
||||
|
||||
},
|
||||
"Repeat" : {
|
||||
|
||||
},
|
||||
"Request Access" : {
|
||||
"localizations" : {
|
||||
|
|
@ -24040,6 +24106,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Request Full Disk Access" : {
|
||||
|
||||
},
|
||||
"Requires a third-party client with API plugin enabled." : {
|
||||
"comment" : "Description of a music controller type when it requires a third-party client with an API plugin enabled.",
|
||||
|
|
@ -24166,6 +24235,12 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Reset Media Width" : {
|
||||
|
||||
},
|
||||
"Reset Music" : {
|
||||
|
||||
},
|
||||
"Reset Notch Experiences" : {
|
||||
"comment" : "A menu item that resets all notch experiences for a particular app.",
|
||||
|
|
@ -24202,6 +24277,12 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Reset Timer" : {
|
||||
|
||||
},
|
||||
"Reset Timer Width" : {
|
||||
|
||||
},
|
||||
"Reset to Default" : {
|
||||
"localizations" : {
|
||||
|
|
@ -24242,6 +24323,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Reset Weather" : {
|
||||
|
||||
},
|
||||
"Reset Width" : {
|
||||
"comment" : "A button to reset the expanded notch width to its default value.",
|
||||
|
|
@ -24479,6 +24563,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Restricted" : {
|
||||
|
||||
},
|
||||
"Resume" : {
|
||||
"localizations" : {
|
||||
|
|
@ -24525,6 +24612,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Rewind 10s" : {
|
||||
|
||||
},
|
||||
"Rich Text" : {
|
||||
"comment" : "Name for a clipboard item type that represents a rich text format.",
|
||||
|
|
@ -25158,7 +25248,6 @@
|
|||
}
|
||||
},
|
||||
"Seconds" : {
|
||||
"extractionState" : "stale",
|
||||
"localizations" : {
|
||||
"fr" : {
|
||||
"stringUnit" : {
|
||||
|
|
@ -26045,6 +26134,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Show \"Change Media Output\" control" : {
|
||||
|
||||
},
|
||||
"Show All Color Formats" : {
|
||||
|
||||
|
|
@ -26451,6 +26543,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Show floating media controls" : {
|
||||
|
||||
},
|
||||
"Show floating pause/stop controls" : {
|
||||
"localizations" : {
|
||||
|
|
@ -26527,6 +26622,9 @@
|
|||
},
|
||||
"Show media controls in Dynamic Island" : {
|
||||
|
||||
},
|
||||
"Show merged AirPlay and output devices" : {
|
||||
|
||||
},
|
||||
"Show next calendar event" : {
|
||||
|
||||
|
|
@ -27025,6 +27123,12 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Shrinks the lock screen media panel while keeping the expanded view full width." : {
|
||||
|
||||
},
|
||||
"Shuffle" : {
|
||||
|
||||
},
|
||||
"Simple and minimal interface with just the essentials for everyday tasks." : {
|
||||
"localizations" : {
|
||||
|
|
@ -29423,6 +29527,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Timer Widget Width" : {
|
||||
|
||||
},
|
||||
"Title" : {
|
||||
"comment" : "A label for the title input field in the note editor.",
|
||||
|
|
@ -31043,6 +31150,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Vertical Bar" : {
|
||||
|
||||
},
|
||||
"Vertical offset" : {
|
||||
"localizations" : {
|
||||
|
|
@ -31719,6 +31829,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Width adjustments apply only to the standard notch layout. Disable Minimalistic UI to edit this value." : {
|
||||
|
||||
},
|
||||
"Width:" : {
|
||||
"extractionState" : "stale",
|
||||
|
|
@ -31819,6 +31932,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Write Only" : {
|
||||
|
||||
},
|
||||
"Written" : {
|
||||
|
||||
|
|
|
|||
|
|
@ -272,7 +272,7 @@ extension EKCalendar {
|
|||
var accountTitle: String {
|
||||
switch source.sourceType {
|
||||
case .local, .subscribed, .birthdays:
|
||||
return "Other"
|
||||
return String(localized: "Other")
|
||||
default:
|
||||
return source.title
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1609,7 +1609,7 @@ private struct HUDAndOSDSettingsView: View {
|
|||
VStack(spacing: 20) {
|
||||
HStack(spacing: 16) {
|
||||
HUDSelectionCard(
|
||||
title: "Dynamic Island",
|
||||
title: String(localized: "Dynamic Island"),
|
||||
isSelected: selectedTab == .hud,
|
||||
action: {
|
||||
selectedTab = .hud
|
||||
|
|
@ -1649,7 +1649,7 @@ private struct HUDAndOSDSettingsView: View {
|
|||
}
|
||||
|
||||
HUDSelectionCard(
|
||||
title: "Custom OSD",
|
||||
title: String(localized: "Custom OSD"),
|
||||
isSelected: selectedTab == .osd,
|
||||
action: {
|
||||
selectedTab = .osd
|
||||
|
|
@ -1691,7 +1691,7 @@ private struct HUDAndOSDSettingsView: View {
|
|||
}
|
||||
|
||||
HUDSelectionCard(
|
||||
title: "Vertical Bar",
|
||||
title: String(localized: "Vertical Bar"),
|
||||
isSelected: selectedTab == .vertical,
|
||||
action: {
|
||||
selectedTab = .vertical
|
||||
|
|
@ -1734,7 +1734,7 @@ private struct HUDAndOSDSettingsView: View {
|
|||
}
|
||||
|
||||
HUDSelectionCard(
|
||||
title: "Circular",
|
||||
title: String(localized: "Circular"),
|
||||
isSelected: selectedTab == .circular,
|
||||
action: {
|
||||
selectedTab = .circular
|
||||
|
|
@ -2527,7 +2527,9 @@ struct Media: View {
|
|||
}
|
||||
}
|
||||
if showShuffleAndRepeat {
|
||||
Defaults.Toggle("Show \"Change Media Output\" control", key: .showMediaOutputControl)
|
||||
Defaults.Toggle(key: .showMediaOutputControl) {
|
||||
Text("Show \"Change Media Output\" control")
|
||||
}
|
||||
.settingsHighlight(id: highlightID("Show Change Media Output control"))
|
||||
.help("Adds the AirPlay/route picker button back to the customizable controls palette.")
|
||||
MusicSlotConfigurationView()
|
||||
|
|
@ -2574,10 +2576,9 @@ struct Media: View {
|
|||
)
|
||||
.disabled(standardControlsSuppressed)
|
||||
.help(standardControlsSuppressed ? "Standard notch media controls are hidden while this toggle is off." : "")
|
||||
Defaults.Toggle(
|
||||
"Show floating media controls",
|
||||
key: .musicControlWindowEnabled
|
||||
)
|
||||
Defaults.Toggle(key: .musicControlWindowEnabled) {
|
||||
Text("Show floating media controls")
|
||||
}
|
||||
.disabled(!coordinator.musicLiveActivityEnabled || standardControlsSuppressed)
|
||||
.help("Displays play/pause and skip buttons beside the notch while music is active. Disabled by default.")
|
||||
Toggle("Enable sneak peek", isOn: $enableSneakPeek)
|
||||
|
|
@ -2622,7 +2623,9 @@ struct Media: View {
|
|||
}
|
||||
.disabled(!enableLockScreenMediaWidget)
|
||||
if isAppleMusicActive {
|
||||
Defaults.Toggle("Show merged AirPlay and output devices", key: .lockScreenMusicMergedAirPlayOutput)
|
||||
Defaults.Toggle(key: .lockScreenMusicMergedAirPlayOutput) {
|
||||
Text("Show merged AirPlay and output devices")
|
||||
}
|
||||
.disabled(!enableLockScreenMediaWidget)
|
||||
.settingsHighlight(id: highlightID("Show merged AirPlay and output devices"))
|
||||
}
|
||||
|
|
@ -2974,10 +2977,9 @@ struct CalendarSettings: View {
|
|||
}
|
||||
}
|
||||
|
||||
Defaults.Toggle(
|
||||
"Hide active event and show next upcoming event",
|
||||
key: .lockScreenShowCalendarEventAfterStartEnabled
|
||||
)
|
||||
Defaults.Toggle(key: .lockScreenShowCalendarEventAfterStartEnabled) {
|
||||
Text("Hide active event and show next upcoming event")
|
||||
}
|
||||
.disabled(!lockScreenShowCalendarEvent || lockScreenShowCalendarEventEntireDuration)
|
||||
.settingsHighlight(id: highlightID("Hide active event and show next upcoming event"))
|
||||
|
||||
|
|
@ -3076,12 +3078,12 @@ struct CalendarSettings: View {
|
|||
|
||||
private func statusText(for status: EKAuthorizationStatus) -> String {
|
||||
switch status {
|
||||
case .fullAccess, .authorized: return "Full Access"
|
||||
case .writeOnly: return "Write Only"
|
||||
case .denied: return "Denied"
|
||||
case .restricted: return "Restricted"
|
||||
case .notDetermined: return "Not Determined"
|
||||
@unknown default: return "Unknown"
|
||||
case .fullAccess, .authorized: return String(localized: "Full Access")
|
||||
case .writeOnly: return String(localized: "Write Only")
|
||||
case .denied: return String(localized: "Denied")
|
||||
case .restricted: return String(localized: "Restricted")
|
||||
case .notDetermined: return String(localized: "Not Determined")
|
||||
@unknown default: return String(localized: "Unknown")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3553,12 +3555,12 @@ struct LiveActivitiesSettings: View {
|
|||
Section {
|
||||
if !fullDiskAccessPermission.isAuthorized {
|
||||
SettingsPermissionCallout(
|
||||
title: "Custom Focus metadata",
|
||||
message: "Full Disk Access unlocks custom Focus icons, colors, and labels. Standard Focus detection still works without it—grant access only if you need personalized indicators.",
|
||||
title: String(localized: "Custom Focus metadata"),
|
||||
message: String(localized: "Full Disk Access unlocks custom Focus icons, colors, and labels. Standard Focus detection still works without it—grant access only if you need personalized indicators."),
|
||||
icon: "externaldrive.fill",
|
||||
iconColor: .purple,
|
||||
requestButtonTitle: "Request Full Disk Access",
|
||||
openSettingsButtonTitle: "Open Privacy & Security",
|
||||
requestButtonTitle: String(localized: "Request Full Disk Access"),
|
||||
openSettingsButtonTitle: String(localized: "Open Privacy & Security"),
|
||||
requestAction: { fullDiskAccessPermission.requestAccessPrompt() },
|
||||
openSettingsAction: { fullDiskAccessPermission.openSystemSettings() }
|
||||
)
|
||||
|
|
@ -3938,8 +3940,9 @@ struct Appearance: View {
|
|||
Text("Enable colored spectrograms")
|
||||
}
|
||||
.settingsHighlight(id: highlightID("Enable colored spectrograms"))
|
||||
Defaults
|
||||
.Toggle("Player tinting", key: .playerColorTinting)
|
||||
Defaults.Toggle(key: .playerColorTinting) {
|
||||
Text("Enable colored spectograms")
|
||||
}
|
||||
Defaults.Toggle(key: .lightingEffect) {
|
||||
Text("Enable blur effect behind album art")
|
||||
}
|
||||
|
|
@ -4403,8 +4406,8 @@ struct Appearance: View {
|
|||
}
|
||||
|
||||
let description = enableMinimalisticUI
|
||||
? "Width adjustments apply only to the standard notch layout. Disable Minimalistic UI to edit this value."
|
||||
: "Recommended minimum width adjusts automatically based on the number of enabled tabs."
|
||||
? String(localized: "Width adjustments apply only to the standard notch layout. Disable Minimalistic UI to edit this value.")
|
||||
: String(localized: "Recommended minimum width adjusts automatically based on the number of enabled tabs.")
|
||||
|
||||
Text(description)
|
||||
.font(.caption)
|
||||
|
|
@ -4638,7 +4641,9 @@ struct LockScreenSettings: View {
|
|||
.disabled(!enableLockScreenMediaWidget)
|
||||
.settingsHighlight(id: highlightID("Show media app icon"))
|
||||
if isAppleMusicActive {
|
||||
Defaults.Toggle("Show merged AirPlay and output devices", key: .lockScreenMusicMergedAirPlayOutput)
|
||||
Defaults.Toggle(key: .lockScreenMusicMergedAirPlayOutput) {
|
||||
Text("Show merged AirPlay and output devices")
|
||||
}
|
||||
.disabled(!enableLockScreenMediaWidget)
|
||||
.settingsHighlight(id: highlightID("Show merged AirPlay and output devices"))
|
||||
}
|
||||
|
|
@ -5248,9 +5253,9 @@ private struct LockScreenPositioningControls: View {
|
|||
|
||||
HStack(alignment: .top, spacing: 24) {
|
||||
offsetColumn(
|
||||
title: "Weather",
|
||||
title: String(localized: "Weather"),
|
||||
value: weatherOffset,
|
||||
resetTitle: "Reset Weather",
|
||||
resetTitle: String(localized: "Reset Weather"),
|
||||
resetAction: resetWeatherOffset
|
||||
)
|
||||
|
||||
|
|
@ -5258,9 +5263,9 @@ private struct LockScreenPositioningControls: View {
|
|||
.frame(height: 64)
|
||||
|
||||
offsetColumn(
|
||||
title: "Timer",
|
||||
title: String(localized: "Timer"),
|
||||
value: timerOffset,
|
||||
resetTitle: "Reset Timer",
|
||||
resetTitle: String(localized: "Reset Timer"),
|
||||
resetAction: resetTimerOffset
|
||||
)
|
||||
|
||||
|
|
@ -5268,9 +5273,9 @@ private struct LockScreenPositioningControls: View {
|
|||
.frame(height: 64)
|
||||
|
||||
offsetColumn(
|
||||
title: "Music",
|
||||
title: String(localized: "Music"),
|
||||
value: musicOffset,
|
||||
resetTitle: "Reset Music",
|
||||
resetTitle: String(localized: "Reset Music"),
|
||||
resetAction: resetMusicOffset
|
||||
)
|
||||
|
||||
|
|
@ -5282,21 +5287,21 @@ private struct LockScreenPositioningControls: View {
|
|||
|
||||
VStack(alignment: .leading, spacing: 16) {
|
||||
widthSlider(
|
||||
title: "Media Panel Width",
|
||||
title: String(localized: "Media Panel Width"),
|
||||
value: musicWidthBinding,
|
||||
range: musicWidthRange,
|
||||
resetTitle: "Reset Media Width",
|
||||
resetTitle: String(localized: "Reset Media Width"),
|
||||
resetAction: resetMusicWidth,
|
||||
helpText: "Shrinks the lock screen media panel while keeping the expanded view full width."
|
||||
helpText: String(localized: "Shrinks the lock screen media panel while keeping the expanded view full width.")
|
||||
)
|
||||
|
||||
widthSlider(
|
||||
title: "Timer Widget Width",
|
||||
title: String(localized: "Timer Widget Width"),
|
||||
value: timerWidthBinding,
|
||||
range: timerWidthRange,
|
||||
resetTitle: "Reset Timer Width",
|
||||
resetTitle: String(localized: "Reset Timer Width"),
|
||||
resetAction: resetTimerWidth,
|
||||
helpText: "Adjusts the lock screen timer widget width without affecting button sizing."
|
||||
helpText: String(localized: "Adjusts the lock screen timer widget width without affecting button sizing.")
|
||||
)
|
||||
}
|
||||
} header: {
|
||||
|
|
@ -6136,9 +6141,9 @@ struct TimerSettings: View {
|
|||
Text("Default Custom Timer")
|
||||
.font(.headline)
|
||||
|
||||
TimerDurationStepperRow(title: "Hours", value: $customHours, range: 0...23)
|
||||
TimerDurationStepperRow(title: "Minutes", value: $customMinutes, range: 0...59)
|
||||
TimerDurationStepperRow(title: "Seconds", value: $customSeconds, range: 0...59)
|
||||
TimerDurationStepperRow(title: String(localized: "Hours"), value: $customHours, range: 0...23)
|
||||
TimerDurationStepperRow(title: String(localized: "Minutes"), value: $customMinutes, range: 0...59)
|
||||
TimerDurationStepperRow(title: String(localized: "Seconds"), value: $customSeconds, range: 0...59)
|
||||
|
||||
HStack {
|
||||
Text("Current default:")
|
||||
|
|
@ -6478,9 +6483,9 @@ private struct TimerPresetEditorRow: View {
|
|||
}
|
||||
|
||||
HStack(spacing: 16) {
|
||||
TimerPresetComponentControl(title: "Hours", value: hoursBinding, range: 0...23)
|
||||
TimerPresetComponentControl(title: "Minutes", value: minutesBinding, range: 0...59)
|
||||
TimerPresetComponentControl(title: "Seconds", value: secondsBinding, range: 0...59)
|
||||
TimerPresetComponentControl(title: String(localized: "Hours"), value: hoursBinding, range: 0...23)
|
||||
TimerPresetComponentControl(title: String(localized: "Minutes"), value: minutesBinding, range: 0...59)
|
||||
TimerPresetComponentControl(title: String(localized: "Seconds"), value: secondsBinding, range: 0...59)
|
||||
}
|
||||
|
||||
ColorPicker("Accent colour", selection: colorBinding, supportsOpacity: false)
|
||||
|
|
|
|||
|
|
@ -77,10 +77,10 @@ struct CPUUsageDashboard: View {
|
|||
Text("Usage")
|
||||
.font(.caption)
|
||||
.foregroundColor(.secondary)
|
||||
DetailRow(color: systemColor.opacity(0.95), label: "System", value: StatsFormatting.percentage(breakdown.system))
|
||||
DetailRow(color: userColor.opacity(0.95), label: "User", value: StatsFormatting.percentage(breakdown.user))
|
||||
DetailRow(color: idleColor.opacity(0.7), label: "Idle", value: StatsFormatting.percentage(breakdown.idle))
|
||||
DetailRow(color: nil, label: "Active", value: StatsFormatting.percentage(breakdown.activeUsage))
|
||||
DetailRow(color: systemColor.opacity(0.95), label: String(localized: "System"), value: StatsFormatting.percentage(breakdown.system))
|
||||
DetailRow(color: userColor.opacity(0.95), label: String(localized: "User"), value: StatsFormatting.percentage(breakdown.user))
|
||||
DetailRow(color: idleColor.opacity(0.7), label: String(localized: "Idle"), value: StatsFormatting.percentage(breakdown.idle))
|
||||
DetailRow(color: nil, label: String(localized: "stats_resource_active", defaultValue: "Active"), value: StatsFormatting.percentage(breakdown.activeUsage))
|
||||
}
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
|
||||
|
|
@ -171,7 +171,7 @@ private struct CPUTemperatureGauge: View {
|
|||
|
||||
var body: some View {
|
||||
CircularGaugeView(
|
||||
title: "Temperature",
|
||||
title: String(localized: "Temperature"),
|
||||
value: normalizedValue,
|
||||
tint: tint,
|
||||
centerPrimaryText: centerPrimary,
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ private struct GPUUsageDashboard: View {
|
|||
.font(.caption)
|
||||
.foregroundColor(.secondary)
|
||||
DetailRow(color: nil, label: String(localized: "Session Avg"), value: StatsFormatting.percentage(averageUsage))
|
||||
DetailRow(color: nil, label: String("localized: Last Update"), value: formattedTimestamp(lastUpdated))
|
||||
DetailRow(color: nil, label: String(localized: "Last Update"), value: formattedTimestamp(lastUpdated))
|
||||
if let device = primaryDevice {
|
||||
Divider().padding(.vertical, 4)
|
||||
DetailRow(color: nil, label: String(localized: "Active GPU"), value: device.formattedVendorModel)
|
||||
|
|
|
|||
|
|
@ -76,27 +76,27 @@ enum MusicControlButton: String, CaseIterable, Identifiable, Codable, Defaults.S
|
|||
var label: String {
|
||||
switch self {
|
||||
case .shuffle:
|
||||
return "Shuffle"
|
||||
return String(localized: "Shuffle")
|
||||
case .trackBackward:
|
||||
return "Previous Track"
|
||||
return String(localized: "Previous Track")
|
||||
case .playPause:
|
||||
return "Play / Pause"
|
||||
return String(localized: "Play / Pause")
|
||||
case .trackForward:
|
||||
return "Next Track"
|
||||
return String(localized: "Next Track")
|
||||
case .repeatMode:
|
||||
return "Repeat"
|
||||
return String(localized: "Repeat")
|
||||
case .mediaOutput:
|
||||
return "Change Media Output"
|
||||
return String(localized: "Change Media Output")
|
||||
case .airPlay:
|
||||
return "AirPlay"
|
||||
return String(localized: "AirPlay")
|
||||
case .lyrics:
|
||||
return "Lyrics"
|
||||
return String(localized: "Lyrics")
|
||||
case .seekBackward:
|
||||
return "Rewind 10s"
|
||||
return String(localized: "Rewind 10s")
|
||||
case .seekForward:
|
||||
return "Forward 10s"
|
||||
return String(localized: "Forward 10s")
|
||||
case .none:
|
||||
return "Empty Slot"
|
||||
return String(localized: "Empty Slot")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue