feat: complete missing zh-Hans localization and fix hardcoded UI strings

This commit is contained in:
RoyShan 2026-05-17 20:47:02 +08:00
commit a980c87e80
3 changed files with 31422 additions and 30252 deletions

File diff suppressed because it is too large Load diff

View file

@ -113,27 +113,27 @@ private enum SettingsTab: String, CaseIterable, Identifiable {
var systemImage: String { var systemImage: String {
switch self { switch self {
case .general: return "gear" case .general: return String(localized: "gear")
case .liveActivities: return "waveform.path.ecg" case .liveActivities: return String(localized: "waveform.path.ecg")
case .appearance: return "paintpalette" case .appearance: return String(localized: "paintpalette")
case .lockScreen: return "lock.laptopcomputer" case .lockScreen: return String(localized: "lock.laptopcomputer")
case .media: return "play.laptopcomputer" case .media: return String(localized: "play.laptopcomputer")
case .devices: return "headphones" case .devices: return String(localized: "headphones")
case .extensions: return "puzzlepiece.extension" case .extensions: return String(localized: "puzzlepiece.extension")
case .timer: return "timer" case .timer: return String(localized: "timer")
case .calendar: return "calendar" case .calendar: return String(localized: "calendar")
case .hudAndOSD: return "dial.medium.fill" case .hudAndOSD: return String(localized: "dial.medium.fill")
case .battery: return "battery.100.bolt" case .battery: return String(localized: "battery.100.bolt")
case .stats: return "chart.xyaxis.line" case .stats: return String(localized: "chart.xyaxis.line")
case .clipboard: return "clipboard" case .clipboard: return String(localized: "clipboard")
case .screenAssistant: return "brain.head.profile" case .screenAssistant: return String(localized: "brain.head.profile")
case .colorPicker: return "eyedropper" case .colorPicker: return String(localized: "eyedropper")
case .downloads: return "square.and.arrow.down" case .downloads: return String(localized: "square.and.arrow.down")
case .shelf: return "books.vertical" case .shelf: return String(localized: "books.vertical")
case .shortcuts: return "keyboard" case .shortcuts: return String(localized: "keyboard")
case .notes: return "note.text" case .notes: return String(localized: "note.text")
case .terminal: return "apple.terminal" case .terminal: return String(localized: "apple.terminal")
case .about: return "info.circle" case .about: return String(localized: "info.circle")
} }
} }
@ -627,10 +627,10 @@ struct SettingsView: View {
} }
VStack(alignment: .leading, spacing: 2) { VStack(alignment: .leading, spacing: 2) {
Text(suggestion.title) Text(LocalizedStringKey(suggestion.title))
.font(.system(size: 13, weight: .semibold)) .font(.system(size: 13, weight: .semibold))
.foregroundStyle(Color.primary) .foregroundStyle(Color.primary)
Text(suggestion.tab.title) Text(LocalizedStringKey(suggestion.tab.title))
.font(.system(size: 11)) .font(.system(size: 11))
.foregroundStyle(Color.secondary) .foregroundStyle(Color.secondary)
} }
@ -2226,12 +2226,12 @@ private struct ExternalDisplayIntegrationsSection: View {
case .betterDisplay: case .betterDisplay:
if betterDisplayManager.isRunning { return "Running" } if betterDisplayManager.isRunning { return "Running" }
if betterDisplayManager.isDetected { return "Not running" } if betterDisplayManager.isDetected { return "Not running" }
return "Not detected" return String(localized: "Not detected")
case .lunar: case .lunar:
if lunarManager.isConnected { return "Connected" } if lunarManager.isConnected { return "Connected" }
if lunarManager.isRunning { return "Running" } if lunarManager.isRunning { return "Running" }
if lunarManager.isDetected { return "Not running" } if lunarManager.isDetected { return "Not running" }
return "Not detected" return String(localized: "Not detected")
} }
} }
@ -2253,23 +2253,23 @@ private struct ExternalDisplayIntegrationsSection: View {
switch thirdPartyDDCProvider { switch thirdPartyDDCProvider {
case .betterDisplay: case .betterDisplay:
if !betterDisplayManager.isDetected { if !betterDisplayManager.isDetected {
return "Install [BetterDisplay](https://betterdisplay.pro) to control external display brightness (and optional volume) through Atoll's HUD." return String(localized: "Install [BetterDisplay](https://betterdisplay.pro) to control external display brightness (and optional volume) through Atoll's HUD.")
} }
if !betterDisplayManager.isRunning { if !betterDisplayManager.isRunning {
return "BetterDisplay is installed but not currently running. Launch BetterDisplay to enable integration." return String(localized: "BetterDisplay is installed but not currently running. Launch BetterDisplay to enable integration.")
} }
return "BetterDisplay OSD events will be routed through Atoll's active HUD style. Brightness is always routed; volume is routed when external volume control listener is enabled below. Make sure BetterDisplay's OSD integration is enabled in Settings › Application › Integration." return String(localized: "BetterDisplay OSD events will be routed through Atoll's active HUD style. Brightness is always routed; volume is routed when external volume control listener is enabled below. Make sure BetterDisplay's OSD integration is enabled in Settings › Application › Integration.")
case .lunar: case .lunar:
if !lunarManager.isDetected { if !lunarManager.isDetected {
return "Install [Lunar](https://lunar.fyi) to control external display brightness, contrast, and optional volume through Atoll's HUD via DDC." return String(localized: "Install [Lunar](https://lunar.fyi) to control external display brightness, contrast, and optional volume through Atoll's HUD via DDC.")
} }
if !lunarManager.isRunning { if !lunarManager.isRunning {
return "Lunar is installed but not currently running. Launch Lunar to enable integration." return String(localized: "Lunar is installed but not currently running. Launch Lunar to enable integration.")
} }
if lunarManager.isConnected { if lunarManager.isConnected {
return "Connected to Lunar's DDC socket. Brightness and contrast adjustments are shown through Atoll's HUD; volume follows when external volume control listener is enabled below." return String(localized: "Connected to Lunar's DDC socket. Brightness and contrast adjustments are shown through Atoll's HUD; volume follows when external volume control listener is enabled below.")
} }
return "Lunar is running but the socket connection is not yet established. It will connect automatically." return String(localized: "Lunar is running but the socket connection is not yet established. It will connect automatically.")
} }
} }
@ -3040,14 +3040,14 @@ struct CalendarSettings: View {
var title: String { var title: String {
switch self { switch self {
case .mins15: return "15 mins" case .mins15: return String(localized: "15 mins")
case .mins30: return "30 mins" case .mins30: return String(localized: "30 mins")
case .hour1: return "1 hour" case .hour1: return String(localized: "1 hour")
case .hours3: return "3 hours" case .hours3: return String(localized: "3 hours")
case .hours6: return "6 hours" case .hours6: return String(localized: "6 hours")
case .hours12: return "12 hours" case .hours12: return String(localized: "12 hours")
case .restOfDay: return "Rest of the day" case .restOfDay: return String(localized: "Rest of the day")
case .allTime: return "All time" case .allTime: return String(localized: "All time")
} }
} }
} }
@ -3538,9 +3538,9 @@ private extension DevicesSettingsView {
var title: String { var title: String {
switch self { switch self {
case .symbol: case .symbol:
return "Symbol" return String(localized: "Symbol")
case .threeD: case .threeD:
return "3D" return String(localized: "3D")
} }
} }
} }
@ -4876,14 +4876,14 @@ struct LockScreenSettings: View {
var title: String { var title: String {
switch self { switch self {
case .mins15: return "15 mins" case .mins15: return String(localized: "15 mins")
case .mins30: return "30 mins" case .mins30: return String(localized: "30 mins")
case .hour1: return "1 hour" case .hour1: return String(localized: "1 hour")
case .hours3: return "3 hours" case .hours3: return String(localized: "3 hours")
case .hours6: return "6 hours" case .hours6: return String(localized: "6 hours")
case .hours12: return "12 hours" case .hours12: return String(localized: "12 hours")
case .restOfDay: return "Rest of the day" case .restOfDay: return String(localized: "Rest of the day")
case .allTime: return "All time" case .allTime: return String(localized: "All time")
} }
} }
} }
@ -4897,9 +4897,9 @@ struct LockScreenSettings: View {
var title: String { var title: String {
switch self { switch self {
case .leading: return "Left" case .leading: return String(localized: "Left")
case .center: return "Center" case .center: return String(localized: "Center")
case .trailing: return "Right" case .trailing: return String(localized: "Right")
} }
} }
} }
@ -6972,11 +6972,11 @@ struct StatsSettings: View {
private var formattedUpdateInterval: String { private var formattedUpdateInterval: String {
let seconds = Int(statsUpdateInterval.rounded()) let seconds = Int(statsUpdateInterval.rounded())
if seconds >= 60 { if seconds >= 60 {
return "60 s (1 min)" return String(localized: "60 s (1 min)")
} else if seconds == 1 { } else if seconds == 1 {
return "1 s" return String(localized: "1 s")
} else { } else {
return "\(seconds) s" return String(localized: "\(seconds) s")
} }
} }
@ -7368,16 +7368,16 @@ struct ClipboardSettings: View {
let interval = Date().timeIntervalSince(date) let interval = Date().timeIntervalSince(date)
if interval < 60 { if interval < 60 {
return "Just now" return String(localized: "Just now")
} else if interval < 3600 { } else if interval < 3600 {
let minutes = Int(interval / 60) let minutes = Int(interval / 60)
return "\(minutes)m ago" return String(localized: "\(minutes)m ago")
} else if interval < 86400 { } else if interval < 86400 {
let hours = Int(interval / 3600) let hours = Int(interval / 3600)
return "\(hours)h ago" return String(localized: "\(hours)h ago")
} else { } else {
let days = Int(interval / 86400) let days = Int(interval / 86400)
return "\(days)d ago" return String(localized: "\(days)d ago")
} }
} }
} }
@ -7546,16 +7546,16 @@ struct ScreenAssistantSettings: View {
let interval = Date().timeIntervalSince(date) let interval = Date().timeIntervalSince(date)
if interval < 60 { if interval < 60 {
return "Just now" return String(localized: "Just now")
} else if interval < 3600 { } else if interval < 3600 {
let minutes = Int(interval / 60) let minutes = Int(interval / 60)
return "\(minutes)m ago" return String(localized: "\(minutes)m ago")
} else if interval < 86400 { } else if interval < 86400 {
let hours = Int(interval / 3600) let hours = Int(interval / 3600)
return "\(hours)h ago" return String(localized: "\(hours)h ago")
} else { } else {
let days = Int(interval / 86400) let days = Int(interval / 86400)
return "\(days)d ago" return String(localized: "\(days)d ago")
} }
} }
} }
@ -7920,21 +7920,21 @@ struct SettingsPermissionCallout: View {
var body: some View { var body: some View {
VStack(alignment: .leading, spacing: 8) { VStack(alignment: .leading, spacing: 8) {
Label(title, systemImage: icon) Label(LocalizedStringKey(title), systemImage: icon)
.font(.subheadline.weight(.semibold)) .font(.subheadline.weight(.semibold))
.foregroundStyle(iconColor) .foregroundStyle(iconColor)
Text(message) Text(LocalizedStringKey(message))
.font(.caption) .font(.caption)
.foregroundStyle(.secondary) .foregroundStyle(.secondary)
HStack(spacing: 8) { HStack(spacing: 8) {
Button(requestButtonTitle) { Button(LocalizedStringKey(requestButtonTitle)) {
requestAction() requestAction()
} }
.buttonStyle(.borderedProminent) .buttonStyle(.borderedProminent)
Button(openSettingsButtonTitle) { Button(LocalizedStringKey(openSettingsButtonTitle)) {
openSettingsAction() openSettingsAction()
} }
.buttonStyle(.bordered) .buttonStyle(.bordered)

View file

@ -11994,8 +11994,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "Amazon Music"
} }
} }
} }
@ -36021,6 +36021,12 @@
"value": "Включить медиа ", "value": "Включить медиа ",
"state": "translated" "state": "translated"
} }
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "启用媒体 "
}
} }
} }
}, },
@ -60469,8 +60475,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "仅应用图标"
} }
} }
} }
@ -60599,8 +60605,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "仅下载图标"
} }
} }
} }
@ -60729,8 +60735,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "透明度:"
} }
} }
} }
@ -60865,8 +60871,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "打开 Google AI Studio"
} }
} }
} }
@ -60996,8 +61002,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "在日历中打开"
} }
} }
} }
@ -61132,8 +61138,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "打开模型设置"
} }
} }
} }
@ -61152,6 +61158,12 @@
"value": "Открывать вырез при наведении", "value": "Открывать вырез при наведении",
"state": "translated" "state": "translated"
} }
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "悬停时打开刘海"
}
} }
} }
}, },
@ -61280,8 +61292,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "打开设置"
} }
} }
} }
@ -61558,8 +61570,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "打开 AI 助手面板,进行文件分析与对话。默认为 Cmd+Shift+A。仅在启用屏幕助手功能时有效。"
} }
} }
} }
@ -61700,8 +61712,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "打开剪贴板历史记录面板。默认为 Cmd+Shift+V(类似于 PC 上的 Windows+V)。仅在启用剪贴板功能时有效。"
} }
} }
} }
@ -61842,8 +61854,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "打开取色器面板进行屏幕颜色捕获。默认为 Cmd+Shift+P。仅在启用取色器功能时有效。"
} }
} }
} }
@ -61973,8 +61985,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "输出设备"
} }
} }
} }
@ -62104,8 +62116,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "输出音量"
} }
} }
} }
@ -62246,8 +62258,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "面板模式会在刘海附近的浮动窗口中显示剪贴板。弹出模式会将剪贴板显示为附加在剪贴板按钮上的下拉菜单。"
} }
} }
} }
@ -62388,8 +62400,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "面板模式会在浮动窗口中显示取色器。弹出模式会将取色器显示为附加在取色器按钮上的下拉菜单。"
} }
} }
} }
@ -62530,8 +62542,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "面板模式会在刘海附近的浮动窗口中显示助手。弹出模式会将助手显示为附加在 AI 按钮上的下拉菜单。"
} }
} }
} }
@ -62790,8 +62802,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "已暂停"
} }
} }
} }
@ -63310,8 +63322,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "已选取 %@"
} }
} }
} }
@ -63440,8 +63452,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "拾取的颜色"
} }
} }
} }
@ -63570,8 +63582,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "拾取状态"
} }
} }
} }
@ -63700,8 +63712,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "从历史记录中固定项目以保存在此处"
} }
} }
} }
@ -63830,8 +63842,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "固定项目以添加收藏"
} }
} }
} }
@ -63960,8 +63972,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "固定项目以将它们添加到收藏夹"
} }
} }
} }
@ -64090,8 +64102,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "已固定项目"
} }
} }
} }
@ -64226,8 +64238,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "请在模型设置中为所选的 AI 提供商配置您的 API 密钥。"
} }
} }
} }
@ -64521,8 +64533,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "弹出模式会将剪贴板显示为附加在剪贴板按钮上的下拉菜单。面板模式会在刘海附近的浮动窗口中显示剪贴板。"
} }
} }
} }
@ -64663,8 +64675,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "弹出模式会将取色器显示为附加在取色器按钮上的下拉菜单。面板模式会在浮动窗口中显示取色器。"
} }
} }
} }
@ -64805,8 +64817,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "弹出模式会将助手显示为附加在 AI 按钮上的下拉菜单。面板模式会在刘海附近的浮动窗口中显示助手。"
} }
} }
} }
@ -65340,8 +65352,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "预设将显示在计时器弹出窗口中,包括配置的名称、持续时间和重音颜色。重新排序以更改显示顺序。"
} }
} }
} }
@ -65471,8 +65483,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "气压"
} }
} }
} }
@ -65731,8 +65743,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "预览缩放:"
} }
} }
} }
@ -89120,8 +89132,8 @@
}, },
"zh-Hans": { "zh-Hans": {
"stringUnit": { "stringUnit": {
"state": "new", "state": "translated",
"value": "" "value": "当 Amazon Music 应用是活动媒体源时使用 macOS 正在播放。播放控制遵循系统正在播放目标。如果 Amazon Music 应用不支持远程拖拽,在时间轴上拖动可能无效。"
} }
} }
} }
@ -92636,6 +92648,266 @@
} }
} }
} }
},
"15 mins": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "15 分钟"
}
}
}
},
"30 mins": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "30 分钟"
}
}
}
},
"1 hour": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "1 小时"
}
}
}
},
"3 hours": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "3 小时"
}
}
}
},
"6 hours": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "6 小时"
}
}
}
},
"12 hours": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "12 小时"
}
}
}
},
"Rest of the day": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "今天余下的时间"
}
}
}
},
"All time": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "所有时间"
}
}
}
},
"Symbol": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "符号"
}
}
}
},
"3D": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "3D"
}
}
}
},
"Left": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "左对齐"
}
}
}
},
"Right": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "右对齐"
}
}
}
},
"Enable Minimalistic UI": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "启用极简 UI"
}
}
}
},
"Hide Dynamic Island during screenshots & recordings": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "截屏和录屏时隐藏灵动岛"
}
}
}
},
"Close gesture": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "关闭手势"
}
}
}
},
"Reverse swipe gestures": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "反向滑动"
}
}
}
},
"Reverse scroll gestures": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "反向滚动"
}
}
}
},
"Extend hover area": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "扩展悬停区域"
}
}
}
},
"External display style": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "外接显示器样式"
}
}
}
},
"Hide until hovered": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "悬停时显示"
}
}
}
},
"Enable Focus Detection": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "启用专注模式检测"
}
}
}
},
"Accessibility permission lets Dynamic Island replace the native volume, brightness, and keyboard HUDs.": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "辅助功能权限允许灵动岛替换原生的音量、亮度和键盘提示框。"
}
}
}
},
"Full Disk Access for global mode": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "全局模式需要完全磁盘访问权限"
}
}
}
},
"Without Full Disk Access, Shelf can only read files from Documents and Downloads. Grant Full Disk Access to make Shelf work globally.": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "如果没有完全磁盘访问权限,暂存器只能读取文档和下载目录的文件。授予完全磁盘访问权限以使暂存器能在全局范围工作。"
}
}
}
},
"Request Full Disk Access": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "请求完全磁盘访问权限"
}
}
}
},
"Open Privacy & Security": {
"localizations": {
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "打开隐私与安全性"
}
}
}
} }
}, },
"version": "1.1" "version": "1.1"