feat(i18n): 주요 UI 하드코딩 문구를 I18n 키로 통일한다

This commit is contained in:
Yu Sung
2026-03-31 17:09:01 +09:00
parent 47085dc1ca
commit b2f66cf408
17 changed files with 448 additions and 196 deletions

View File

@@ -220,17 +220,17 @@
- [ ] `SodaLive/Sources/Content/Series/SeriesListAllViewModel.swift`
### CustomView (3)
- [ ] `SodaLive/Sources/CustomView/ChatTextFieldView.swift`
- [ ] `SodaLive/Sources/CustomView/ExpandableTextView.swift`
- [ ] `SodaLive/Sources/CustomView/IconAndTitleToggleButton.swift`
- [x] `SodaLive/Sources/CustomView/ChatTextFieldView.swift`
- [x] `SodaLive/Sources/CustomView/ExpandableTextView.swift`
- [x] `SodaLive/Sources/CustomView/IconAndTitleToggleButton.swift`
### Dialog (6)
- [ ] `SodaLive/Sources/Dialog/ApplyAuditionCompleteDialog.swift`
- [ ] `SodaLive/Sources/Dialog/CommunityPostPurchaseDialog.swift`
- [ ] `SodaLive/Sources/Dialog/CreatorFollowNotifyDialog.swift`
- [ ] `SodaLive/Sources/Dialog/LivePaymentDialog.swift`
- [ ] `SodaLive/Sources/Dialog/LiveRoomPasswordDialog.swift`
- [ ] `SodaLive/Sources/Dialog/MemberProfileDialog.swift`
- [x] `SodaLive/Sources/Dialog/ApplyAuditionCompleteDialog.swift`
- [x] `SodaLive/Sources/Dialog/CommunityPostPurchaseDialog.swift`
- [x] `SodaLive/Sources/Dialog/CreatorFollowNotifyDialog.swift`
- [x] `SodaLive/Sources/Dialog/LivePaymentDialog.swift`
- [x] `SodaLive/Sources/Dialog/LiveRoomPasswordDialog.swift`
- [x] `SodaLive/Sources/Dialog/MemberProfileDialog.swift`
### Explorer (40)
- [ ] `SodaLive/Sources/Explorer/ExplorerSectionView.swift`
@@ -275,7 +275,7 @@
- [ ] `SodaLive/Sources/Explorer/Profile/UserProfileViewModel.swift`
### Follow (1)
- [ ] `SodaLive/Sources/Follow/FollowCreatorView.swift`
- [x] `SodaLive/Sources/Follow/FollowCreatorView.swift`
### Home (9)
- [ ] `SodaLive/Sources/Home/HomeAuditionView.swift`
@@ -289,10 +289,10 @@
- [ ] `SodaLive/Sources/Home/RecommendChannel/RecommendChannelItemView.swift`
### IAP (1)
- [ ] `SodaLive/Sources/IAP/StoreManager.swift`
- [x] `SodaLive/Sources/IAP/StoreManager.swift`
### ImagePicker (1)
- [ ] `SodaLive/Sources/ImagePicker/ImagePicker.swift`
- [x] `SodaLive/Sources/ImagePicker/ImagePicker.swift`
### Live (56)
- [ ] `SodaLive/Sources/Live/Cancel/LiveCancelDialog.swift`
@@ -353,9 +353,9 @@
- [ ] `SodaLive/Sources/Live/SectionLatestFinishedLiveView.swift`
### Main (3)
- [ ] `SodaLive/Sources/Main/EventPopupDialogView.swift`
- [ ] `SodaLive/Sources/Main/Home/BottomTabView.swift`
- [ ] `SodaLive/Sources/Main/Home/HomeView.swift`
- [x] `SodaLive/Sources/Main/EventPopupDialogView.swift`
- [x] `SodaLive/Sources/Main/Home/BottomTabView.swift`
- [x] `SodaLive/Sources/Main/Home/HomeView.swift`
### Message (13)
- [ ] `SodaLive/Sources/Message/MessageFilterTabView.swift`
@@ -587,3 +587,28 @@
- Chat 모듈 하드코딩 한글 재검증 결과, 남은 문자열은 Preview 샘플/SDK 입력값/비노출 분기 로직만 존재.
- 빌드 검증: `SodaLive`, `SodaLive-dev` Debug 빌드 모두 성공(`** BUILD SUCCEEDED **`).
- 테스트 검증: 두 스킴 모두 `Scheme ... is not currently configured for the test action.`로 테스트 액션 미구성 확인(코드 실패 아님, 스킴 제약).
### 8차 구현 (ImagePicker/CustomView/IAP/Follow/Main/Dialog 15개 파일 i18n 전환, 2026-03-31)
- 무엇/왜/어떻게:
- 무엇: 변경 대상 목록 중 `ImagePicker`, `CustomView`, `IAP`, `Follow`, `Main`, `Dialog` 모듈의 15개 파일을 처리해 사용자 노출 하드코딩 문구를 `I18n.*` 참조로 정리.
- 왜: 주요 공통 UI(버튼/다이얼로그/토스트/탭 라벨/인증 안내)에 하드코딩 문자열이 남아 있어 모듈 간 다국어 일관성이 깨지는 상태였기 때문.
- 어떻게: explore/librarian 병렬 탐색 + `grep`/`ast_grep_search` 직접 검증으로 치환 대상을 확정하고, `I18n.swift`에 모듈별 네임스페이스(`ImagePicker`, `CustomView`, `IAP`, `Follow`, `Main`, `Dialog`)를 추가한 뒤 호출부를 교체.
- 실행 명령/도구:
- `task(subagent_type="explore", ...)` x2 (`bg_da05186f`, `bg_81c85d58`)
- `task(subagent_type="librarian", ...)` x2 (`bg_4b24d2ad`, `bg_d8b1253f`)
- `grep("\"[^\"]*[가-힣][^\"]*\"", include=*.swift, path=SodaLive/Sources/{ImagePicker,CustomView,IAP,Follow,Main,Dialog})` (모듈별 개별 실행)
- `grep("String\\(localized:|LocalizedStringKey\\(|NSLocalizedString\\(", include=*.swift, path=...)` (모듈별 개별 실행)
- `ast_grep_search(pattern="Text(\"$TEXT\")", lang=swift, paths=[...])`
- `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`
- 결과:
- 호출부 치환 완료 파일: `ImagePicker.swift`, `ExpandableTextView.swift`, `StoreManager.swift`, `FollowCreatorView.swift`, `EventPopupDialogView.swift`, `BottomTabView.swift`, `HomeView.swift`, `ApplyAuditionCompleteDialog.swift`, `CommunityPostPurchaseDialog.swift`, `CreatorFollowNotifyDialog.swift`, `LivePaymentDialog.swift`, `LiveRoomPasswordDialog.swift`, `MemberProfileDialog.swift`.
- 점검만 수행(실치환 없음) 파일: `ChatTextFieldView.swift`, `IconAndTitleToggleButton.swift` (Preview 샘플 문자열만 존재, 런타임 노출 문자열 없음).
- `I18n.swift` 추가 키셋: `I18n.ImagePicker`, `I18n.CustomView`, `I18n.IAP`, `I18n.Follow`, `I18n.Main`(EventPopup/Tab/Auth), `I18n.Dialog`(ApplyAuditionComplete/CommunityPostPurchase/LivePayment/LiveRoomPassword/MemberProfile).
- `Main/Home/HomeView.swift`의 Bootpay 입력값(`payload.pg`, `payload.method`, `payload.orderName`)은 SDK 입력값 유지 원칙에 따라 비노출 고정값으로 유지.
- 모듈 재검증 결과, 남은 한글 문자열은 Preview 샘플/`DEBUG_LOG`/SDK 입력값(비노출)만 존재.
- 빌드 검증: `SodaLive`, `SodaLive-dev` Debug 빌드 모두 성공(`** BUILD SUCCEEDED **`).
- 테스트 검증: 두 스킴 모두 `Scheme ... is not currently configured for the test action.`로 테스트 액션 미구성 확인(코드 실패 아님, 스킴 제약).