- 첫 화면 우하단 ? 버튼 → 도움말(5그룹 13주제 — 기본 사용법·통계·앱 밖에서·애플워치·설정 기타) - String Catalog ko(원문)/en/ja 3타깃(iOS 98·워치 15·위젯 9키) 전수 번역, InfoPlist 표시 이름 포함 - 설정 → 언어(시스템/한국어/English/日本語) — AppleLanguages 오버라이드, 재실행 시 적용(하루 다님 방식) - 검증: Debug·Release·워치 빌드 그린, missing·stale 0, en/ja/ko 화면 QA 7장(도움말·설정·세팅·통계·워치) - DEBUG 인자 추가: -openHelp/-openSettings/-openTimerSettings/-resetConfig Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UPmp29DQHY6Ahfss5SRopT
68 lines
2.5 KiB
Swift
68 lines
2.5 KiB
Swift
//
|
|
// AppSettingsView.swift
|
|
// Keging
|
|
//
|
|
// 설정 — 앱 테마 등
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct AppSettingsView: View {
|
|
@AppStorage("app.theme", store: AppGroup.defaults) private var themeMode = "system"
|
|
@AppStorage("app.language", store: AppGroup.defaults) private var appLanguage = "system"
|
|
@Environment(\.dismiss) private var dismiss
|
|
|
|
var body: some View {
|
|
NavigationStack {
|
|
Form {
|
|
Section("테마") {
|
|
Picker("화면 모드", selection: $themeMode) {
|
|
Text("시스템").tag("system")
|
|
Text("라이트").tag("light")
|
|
Text("다크").tag("dark")
|
|
}
|
|
.pickerStyle(.segmented)
|
|
}
|
|
Section {
|
|
Picker("언어", selection: $appLanguage) {
|
|
Text("시스템").tag("system")
|
|
Text(verbatim: "한국어").tag("ko")
|
|
Text(verbatim: "English").tag("en")
|
|
Text(verbatim: "日本語").tag("ja")
|
|
}
|
|
} header: {
|
|
Text("언어")
|
|
} footer: {
|
|
Text("언어를 바꾸면 앱을 완전히 종료했다가 다시 실행했을 때 적용돼요.")
|
|
}
|
|
Section {
|
|
LabeledContent("버전", value: versionText)
|
|
} footer: {
|
|
Text("케깅은 광고와 결제가 없는 완전 무료 앱이에요.")
|
|
}
|
|
}
|
|
.navigationTitle("설정")
|
|
.navigationBarTitleDisplayMode(.inline)
|
|
.toolbar {
|
|
ToolbarItem(placement: .confirmationAction) {
|
|
Button("완료") { dismiss() }
|
|
}
|
|
}
|
|
.onChange(of: appLanguage) {
|
|
// 시스템의 앱별 언어 오버라이드 — 다음 실행부터 적용 (하루 다님 검증 방식)
|
|
if appLanguage == "system" {
|
|
UserDefaults.standard.removeObject(forKey: "AppleLanguages")
|
|
} else {
|
|
UserDefaults.standard.set([appLanguage], forKey: "AppleLanguages")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private var versionText: String {
|
|
let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "1.0"
|
|
let build = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String ?? "1"
|
|
return "\(version) (\(build))"
|
|
}
|
|
}
|