mycode/myApp/Keging/IOS/AppSettingsView.swift
songyc macbook 3f91e8889c feat(keging): 도움말 화면 + 영어·일본어 현지화 + 설정 언어 전환
- 첫 화면 우하단 ? 버튼 → 도움말(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
2026-08-29 10:33:55 +09:00

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))"
}
}