diff --git a/SodaLive/Sources/UI/Component/SeriesListItemView.swift b/SodaLive/Sources/UI/Component/SeriesListItemView.swift index 68e8b2c..7c938e2 100644 --- a/SodaLive/Sources/UI/Component/SeriesListItemView.swift +++ b/SodaLive/Sources/UI/Component/SeriesListItemView.swift @@ -29,15 +29,15 @@ struct SeriesListItemView: View { VStack(alignment: .leading, spacing: 0) { HStack(spacing: 3.3) { if !item.isComplete && item.isNew { - SeriesItemBadgeView(title: "신작", backgroundColor: .button) + SeriesItemBadgeView(title: I18n.Series.new, backgroundColor: .button) } if item.isComplete { - SeriesItemBadgeView(title: "완결", backgroundColor: Color(hex: "002abd")) + SeriesItemBadgeView(title: I18n.Series.complete, backgroundColor: Color(hex: "002abd")) } if item.isPopular { - SeriesItemBadgeView(title: "인기", backgroundColor: Color(hex: "ec6033")) + SeriesItemBadgeView(title: I18n.Series.popular, backgroundColor: Color(hex: "ec6033")) } Spacer() @@ -48,7 +48,7 @@ struct SeriesListItemView: View { HStack { 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) diff --git a/docs/20260331_하드코딩텍스트_I18n통일계획.md b/docs/20260331_하드코딩텍스트_I18n통일계획.md index ab9ed2d..649b6a1 100644 --- a/docs/20260331_하드코딩텍스트_I18n통일계획.md +++ b/docs/20260331_하드코딩텍스트_I18n통일계획.md @@ -496,12 +496,12 @@ ### UI (6) #### Group 1 (1-6) -- [ ] `SodaLive/Sources/UI/Component/SelectedButtonView.swift` -- [ ] `SodaLive/Sources/UI/Component/SeriesDetailTabView.swift` -- [ ] `SodaLive/Sources/UI/Component/SeriesItemBadgeView.swift` -- [ ] `SodaLive/Sources/UI/Component/SeriesKeywordChipView.swift` -- [ ] `SodaLive/Sources/UI/Component/SeriesListBigItemView.swift` -- [ ] `SodaLive/Sources/UI/Component/SeriesListItemView.swift` +- [x] `SodaLive/Sources/UI/Component/SelectedButtonView.swift` +- [x] `SodaLive/Sources/UI/Component/SeriesDetailTabView.swift` +- [x] `SodaLive/Sources/UI/Component/SeriesItemBadgeView.swift` +- [x] `SodaLive/Sources/UI/Component/SeriesKeywordChipView.swift` +- [x] `SodaLive/Sources/UI/Component/SeriesListBigItemView.swift` +- [x] `SodaLive/Sources/UI/Component/SeriesListItemView.swift` ### User (8) - [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)`. - 총 `#### Group` 헤더 29개를 삽입해 미완료 항목을 10개 단위(마지막 그룹은 잔여 수)로 분할 완료. - 체크 상태 정합성 유지 확인: 미완료 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`에서 컴파일 성공 확인.