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

@@ -20,12 +20,12 @@ struct ApplyAuditionCompleteDialog: View {
.opacity(0.5)
VStack(spacing: 0) {
Text("오디션 지원")
Text(I18n.Audition.Apply.title)
.appFont(size: 18.3, weight: .bold)
.foregroundColor(Color.grayee)
.padding(.top, 26.7)
Text("보이스온 오디션에 지원해 주셔서 감사합니다.")
Text(I18n.Dialog.ApplyAuditionComplete.thankYouDescription)
.appFont(size: 15, weight: .medium)
.foregroundColor(Color.graybb)
.padding(.top, 15)
@@ -40,7 +40,7 @@ struct ApplyAuditionCompleteDialog: View {
.foregroundColor(Color.graybb)
.padding(.top, 10)
Text("확인")
Text(I18n.Common.confirm)
.appFont(size: 18.3, weight: .bold)
.foregroundColor(Color.white)
.padding(.vertical, 16)

View File

@@ -22,12 +22,12 @@ struct CommunityPostPurchaseDialog: View {
.frame(width: geo.size.width, height: geo.size.height)
VStack(spacing: 0) {
Text("게시글 보기")
Text(I18n.Dialog.CommunityPostPurchase.title)
.appFont(size: 18.3, weight: .bold)
.foregroundColor(Color.graybb)
.padding(.top, 40)
Text("게시글을\n확인하시겠습니까?")
Text(I18n.Dialog.CommunityPostPurchase.description)
.appFont(size: 15, weight: .medium)
.foregroundColor(Color.graybb)
.multilineTextAlignment(.center)
@@ -35,7 +35,7 @@ struct CommunityPostPurchaseDialog: View {
.padding(.horizontal, 13.3)
HStack(spacing: 13.3) {
Text("취소")
Text(I18n.Common.cancel)
.appFont(size: 15.3, weight: .bold)
.foregroundColor(Color.button)
.padding(.vertical, 16)
@@ -50,7 +50,7 @@ struct CommunityPostPurchaseDialog: View {
isShowing = false
}
Text("\(can)캔으로 보기")
Text(I18n.Dialog.CommunityPostPurchase.viewWithCans(can))
.appFont(size: 15.3, weight: .bold)
.foregroundColor(Color.white)
.padding(.vertical, 16)

View File

@@ -28,7 +28,7 @@ struct CreatorFollowNotifyDialog: View {
if isShow {
VStack(alignment: .leading, spacing: 24) {
Text("알림")
Text(I18n.Common.alertTitle)
.appFont(size: 18.3, weight: .bold)
.foregroundColor(Color.grayee)

View File

@@ -36,7 +36,7 @@ struct LivePaymentDialog: View {
if let startDateTime = startDateTime, let nowDateTime = nowDateTime, let desc = desc2 {
VStack(spacing: 13.3) {
HStack(spacing: 6.7) {
Text("- 시작 시각 : ")
Text(I18n.Dialog.LivePayment.startTimePrefix)
.appFont(size: 13.3, weight: .medium)
.foregroundColor(Color.graybb)
@@ -46,7 +46,7 @@ struct LivePaymentDialog: View {
}
HStack(spacing: 6.7) {
Text("- 현재 시각 :")
Text(I18n.Dialog.LivePayment.currentTimePrefix)
.appFont(size: 13.3, weight: .medium)
.foregroundColor(Color.graybb)
.multilineTextAlignment(.leading)
@@ -70,7 +70,7 @@ struct LivePaymentDialog: View {
}
HStack(spacing: 13.3) {
Text("취소")
Text(cancelButtonTitle)
.appFont(size: 18.3, weight: .bold)
.foregroundColor(Color.button)
.padding(.vertical, 16)
@@ -83,7 +83,7 @@ struct LivePaymentDialog: View {
)
.onTapGesture { cancelButtonAction() }
Text("결제 후 입장")
Text(confirmButtonTitle)
.appFont(size: 18.3, weight: .bold)
.padding(.vertical, 16)
.frame(maxWidth: .infinity)
@@ -106,9 +106,9 @@ struct LivePaymentDialog: View {
title: "유료 라이브 입장",
desc: "OO캔을 차감하고\n라이브에 입장 하시겠습니까?",
desc2: "라이브가 시작한 지 1시간 10분이 지났습니다. 라이브에 입장 후 30분 이내에 라이브가 종료될 수도 있습니다.",
confirmButtonTitle: "",
confirmButtonTitle: I18n.MemberChannel.paidLiveConfirmTitle,
confirmButtonAction: {},
cancelButtonTitle: "",
cancelButtonTitle: I18n.Common.cancel,
cancelButtonAction: {},
startDateTime: "2024-01-01 15:00",
nowDateTime: "2024-01-02 15:00"

View File

@@ -25,12 +25,12 @@ struct LiveRoomPasswordDialog: View {
.frame(width: geo.size.width, height: geo.size.height)
VStack(spacing: 0) {
Text("비밀번호 입력")
Text(I18n.Dialog.LiveRoomPassword.title)
.appFont(size: 18.3, weight: .bold)
.foregroundColor(Color(hex: "bbbbbb"))
.padding(.top, 40)
Text("비공개 라이브의 입장 비밀번호를\n입력해 주세요.")
Text(I18n.Dialog.LiveRoomPassword.description)
.appFont(size: 13, weight: .medium)
.foregroundColor(Color(hex: "bbbbbb"))
.multilineTextAlignment(.center)
@@ -38,8 +38,8 @@ struct LiveRoomPasswordDialog: View {
.padding(.horizontal, 13.3)
UserTextField(
title: "비밀번호",
hint: "비밀번호를 입력해 주세요",
title: I18n.Dialog.LiveRoomPassword.passwordFieldTitle,
hint: I18n.Dialog.LiveRoomPassword.passwordFieldPlaceholder,
isSecure: false,
variable: $password,
keyboardType: .numberPad
@@ -48,7 +48,7 @@ struct LiveRoomPasswordDialog: View {
.padding(.top, 13.3)
HStack(spacing: 13.3) {
Text("취소")
Text(I18n.Common.cancel)
.appFont(size: 15.3, weight: .bold)
.foregroundColor(Color(hex: "3bb9f1"))
.padding(.vertical, 16)
@@ -73,7 +73,7 @@ struct LiveRoomPasswordDialog: View {
.resizable()
.frame(width: 20, height: 20)
Text("으로 입장")
Text(I18n.Dialog.LiveRoomPassword.enterSuffix)
.appFont(size: 15.3, weight: .bold)
.foregroundColor(Color(hex: "ffffff"))
}
@@ -90,7 +90,7 @@ struct LiveRoomPasswordDialog: View {
isShowing = false
}
} else {
Text("입장하기")
Text(I18n.Dialog.LiveRoomPassword.enter)
.appFont(size: 15.3, weight: .bold)
.foregroundColor(Color(hex: "ffffff"))
.padding(.vertical, 16)

View File

@@ -25,7 +25,7 @@ struct MemberProfileDialog: View {
VStack(alignment: .leading, spacing: 21) {
HStack(spacing: 0) {
Text("프로필")
Text(I18n.Dialog.MemberProfile.title)
.appFont(size: 15, weight: .bold)
.foregroundColor(Color.grayee)
@@ -56,7 +56,7 @@ struct MemberProfileDialog: View {
.cornerRadius(8)
HStack(spacing: 8) {
Text(profile.isBlocked ? "차단 해제" : "차단")
Text(profile.isBlocked ? I18n.Dialog.MemberProfile.unblock : I18n.MemberChannel.blockAction)
.appFont(size: 15, weight: .bold)
.foregroundColor(Color.button)
.frame(maxWidth: .infinity)
@@ -76,7 +76,7 @@ struct MemberProfileDialog: View {
}
}
Text("사용자 신고")
Text(I18n.Dialog.MemberProfile.reportUser)
.appFont(size: 15, weight: .bold)
.foregroundColor(Color.button)
.frame(maxWidth: .infinity)
@@ -90,7 +90,7 @@ struct MemberProfileDialog: View {
)
.onTapGesture { viewModel.isShowUesrReportView = true }
Text("프로필 신고")
Text(I18n.Dialog.MemberProfile.reportProfile)
.appFont(size: 15, weight: .bold)
.foregroundColor(Color.button)
.frame(maxWidth: .infinity)
@@ -115,7 +115,7 @@ struct MemberProfileDialog: View {
.frame(maxWidth: screenSize().width - 33.3)
.onAppear {
if memberId <= 1 {
viewModel.errorMessage = "잘못된 요청입니다."
viewModel.errorMessage = I18n.Dialog.MemberProfile.invalidRequest
viewModel.isShowPopup = true
} else {
viewModel.getMemberProfile(memberId: memberId)