feat(i18n): 라이브 모듈 하드코딩 문구를 I18n 키로 통일한다

This commit is contained in:
Yu Sung
2026-04-01 11:58:41 +09:00
parent 201f4c8139
commit 540238eb48
20 changed files with 333 additions and 97 deletions

View File

@@ -55,7 +55,7 @@ struct LiveReservationAllItemView: View {
Spacer()
if item.isReservation {
Text("예약완료")
Text(I18n.LiveReservation.Item.reservationCompleted)
.appFont(size: 11.3, weight: .medium)
.foregroundColor(Color(hex: "d2d2d2"))
.padding(.horizontal, 7)
@@ -63,7 +63,7 @@ struct LiveReservationAllItemView: View {
.background(Color(hex: "533d89"))
.cornerRadius(10)
} else {
Text(item.price > 0 ? "\(item.price)" : "무료")
Text(item.price > 0 ? I18n.LiveReservation.Item.priceWithCan(item.price) : I18n.LiveReservation.Item.free)
.appFont(size: 12, weight: .medium)
.foregroundColor(Color(hex: "e2e2e2").opacity(0.49))
.padding(.bottom, 6.7)

View File

@@ -21,7 +21,7 @@ struct LiveReservationAllView: View {
BaseView(isLoading: $viewModel.isLoading) {
GeometryReader { proxy in
VStack(spacing: 0) {
DetailNavigationBar(title: "라이브, 예약 캘린더")
DetailNavigationBar(title: I18n.LiveReservation.All.title)
WeekCalendarView { date in
viewModel.selectedDateString = date
@@ -57,7 +57,7 @@ struct LiveReservationAllView: View {
.resizable()
.frame(width: 60, height: 60)
Text("지금 예약중인 라이브가 없습니다.\n다른 날짜의 라이브를 예약하고 참여해 보세요.")
Text(I18n.LiveReservation.All.emptyStateMessage)
.appFont(size: 13, weight: .medium)
.foregroundColor(Color(hex: "bbbbbb"))
.multilineTextAlignment(.center)

View File

@@ -14,13 +14,13 @@ struct LiveReservationCompleteView: View {
var body: some View {
BaseView {
VStack(spacing: 0) {
DetailNavigationBar(title: "라이브 예약 완료") {
DetailNavigationBar(title: I18n.LiveReservation.Complete.title) {
AppState.shared.setAppStep(step: .main)
}
ScrollView(.vertical, showsIndicators: false) {
VStack(spacing: 0) {
Text("예약이 완료되었습니다.")
Text(I18n.LiveReservation.Complete.completedMessage)
.appFont(size: 20, weight: .bold)
.foregroundColor(Color(hex: "a285eb"))
.frame(width: screenSize().width - 26.7, alignment: .leading)
@@ -33,14 +33,14 @@ struct LiveReservationCompleteView: View {
.padding(.top, 16.7)
.padding(.bottom, 26.7)
Text("라이브 예약정보")
Text(I18n.LiveReservation.Complete.reservationInfoTitle)
.appFont(size: 16.7, weight: .bold)
.foregroundColor(Color(hex: "eeeeee"))
.frame(width: screenSize().width - 53.4, alignment: .leading)
VStack(spacing: 6.7) {
HStack(spacing: 26.7) {
Text("채널")
Text(I18n.LiveReservation.Complete.channelLabel)
.appFont(size: 14.7, weight: .medium)
.foregroundColor(Color(hex: "777777"))
@@ -51,7 +51,7 @@ struct LiveReservationCompleteView: View {
.frame(width: screenSize().width - 53.4, alignment: .leading)
HStack(spacing: 26.7) {
Text("구매내역")
Text(I18n.LiveReservation.Complete.purchaseDetailLabel)
.appFont(size: 14.7, weight: .medium)
.foregroundColor(Color(hex: "777777"))
@@ -62,7 +62,7 @@ struct LiveReservationCompleteView: View {
.frame(width: screenSize().width - 53.4, alignment: .leading)
HStack(spacing: 26.7) {
Text("예약일자")
Text(I18n.LiveReservation.Complete.reservationDateLabel)
.appFont(size: 14.7, weight: .medium)
.foregroundColor(Color(hex: "777777"))
@@ -77,7 +77,7 @@ struct LiveReservationCompleteView: View {
.frame(width: screenSize().width - 53.4, alignment: .leading)
HStack(spacing: 26.7) {
Text("라이브 비용")
Text(I18n.LiveReservation.Complete.liveCostLabel)
.appFont(size: 14.7, weight: .medium)
.foregroundColor(Color(hex: "777777"))
@@ -94,14 +94,14 @@ struct LiveReservationCompleteView: View {
.foregroundColor(Color(hex: "232323"))
.padding(.vertical, 20)
Text("결제정보")
Text(I18n.LiveReservation.Complete.paymentInfoTitle)
.appFont(size: 16.7, weight: .bold)
.foregroundColor(Color(hex: "eeeeee"))
.frame(width: screenSize().width - 53.4, alignment: .leading)
VStack(spacing: 13.3) {
HStack(spacing: 0) {
Text("보유캔")
Text(I18n.LiveReservation.Complete.ownedCanLabel)
.appFont(size: 14.7, weight: .medium)
.foregroundColor(Color(hex: "777777"))
@@ -111,14 +111,14 @@ struct LiveReservationCompleteView: View {
.appFont(size: 15.3, weight: .bold)
.foregroundColor(Color(hex: "eeeeee"))
Text("")
Text(I18n.LiveReservation.Complete.canSuffix)
.appFont(size: 14.7, weight: .medium)
.foregroundColor(Color(hex: "eeeeee"))
}
.frame(width: screenSize().width - 53.4, alignment: .leading)
HStack(spacing: 0) {
Text("결제캔")
Text(I18n.LiveReservation.Complete.paymentCanLabel)
.appFont(size: 14.7, weight: .medium)
.foregroundColor(Color(hex: "777777"))
@@ -128,14 +128,14 @@ struct LiveReservationCompleteView: View {
.appFont(size: 15.3, weight: .bold)
.foregroundColor(Color(hex: "eeeeee"))
Text("")
Text(I18n.LiveReservation.Complete.canSuffix)
.appFont(size: 14.7, weight: .medium)
.foregroundColor(Color(hex: "eeeeee"))
}
.frame(width: screenSize().width - 53.4, alignment: .leading)
HStack(spacing: 0) {
Text("잔여캔")
Text(I18n.LiveReservation.Complete.remainingCanLabel)
.appFont(size: 14.7, weight: .medium)
.foregroundColor(Color(hex: "777777"))
@@ -145,7 +145,7 @@ struct LiveReservationCompleteView: View {
.appFont(size: 15.3, weight: .bold)
.foregroundColor(Color(hex: "eeeeee"))
Text("")
Text(I18n.LiveReservation.Complete.canSuffix)
.appFont(size: 14.7, weight: .medium)
.foregroundColor(Color(hex: "eeeeee"))
}
@@ -154,7 +154,7 @@ struct LiveReservationCompleteView: View {
.padding(.top, 20)
HStack(spacing: 13.3) {
Text("홈으로 이동")
Text(I18n.LiveReservation.Complete.goHome)
.appFont(size: 18.3, weight: .bold)
.foregroundColor(Color(hex: "9970ff"))
.padding(.vertical, 16)
@@ -170,7 +170,7 @@ struct LiveReservationCompleteView: View {
AppState.shared.setAppStep(step: .main)
}
Text("예약 내역 이동")
Text(I18n.LiveReservation.Complete.goReservationList)
.appFont(size: 18.3, weight: .bold)
.foregroundColor(.white)
.padding(.vertical, 16)

View File

@@ -67,7 +67,7 @@ struct LiveReservationItemView: View {
VStack(alignment: .trailing, spacing: 8) {
VStack(spacing: 0) {
Text("\(dateDic["month"] ?? "")")
Text(I18n.LiveReservation.Item.month(dateDic["month"] ?? ""))
.appFont(size: 14, weight: .bold)
.foregroundColor(.white)
.padding(.vertical, 6)
@@ -100,7 +100,7 @@ struct LiveReservationItemView: View {
.background(Color(hex: "3b5ff1"))
.cornerRadius(4)
} else {
Text("무료")
Text(I18n.LiveReservation.Item.free)
.appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "#263238"))
.padding(4)

View File

@@ -21,7 +21,7 @@ struct MyLiveReservationItemView: View {
HStack(spacing: 8) {
Image("ic_mic_colored")
Text("내가 개설한 라이브")
Text(I18n.LiveReservation.Item.ownCreatedLive)
.appFont(size: 18, weight: .bold)
.foregroundColor(Color(hex: "80D8FF"))
}
@@ -79,7 +79,7 @@ struct MyLiveReservationItemView: View {
VStack(alignment: .trailing, spacing: 8) {
VStack(spacing: 4) {
Text("\(dateDic["month"] ?? "")")
Text(I18n.LiveReservation.Item.month(dateDic["month"] ?? ""))
.appFont(size: 14, weight: .bold)
.foregroundColor(.white)
.padding(.vertical, 6)
@@ -112,7 +112,7 @@ struct MyLiveReservationItemView: View {
.background(Color(hex: "3b5ff1"))
.cornerRadius(4)
} else {
Text("무료")
Text(I18n.LiveReservation.Item.free)
.appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "#263238"))
.padding(4)

View File

@@ -20,14 +20,14 @@ struct SectionLiveReservationView: View {
var body: some View {
VStack(spacing: 13.3) {
HStack(spacing: 0) {
Text("라이브 예약중")
Text(I18n.LiveReservation.Section.title)
.appFont(size: 24, weight: .bold)
.foregroundColor(.white)
Spacer()
if items.count > 0 {
Text("전체보기")
Text(I18n.Common.viewAll)
.appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C"))
.onTapGesture {
@@ -101,7 +101,7 @@ struct SectionLiveReservationView: View {
.resizable()
.frame(width: 60, height: 60)
Text("지금 예약중인 라이브가 없습니다.\n채널을 팔로잉 하고 라이브 알림을 받아 보세요.")
Text(I18n.LiveReservation.Section.emptyStateMessage)
.appFont(size: 13, weight: .medium)
.foregroundColor(Color(hex: "bbbbbb"))
.fixedSize(horizontal: false, vertical: true)