feat(i18n): 시리즈 리스트 하드코딩 문구를 I18n 키로 통일한다

This commit is contained in:
Yu Sung
2026-03-31 18:50:22 +09:00
parent 9216db51da
commit 3f61a08a04
2 changed files with 36 additions and 10 deletions

View File

@@ -29,15 +29,15 @@ struct SeriesListItemView: View {
VStack(alignment: .leading, spacing: 0) { VStack(alignment: .leading, spacing: 0) {
HStack(spacing: 3.3) { HStack(spacing: 3.3) {
if !item.isComplete && item.isNew { if !item.isComplete && item.isNew {
SeriesItemBadgeView(title: "신작", backgroundColor: .button) SeriesItemBadgeView(title: I18n.Series.new, backgroundColor: .button)
} }
if item.isComplete { if item.isComplete {
SeriesItemBadgeView(title: "완결", backgroundColor: Color(hex: "002abd")) SeriesItemBadgeView(title: I18n.Series.complete, backgroundColor: Color(hex: "002abd"))
} }
if item.isPopular { if item.isPopular {
SeriesItemBadgeView(title: "인기", backgroundColor: Color(hex: "ec6033")) SeriesItemBadgeView(title: I18n.Series.popular, backgroundColor: Color(hex: "ec6033"))
} }
Spacer() Spacer()
@@ -48,7 +48,7 @@ struct SeriesListItemView: View {
HStack { HStack {
Spacer() Spacer()
SeriesItemBadgeView(title: "\(item.numberOfContent)", backgroundColor: Color.gray33.opacity(0.7)) SeriesItemBadgeView(title: I18n.Series.totalEpisodes(item.numberOfContent), backgroundColor: Color.gray33.opacity(0.7))
} }
} }
.padding(3.3) .padding(3.3)

View File

@@ -496,12 +496,12 @@
### UI (6) ### UI (6)
#### Group 1 (1-6) #### Group 1 (1-6)
- [ ] `SodaLive/Sources/UI/Component/SelectedButtonView.swift` - [x] `SodaLive/Sources/UI/Component/SelectedButtonView.swift`
- [ ] `SodaLive/Sources/UI/Component/SeriesDetailTabView.swift` - [x] `SodaLive/Sources/UI/Component/SeriesDetailTabView.swift`
- [ ] `SodaLive/Sources/UI/Component/SeriesItemBadgeView.swift` - [x] `SodaLive/Sources/UI/Component/SeriesItemBadgeView.swift`
- [ ] `SodaLive/Sources/UI/Component/SeriesKeywordChipView.swift` - [x] `SodaLive/Sources/UI/Component/SeriesKeywordChipView.swift`
- [ ] `SodaLive/Sources/UI/Component/SeriesListBigItemView.swift` - [x] `SodaLive/Sources/UI/Component/SeriesListBigItemView.swift`
- [ ] `SodaLive/Sources/UI/Component/SeriesListItemView.swift` - [x] `SodaLive/Sources/UI/Component/SeriesListItemView.swift`
### User (8) ### User (8)
- [x] `SodaLive/Sources/User/FindPassword/FindPasswordView.swift` - [x] `SodaLive/Sources/User/FindPassword/FindPasswordView.swift`
@@ -691,3 +691,29 @@
- 그룹 재배치 적용 모듈: `Content(78)`, `Explorer(40)`, `Home(9)`, `Live(56)`, `Message(13)`, `MyPage(41)`, `Settings(15)`, `UI(6)`. - 그룹 재배치 적용 모듈: `Content(78)`, `Explorer(40)`, `Home(9)`, `Live(56)`, `Message(13)`, `MyPage(41)`, `Settings(15)`, `UI(6)`.
-`#### Group` 헤더 29개를 삽입해 미완료 항목을 10개 단위(마지막 그룹은 잔여 수)로 분할 완료. -`#### Group` 헤더 29개를 삽입해 미완료 항목을 10개 단위(마지막 그룹은 잔여 수)로 분할 완료.
- 체크 상태 정합성 유지 확인: 미완료 258개, 완료 71개(기존 총합과 동일). - 체크 상태 정합성 유지 확인: 미완료 258개, 완료 71개(기존 총합과 동일).
### 11차 구현 (UI 모듈 Group 1, 6개 파일 처리, 2026-03-31)
- 무엇/왜/어떻게:
- 무엇: 변경 대상 목록의 `UI` 모듈 Group 1(6개 파일)을 점검하고, 런타임 사용자 노출 하드코딩 문구를 `I18n.*`로 전환했다.
- 왜: 공용 시리즈 카드 컴포넌트 중 `SeriesListItemView.swift`에 배지/회차 문구 하드코딩이 남아 있어 `I18n.swift` 단일 접근 원칙과 불일치했기 때문이다.
- 어떻게: explore/librarian 병렬 탐색 결과를 바탕으로 6개 파일 전수 분류(런타임 노출 vs Preview 샘플) 후, 런타임 노출 문자열만 `I18n.Series`로 치환했다.
- 실행 명령/도구:
- `task(subagent_type="explore", ...)` x2 (`bg_f61d6b84`, `bg_9364b9d5`)
- `task(subagent_type="librarian", ...)` x2 (`bg_83bba666`, `bg_3a95eb36`)
- `grep("\"[^\"]*[가-힣][^\"]*\"", include=*.swift, path=SodaLive/Sources/UI/Component)`
- `ast_grep_search(pattern="Text(\"$TEXT\")", lang=swift, paths=[SodaLive/Sources/UI/Component])`
- `lsp_diagnostics(filePath=SodaLive/Sources/UI/Component/SeriesListItemView.swift)`
- `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`
- 결과:
- 실치환 파일: `SodaLive/Sources/UI/Component/SeriesListItemView.swift`
- `"신작"``I18n.Series.new`
- `"완결"``I18n.Series.complete`
- `"인기"``I18n.Series.popular`
- `"총 \(item.numberOfContent)화"``I18n.Series.totalEpisodes(item.numberOfContent)`
- 점검만 수행(실치환 없음): `SelectedButtonView.swift`, `SeriesDetailTabView.swift`, `SeriesItemBadgeView.swift`, `SeriesKeywordChipView.swift`, `SeriesListBigItemView.swift` (남은 한글은 Preview 샘플 데이터/Preview 라벨).
- 빌드 검증: `SodaLive`, `SodaLive-dev` Debug 빌드 모두 성공(`** BUILD SUCCEEDED **`).
- 테스트 검증: 두 스킴 모두 `Scheme ... is not currently configured for the test action.`로 테스트 액션 미구성 확인(코드 실패 아님, 스킴 제약).
- LSP 진단: `No such module 'Kingfisher'` 1건 확인. 해당 모듈 해석은 SourceKit 인덱싱 환경 제약으로 재현되며, 동일 파일은 실제 `xcodebuild`에서 컴파일 성공 확인.