feat(i18n): 시리즈/재생목록 하드코딩 문구를 I18n 키로 통일한다

This commit is contained in:
Yu Sung
2026-04-01 17:33:13 +09:00
parent c039931f34
commit 1ec56a1f15
27 changed files with 253 additions and 160 deletions

View File

@@ -18,12 +18,12 @@ struct SeriesContentAllView: View {
VStack(spacing: 0) {
BaseView(isLoading: $viewModel.isLoading) {
VStack(spacing: 0) {
DetailNavigationBar(title: "\(seriesTitle) - 전체회차 듣기")
DetailNavigationBar(title: I18n.Series.allEpisodesTitle(seriesTitle))
HStack(spacing: 13.3) {
Spacer()
Text("최신순")
Text(I18n.Content.Sort.newest)
.appFont(size: 13.3, weight: .medium)
.foregroundColor(
Color.graye2
@@ -35,7 +35,7 @@ struct SeriesContentAllView: View {
}
}
Text("등록순")
Text(I18n.Series.registeredOrder)
.appFont(size: 13.3, weight: .medium)
.foregroundColor(
Color.graye2

View File

@@ -66,13 +66,13 @@ final class SeriesContentAllViewModel: ObservableObject {
if let message = decoded.message {
self.errorMessage = message
} else {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
}
self.isShowPopup = true
}
} catch {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
self.isShowPopup = true
}

View File

@@ -33,7 +33,7 @@ struct SeriesContentListItemView: View {
.cornerRadius(2.6)
if item.isPointAvailable {
Text("포인트")
Text(I18n.Series.point)
.appFont(size: 8, weight: .medium)
.foregroundColor(.white)
.padding(2.6)
@@ -50,7 +50,7 @@ struct SeriesContentListItemView: View {
Spacer()
if item.isOwned {
Text("소장중")
Text(I18n.Content.Status.owned)
.appFont(size: 13.3, weight: .medium)
.foregroundColor(Color.gray11)
.padding(.horizontal, 5.3)
@@ -58,7 +58,7 @@ struct SeriesContentListItemView: View {
.background(Color(hex: "b1ef2c"))
.cornerRadius(2.6)
} else if item.isRented {
Text("대여중")
Text(I18n.Content.Status.rented)
.appFont(size: 13.3, weight: .medium)
.foregroundColor(Color.white)
.padding(.horizontal, 5.3)
@@ -74,7 +74,7 @@ struct SeriesContentListItemView: View {
.foregroundColor(Color(hex: "909090"))
}
} else {
Text("무료")
Text(I18n.Series.free)
.appFont(size: 13.3, weight: .medium)
.foregroundColor(Color.white)
.padding(.horizontal, 5.3)

View File

@@ -8,7 +8,7 @@
import SwiftUI
struct DayOfWeek {
let dayOfWeekStr: LocalizedStringResource
let dayOfWeekStr: String
let dayOfWeek: SeriesPublishedDaysOfWeek
}
@@ -20,14 +20,14 @@ struct DayOfWeekSeriesView: View {
@State private var dayOfWeek: SeriesPublishedDaysOfWeek = .FRI
private let dayOfWeekItems: [DayOfWeek] = [
DayOfWeek(dayOfWeekStr: "", dayOfWeek: .MON),
DayOfWeek(dayOfWeekStr: "", dayOfWeek: .TUE),
DayOfWeek(dayOfWeekStr: "", dayOfWeek: .WED),
DayOfWeek(dayOfWeekStr: "", dayOfWeek: .THU),
DayOfWeek(dayOfWeekStr: "", dayOfWeek: .FRI),
DayOfWeek(dayOfWeekStr: "", dayOfWeek: .SAT),
DayOfWeek(dayOfWeekStr: "", dayOfWeek: .SUN),
DayOfWeek(dayOfWeekStr: "랜덤", dayOfWeek: .RANDOM),
DayOfWeek(dayOfWeekStr: I18n.Series.monday, dayOfWeek: .MON),
DayOfWeek(dayOfWeekStr: I18n.Series.tuesday, dayOfWeek: .TUE),
DayOfWeek(dayOfWeekStr: I18n.Series.wednesday, dayOfWeek: .WED),
DayOfWeek(dayOfWeekStr: I18n.Series.thursday, dayOfWeek: .THU),
DayOfWeek(dayOfWeekStr: I18n.Series.friday, dayOfWeek: .FRI),
DayOfWeek(dayOfWeekStr: I18n.Series.saturday, dayOfWeek: .SAT),
DayOfWeek(dayOfWeekStr: I18n.Series.sunday, dayOfWeek: .SUN),
DayOfWeek(dayOfWeekStr: I18n.Series.random, dayOfWeek: .RANDOM),
]
//
@@ -45,13 +45,13 @@ struct DayOfWeekSeriesView: View {
var body: some View {
VStack(alignment: .leading, spacing: 16) {
HStack(spacing: 0) {
Text("요일별 시리즈")
Text(I18n.Series.byDaySectionTitle)
.appFont(size: 24, weight: .bold)
.foregroundColor(.white)
Spacer()
Text("전체보기")
Text(I18n.Common.viewAll)
.appFont(size: 14, weight: .regular)
.foregroundColor(.init(hex: "78909C"))
.onTapGesture {
@@ -93,7 +93,7 @@ struct DayOfWeekSeriesView: View {
}
struct DayOfWeekDayView: View {
let dayOfWeek: LocalizedStringResource
let dayOfWeek: String
let isSelected: Bool
var body: some View {

View File

@@ -17,7 +17,7 @@ struct SeriesDetailHomeView: View {
var body: some View {
VStack(spacing: 0) {
HStack(spacing: 0) {
Text("전체회차 듣기")
Text(I18n.Series.allEpisodesListen)
.appFont(size: 16, weight: .bold)
.foregroundColor(Color.button)

View File

@@ -90,7 +90,7 @@ struct SeriesDetailView: View {
.cornerRadius(2.6)
if seriesDetail.isAdult {
Text("19세")
Text(I18n.Series.age19Badge)
.appFont(size: 12, weight: .medium)
.foregroundColor(Color(hex: "f1291c"))
.padding(.horizontal, 5.3)
@@ -98,7 +98,7 @@ struct SeriesDetailView: View {
.background(Color(hex: "312827"))
.cornerRadius(2.6)
} else {
Text("전체연령가")
Text(I18n.SeriesDetail.ageAll)
.appFont(size: 12, weight: .medium)
.foregroundColor(Color(hex: "d2d2d2"))
.padding(.horizontal, 5.3)
@@ -107,7 +107,7 @@ struct SeriesDetailView: View {
.cornerRadius(2.6)
}
Text("\(seriesDetail.publishedDaysOfWeek) 연재")
Text(I18n.Series.publishing(seriesDetail.publishedDaysOfWeek))
.appFont(size: 12, weight: .medium)
.foregroundColor(Color(hex: "909090"))
}

View File

@@ -50,13 +50,13 @@ final class SeriesDetailViewModel: ObservableObject {
if let message = decoded.message {
self.errorMessage = message
} else {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
}
self.isShowPopup = true
}
} catch {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
self.isShowPopup = true
}
@@ -91,13 +91,13 @@ final class SeriesDetailViewModel: ObservableObject {
if let message = decoded.message {
self.errorMessage = message
} else {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
}
self.isShowPopup = true
}
} catch {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
self.isShowPopup = true
}
@@ -131,13 +131,13 @@ final class SeriesDetailViewModel: ObservableObject {
if let message = decoded.message {
self.errorMessage = message
} else {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
}
self.isShowPopup = true
}
} catch {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
self.isShowPopup = true
}

View File

@@ -62,13 +62,13 @@ final class SeriesMainByGenreViewModel: ObservableObject {
if let message = decoded.message {
self.errorMessage = message
} else {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
}
self.isShowPopup = true
}
} catch {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
self.isShowPopup = true
}
}
@@ -109,13 +109,13 @@ final class SeriesMainByGenreViewModel: ObservableObject {
if let message = decoded.message {
self.errorMessage = message
} else {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
}
self.isShowPopup = true
}
} catch {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
self.isShowPopup = true
}

View File

@@ -15,14 +15,14 @@ struct SeriesMainDayOfWeekView: View {
@State private var dayOfWeek: SeriesPublishedDaysOfWeek = .SAT
private let dayOfWeekItems: [DayOfWeek] = [
DayOfWeek(dayOfWeekStr: "", dayOfWeek: .MON),
DayOfWeek(dayOfWeekStr: "", dayOfWeek: .TUE),
DayOfWeek(dayOfWeekStr: "", dayOfWeek: .WED),
DayOfWeek(dayOfWeekStr: "", dayOfWeek: .THU),
DayOfWeek(dayOfWeekStr: "", dayOfWeek: .FRI),
DayOfWeek(dayOfWeekStr: "", dayOfWeek: .SAT),
DayOfWeek(dayOfWeekStr: "", dayOfWeek: .SUN),
DayOfWeek(dayOfWeekStr: "랜덤", dayOfWeek: .RANDOM),
DayOfWeek(dayOfWeekStr: I18n.Series.monday, dayOfWeek: .MON),
DayOfWeek(dayOfWeekStr: I18n.Series.tuesday, dayOfWeek: .TUE),
DayOfWeek(dayOfWeekStr: I18n.Series.wednesday, dayOfWeek: .WED),
DayOfWeek(dayOfWeekStr: I18n.Series.thursday, dayOfWeek: .THU),
DayOfWeek(dayOfWeekStr: I18n.Series.friday, dayOfWeek: .FRI),
DayOfWeek(dayOfWeekStr: I18n.Series.saturday, dayOfWeek: .SAT),
DayOfWeek(dayOfWeekStr: I18n.Series.sunday, dayOfWeek: .SUN),
DayOfWeek(dayOfWeekStr: I18n.Series.random, dayOfWeek: .RANDOM),
]
//

View File

@@ -62,13 +62,13 @@ final class SeriesMainDayOfWeekViewModel: ObservableObject {
if let message = decoded.message {
self.errorMessage = message
} else {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
}
self.isShowPopup = true
}
} catch {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
self.isShowPopup = true
}

View File

@@ -24,13 +24,13 @@ struct SeriesMainHomeView: View {
if !viewModel.completedSeriesList.isEmpty {
VStack(alignment: .leading, spacing: 16) {
HStack(spacing: 0) {
Text("완결 시리즈")
Text(I18n.Series.completedSectionTitle)
.appFont(size: 24, weight: .bold)
.foregroundColor(.white)
Spacer()
Text("전체보기")
Text(I18n.Common.viewAll)
.appFont(size: 14, weight: .regular)
.foregroundColor(.init(hex: "78909C"))
.onTapGesture {
@@ -58,7 +58,7 @@ struct SeriesMainHomeView: View {
if !viewModel.recommendSeriesList.isEmpty {
VStack(alignment: .leading, spacing: 16) {
HStack(spacing: 0) {
Text("추천 시리즈")
Text(I18n.Series.recommendedSectionTitle)
.appFont(size: 24, weight: .bold)
.foregroundColor(.white)

View File

@@ -45,13 +45,13 @@ final class SeriesMainHomeViewModel: ObservableObject {
if let message = decoded.message {
self.errorMessage = message
} else {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
}
self.isShowPopup = true
}
} catch {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
self.isShowPopup = true
}
@@ -83,13 +83,13 @@ final class SeriesMainHomeViewModel: ObservableObject {
if let message = decoded.message {
self.errorMessage = message
} else {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
}
self.isShowPopup = true
}
} catch {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
self.isShowPopup = true
}

View File

@@ -27,7 +27,7 @@ struct SeriesMainItemView: View {
VStack(alignment: .leading, spacing: 0) {
HStack(spacing: 0) {
if item.isPopular {
Text("인기")
Text(I18n.Series.popular)
.appFont(size: 12, weight: .regular)
.foregroundColor(.white)
.padding(.horizontal, 10)
@@ -37,7 +37,7 @@ struct SeriesMainItemView: View {
}
if item.isNew {
Text("신작")
Text(I18n.Series.new)
.appFont(size: 12, weight: .regular)
.foregroundColor(.white)
.padding(.horizontal, 10)
@@ -56,7 +56,7 @@ struct SeriesMainItemView: View {
}
if item.isComplete {
Text("완결")
Text(I18n.Series.complete)
.appFont(size: 12, weight: .regular)
.foregroundColor(.white)
.padding(.horizontal, 10)
@@ -71,7 +71,7 @@ struct SeriesMainItemView: View {
HStack {
Spacer()
Text("\(item.numberOfContent)")
Text(I18n.Series.totalEpisodes(item.numberOfContent))
.appFont(size: 12, weight: .regular)
.foregroundColor(.white)
.padding(.horizontal, 10)

View File

@@ -28,7 +28,7 @@ struct SeriesMainView: View {
Group {
BaseView {
VStack(spacing: 0) {
DetailNavigationBar(title: "시리즈 전체보기")
DetailNavigationBar(title: I18n.Series.title)
// ( / )
HStack(spacing: 0) {
ChatInnerTab(

View File

@@ -27,7 +27,7 @@ struct SeriesItemView: View {
VStack(alignment: .leading, spacing: 0) {
HStack(spacing: 0) {
if item.isPopular {
Text("인기")
Text(I18n.Series.popular)
.appFont(size: 12, weight: .regular)
.foregroundColor(.white)
.padding(.horizontal, 10)
@@ -37,7 +37,7 @@ struct SeriesItemView: View {
}
if item.isNew {
Text("신작")
Text(I18n.Series.new)
.appFont(size: 12, weight: .regular)
.foregroundColor(.white)
.padding(.horizontal, 10)
@@ -56,7 +56,7 @@ struct SeriesItemView: View {
}
if item.isComplete {
Text("완결")
Text(I18n.Series.complete)
.appFont(size: 12, weight: .regular)
.foregroundColor(.white)
.padding(.horizontal, 10)
@@ -71,7 +71,7 @@ struct SeriesItemView: View {
HStack {
Spacer()
Text("\(item.numberOfContent)")
Text(I18n.Series.totalEpisodes(item.numberOfContent))
.appFont(size: 12, weight: .regular)
.foregroundColor(.white)
.padding(.horizontal, 10)

View File

@@ -23,9 +23,9 @@ struct SeriesListAllView: View {
BaseView(isLoading: $viewModel.isLoading) {
VStack(spacing: 0) {
if isCompleted {
DetailNavigationBar(title: "완결 시리즈")
DetailNavigationBar(title: I18n.Series.completedSectionTitle)
} else if isOriginal {
DetailNavigationBar(title: "오직 보이스온에서만")
DetailNavigationBar(title: I18n.Series.voiceOnOnlyTitle)
} else {
DetailNavigationBar(title: I18n.Series.viewAllByCreator(creatorNickname ?? ""))
}

View File

@@ -63,13 +63,13 @@ final class SeriesListAllViewModel: ObservableObject {
if let message = decoded.message {
self.errorMessage = message
} else {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
}
self.isShowPopup = true
}
} catch {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.errorMessage = I18n.Common.commonError
self.isShowPopup = true
}