import AppKitimport CodexBarCoreimport SwiftUIenum AppLanguage: String, CaseIterable, Identifiable { case system = "" case english = "en" case chineseSimplified = "zh-Hans" case chineseTraditional = "zh-Hant" case japanese = "ja" case spanish = "es" case portugueseBrazilian = "pt-BR" case korean = "ko" case german = "de" case french = "fr" case arabic = "ar" case italian = "it" case vietnamese = "vi" case dutch = "nl" case turkish = "tr" case ukrainian = "uk" case russian = "ru" case indonesian = "id" case polish = "pl" case persian = "fa" case thai = "th" case galician = "gl" case catalan = "ca" case swedish = "sv" var id: String { self.rawValue } var label: String { L(self.labelKey, language: self.labelLanguage) } private var labelLanguage: String { switch self { case .system, .english: "en" default: self.rawValue } } private var labelKey: String { switch self { case .system: "language_system" case .english: "language_english" case .chineseSimplified: "language_chinese_simplified" case .chineseTraditional: "language_chinese_traditional" case .japanese: "language_japanese" case .spanish: "language_spanish" case .portugueseBrazilian: "language_portuguese_brazilian" case .korean: "language_korean" case .german: "language_german" case .french: "language_french" case .arabic: "language_arabic" case .italian: "language_italian" case .vietnamese: "language_vietnamese" case .dutch: "language_dutch" case .turkish: "language_turkish" case .ukrainian: "language_ukrainian" case .russian: "language_russian" case .indonesian: "language_indonesian" case .polish: "language_polish" case .persian: "language_persian" case .thai: "language_thai" case .galician: "language_galician" case .catalan: "language_catalan" case .swedish: "language_swedish" } }}@MainActorstruct GeneralPane: View { @Bindable var settings: SettingsStore var body: some View { Form { Section { SettingsMenuPicker( selection: self.$settings.appLanguage, options: GeneralSettingsMenuOptions.languages, label: { SettingsRowLabel(L("language_title"), subtitle: L("language_subtitle")) }, optionLabel: { rawValue in Text(verbatim: AppLanguage(rawValue: rawValue)?.label ?? rawValue) }) SettingsMenuPicker( selection: self.$settings.terminalApp, options: GeneralSettingsMenuOptions.terminalApps(selected: self.settings.terminalApp), label: { SettingsRowLabel(L("terminal_app_title"), subtitle: L("terminal_app_subtitle")) }, optionLabel: { option in HStack(spacing: 6) { if let icon = option.pickerIcon { Image(nsImage: icon) } Text(option.label) } }) Toggle(L("start_at_login_title"), isOn: self.$settings.launchAtLogin) } header: { Text(L("section_system")) } Section { SettingsMenuPicker( selection: self.$settings.refreshFrequency, options: GeneralSettingsMenuOptions.refreshFrequencies, label: { Text(L("refresh_interval_title")) }, optionLabel: { option in Text(option.label) }) Toggle(L("refresh_on_open_title"), isOn: self.$settings.refreshAllProvidersOnMenuOpen) Toggle(isOn: self.$settings.statusChecksEnabled) { SettingsRowLabel( L("check_provider_status_title"), subtitle: L("check_provider_status_subtitle")) } } header: { Text(L("section_refreshing")) } footer: { if self.settings.refreshFrequency == .manual { SettingsSectionFooter(L("manual_refresh_hint")) } } Section { LabeledContent(L("open_menu_shortcut_title")) { OpenMenuShortcutRecorder() } } header: { Text(L("section_keyboard_shortcut")) } Section { HStack { Spacer() Button(L("quit_app")) { NSApp.terminate(nil) } } } } .formStyle(.grouped) .toggleStyle(.switch) .scrollContentBackground(.hidden) .background(FocusResigningBackground()) }}
import AppKit
import CodexBarCore
import SwiftUI
enum AppLanguage: String, CaseIterable, Identifiable {
case system = ""
case english = "en"
case chineseSimplified = "zh-Hans"
case chineseTraditional = "zh-Hant"
case japanese = "ja"
case spanish = "es"
case portugueseBrazilian = "pt-BR"
case korean = "ko"
case german = "de"
case french = "fr"
case arabic = "ar"
case italian = "it"
case vietnamese = "vi"
case dutch = "nl"
case turkish = "tr"
case ukrainian = "uk"
case russian = "ru"
case indonesian = "id"
case polish = "pl"
case persian = "fa"
case thai = "th"
case galician = "gl"
case catalan = "ca"
case swedish = "sv"
var id: String {
self.rawValue
}
var label: String {
L(self.labelKey, language: self.labelLanguage)
}
private var labelLanguage: String {
switch self {
case .system, .english:
"en"
default:
self.rawValue
}
}
private var labelKey: String {
switch self {
case .system: "language_system"
case .english: "language_english"
case .chineseSimplified: "language_chinese_simplified"
case .chineseTraditional: "language_chinese_traditional"
case .japanese: "language_japanese"
case .spanish: "language_spanish"
case .portugueseBrazilian: "language_portuguese_brazilian"
case .korean: "language_korean"
case .german: "language_german"
case .french: "language_french"
case .arabic: "language_arabic"
case .italian: "language_italian"
case .vietnamese: "language_vietnamese"
case .dutch: "language_dutch"
case .turkish: "language_turkish"
case .ukrainian: "language_ukrainian"
case .russian: "language_russian"
case .indonesian: "language_indonesian"
case .polish: "language_polish"
case .persian: "language_persian"
case .thai: "language_thai"
case .galician: "language_galician"
case .catalan: "language_catalan"
case .swedish: "language_swedish"
}
}
}
@MainActor
struct GeneralPane: View {
@Bindable var settings: SettingsStore
var body: some View {
Form {
Section {
SettingsMenuPicker(
selection: self.$settings.appLanguage,
options: GeneralSettingsMenuOptions.languages,
label: {
SettingsRowLabel(L("language_title"), subtitle: L("language_subtitle"))
},
optionLabel: { rawValue in
Text(verbatim: AppLanguage(rawValue: rawValue)?.label ?? rawValue)
})
SettingsMenuPicker(
selection: self.$settings.terminalApp,
options: GeneralSettingsMenuOptions.terminalApps(selected: self.settings.terminalApp),
label: {
SettingsRowLabel(L("terminal_app_title"), subtitle: L("terminal_app_subtitle"))
},
optionLabel: { option in
HStack(spacing: 6) {
if let icon = option.pickerIcon {
Image(nsImage: icon)
}
Text(option.label)
}
})
Toggle(L("start_at_login_title"), isOn: self.$settings.launchAtLogin)
} header: {
Text(L("section_system"))
}
Section {
SettingsMenuPicker(
selection: self.$settings.refreshFrequency,
options: GeneralSettingsMenuOptions.refreshFrequencies,
label: { Text(L("refresh_interval_title")) },
optionLabel: { option in Text(option.label) })
Toggle(L("refresh_on_open_title"), isOn: self.$settings.refreshAllProvidersOnMenuOpen)
Toggle(isOn: self.$settings.statusChecksEnabled) {
SettingsRowLabel(
L("check_provider_status_title"),
subtitle: L("check_provider_status_subtitle"))
}
} header: {
Text(L("section_refreshing"))
} footer: {
if self.settings.refreshFrequency == .manual {
SettingsSectionFooter(L("manual_refresh_hint"))
}
}
Section {
LabeledContent(L("open_menu_shortcut_title")) {
OpenMenuShortcutRecorder()
}
} header: {
Text(L("section_keyboard_shortcut"))
}
Section {
HStack {
Spacer()
Button(L("quit_app")) { NSApp.terminate(nil) }
}
}
}
.formStyle(.grouped)
.toggleStyle(.switch)
.scrollContentBackground(.hidden)
.background(FocusResigningBackground())
}
}