feat(i18n): 설정 화면 하드코딩 문구를 I18n 키로 통일한다

This commit is contained in:
Yu Sung
2026-03-31 19:46:21 +09:00
parent 3f61a08a04
commit 4c170e0f97
17 changed files with 354 additions and 94 deletions

View File

@@ -476,23 +476,23 @@
### Settings (15)
#### Group 1 (1-10)
- [ ] `SodaLive/Sources/Settings/Content/ContentSettingsView.swift`
- [ ] `SodaLive/Sources/Settings/Event/EventDetailView.swift`
- [ ] `SodaLive/Sources/Settings/Event/EventListView.swift`
- [ ] `SodaLive/Sources/Settings/Event/EventListViewModel.swift`
- [ ] `SodaLive/Sources/Settings/Language/Models/LanguageOption.swift`
- [ ] `SodaLive/Sources/Settings/Language/Views/LanguageSettingsView.swift`
- [ ] `SodaLive/Sources/Settings/Notice/NoticeDetailView.swift`
- [ ] `SodaLive/Sources/Settings/Notice/NoticeListView.swift`
- [ ] `SodaLive/Sources/Settings/Notice/NoticeListViewModel.swift`
- [ ] `SodaLive/Sources/Settings/Notification/NotificationSettingsDialog.swift`
- [x] `SodaLive/Sources/Settings/Content/ContentSettingsView.swift`
- [x] `SodaLive/Sources/Settings/Event/EventDetailView.swift`
- [x] `SodaLive/Sources/Settings/Event/EventListView.swift`
- [x] `SodaLive/Sources/Settings/Event/EventListViewModel.swift`
- [x] `SodaLive/Sources/Settings/Language/Models/LanguageOption.swift`
- [x] `SodaLive/Sources/Settings/Language/Views/LanguageSettingsView.swift`
- [x] `SodaLive/Sources/Settings/Notice/NoticeDetailView.swift`
- [x] `SodaLive/Sources/Settings/Notice/NoticeListView.swift`
- [x] `SodaLive/Sources/Settings/Notice/NoticeListViewModel.swift`
- [x] `SodaLive/Sources/Settings/Notification/NotificationSettingsDialog.swift`
#### Group 2 (11-15)
- [ ] `SodaLive/Sources/Settings/Notification/NotificationSettingsView.swift`
- [ ] `SodaLive/Sources/Settings/Notification/NotificationSettingsViewModel.swift`
- [ ] `SodaLive/Sources/Settings/SettingsView.swift`
- [ ] `SodaLive/Sources/Settings/SignOut/SignOutView.swift`
- [ ] `SodaLive/Sources/Settings/Terms/TermsViewModel.swift`
- [x] `SodaLive/Sources/Settings/Notification/NotificationSettingsView.swift`
- [x] `SodaLive/Sources/Settings/Notification/NotificationSettingsViewModel.swift`
- [x] `SodaLive/Sources/Settings/SettingsView.swift`
- [x] `SodaLive/Sources/Settings/SignOut/SignOutView.swift`
- [x] `SodaLive/Sources/Settings/Terms/TermsViewModel.swift`
### UI (6)
#### Group 1 (1-6)
@@ -717,3 +717,32 @@
- 빌드 검증: `SodaLive`, `SodaLive-dev` Debug 빌드 모두 성공(`** BUILD SUCCEEDED **`).
- 테스트 검증: 두 스킴 모두 `Scheme ... is not currently configured for the test action.`로 테스트 액션 미구성 확인(코드 실패 아님, 스킴 제약).
- LSP 진단: `No such module 'Kingfisher'` 1건 확인. 해당 모듈 해석은 SourceKit 인덱싱 환경 제약으로 재현되며, 동일 파일은 실제 `xcodebuild`에서 컴파일 성공 확인.
### 12차 구현 (Settings 모듈 Group 1~2, 15개 파일 처리, 2026-03-31)
- 무엇/왜/어떻게:
- 무엇: `변경 대상 파일 전체 목록``Settings` Group 1~2(15개 파일)에서 사용자 노출 하드코딩 문구를 `I18n.*` 참조로 전환하고 체크박스를 완료 처리.
- 왜: `String(localized:)`/하드코딩 리터럴/중복 오류 메시지가 혼재되어 Settings 모듈의 i18n 접근이 일관되지 않았기 때문.
- 어떻게: explore/librarian 병렬 탐색 + `grep`/`ast_grep_search`/`rg` 직접 점검으로 대상 문자열을 확정한 뒤, `I18n.swift``I18n.Settings` 하위 네임스페이스를 확장하고 호출부를 일괄 치환.
- 실행 명령/도구:
- `task(subagent_type="explore", ...)` x2 (`bg_021e5287`, `bg_d081115c`)
- `task(subagent_type="librarian", ...)` x2 (`bg_3dc24f38`, `bg_938d63ee`)
- `grep("\"[^\"]*[가-힣][^\"]*\"", include=*.swift, path=SodaLive/Sources/Settings)`
- `grep("String\\(localized:|LocalizedStringKey\\(|NSLocalizedString\\(", include=*.swift, path=SodaLive/Sources/Settings)`
- `ast_grep_search(pattern="Text(\"$TEXT\")", lang=swift, paths=[SodaLive/Sources/Settings])`
- `bash: rg -n ... SodaLive/Sources/Settings` (`command not found` 확인)
- `lsp_diagnostics(filePath=변경 파일 전체)`
- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build`
- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build`
- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" test`
- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" test`
- 결과:
- `I18n.swift`에 Settings 전용 키셋 추가/확장:
- 루트: `title`, `notificationSettings`, `languageSettings`, `contentViewSettings`, `termsOfService`, `privacyPolicy`, `appVersionInfo`, `logout`, `logoutAllDevices`, `signOut`, `companyInfo`
- 하위: `I18n.Settings.Content`, `I18n.Settings.Event`, `I18n.Settings.Language`, `I18n.Settings.Notice`, `I18n.Settings.Notification`, `I18n.Settings.SignOut`(안내문/버튼/placeholder 추가)
- Settings Group 1~2 대상 15개 파일 치환 완료 및 문서 체크박스 15개 모두 `- [x]` 반영.
- ViewModel 공통 실패 문구 치환 완료: `EventListViewModel`, `NoticeListViewModel`, `NotificationSettingsViewModel`, `TermsViewModel``I18n.Common.commonError`.
- 재탐지 결과: Settings 모듈 내 한글 리터럴은 `NoticeDetailView` Preview 샘플 2건(`"제목"`, `"<h1>콘텐츠</h1>"`)만 잔존.
- `String(localized:)`/`NSLocalizedString`/`LocalizedStringKey` 직접 참조는 Settings 모듈에서 제거 확인.
- 빌드 검증: `SodaLive`, `SodaLive-dev` Debug 빌드 모두 성공(`** BUILD SUCCEEDED **`).
- 테스트 검증: 두 스킴 모두 `Scheme ... is not currently configured for the test action.`로 테스트 액션 미구성 확인(코드 실패 아님, 스킴 제약).
- LSP 진단: SourceKit 단독 해석 환경에서 외부 모듈/심볼(`Kingfisher`, `RichText`, 앱 내부 타입) 미해결 오류가 대량 보고되나, 동일 변경셋은 `xcodebuild` 실컴파일 통과로 검증 완료.