diff --git a/SodaLive/Sources/I18n/I18n.swift b/SodaLive/Sources/I18n/I18n.swift index 63dbcda..8abed6b 100644 --- a/SodaLive/Sources/I18n/I18n.swift +++ b/SodaLive/Sources/I18n/I18n.swift @@ -111,6 +111,133 @@ enum I18n { static var points: String { pick(ko: "포인트", en: "Points", ja: "ポイント") } } + // 설정 > 회원탈퇴(SignOut) + enum Settings { + enum SignOut { + // 탈퇴 사유 목록 (UI에서 그대로 배열로 사용 가능) + static var reasons: [String] { + [ + reasonChangeNickname, + reasonConflictWithUser, + reasonInconvenientManyErrors, + reasonDislikeOperation, + reasonOtherServiceBetter, + reasonWantToDeleteContent, + reasonLowFrequency, + reasonNoDesiredContentOrCreator, + reasonTooExpensive, + other + ] + } + + static var reasonChangeNickname: String { + pick( + ko: "닉네임을 변경하고 싶어서", + en: "I want to change my nickname", + ja: "ニックネームを変更したいから" + ) + } + + static var reasonConflictWithUser: String { + pick( + ko: "다른 사용자와의 다툼이 있어서", + en: "Conflict with another user", + ja: "他のユーザーとトラブルがあったから" + ) + } + + static var reasonInconvenientManyErrors: String { + pick( + ko: "이용이 불편하고 장애가 많아서", + en: "Inconvenient to use and many errors", + ja: "使いにくく障害が多いから" + ) + } + + static var reasonDislikeOperation: String { + pick( + ko: "서비스 운영이 마음에 들지 않아서", + en: "Dissatisfied with service operations", + ja: "サービス運営が気に入らないから" + ) + } + + static var reasonOtherServiceBetter: String { + pick( + ko: "다른 서비스가 더 좋아서", + en: "Another service is better", + ja: "他のサービスの方が良いから" + ) + } + + static var reasonWantToDeleteContent: String { + pick( + ko: "삭제하고 싶은 내용이 있어서", + en: "I want to delete some content", + ja: "削除したい内容があるから" + ) + } + + static var reasonLowFrequency: String { + pick( + ko: "이용빈도가 낮아서", + en: "I use the service infrequently", + ja: "利用頻度が低いから" + ) + } + + static var reasonNoDesiredContentOrCreator: String { + pick( + ko: "원하는 콘텐츠나 크리에이터가 없어서", + en: "I can't find desired content or creators", + ja: "望むコンテンツやクリエイターがいないから" + ) + } + + static var reasonTooExpensive: String { + pick( + ko: "이용요금이 비싸서", + en: "The price is too high", + ja: "利用料金が高いから" + ) + } + + static var other: String { + pick( + ko: "기타", + en: "Other", + ja: "その他" + ) + } + + // 검증 메시지 + static var selectReasonRequired: String { + pick( + ko: "계정을 삭제하려는 이유를 선택해 주세요.", + en: "Please select a reason for deleting your account.", + ja: "アカウント削除の理由を選択してください。" + ) + } + + // 비밀번호 확인 필드 + static var passwordTitle: String { + pick( + ko: "비밀번호 확인", + en: "Password confirmation", + ja: "パスワード確認" + ) + } + + static var passwordPlaceholder: String { + pick( + ko: "비밀번호를 입력해주세요.", + en: "Please enter your password.", + ja: "パスワードを入力してください。" + ) + } + } + } + // 쿠폰 등록/사용 화면 관련 텍스트 enum CanCoupon { // 화면 타이틀 diff --git a/SodaLive/Sources/Settings/SignOut/SignOutView.swift b/SodaLive/Sources/Settings/SignOut/SignOutView.swift index 23bec6d..a9524cf 100644 --- a/SodaLive/Sources/Settings/SignOut/SignOutView.swift +++ b/SodaLive/Sources/Settings/SignOut/SignOutView.swift @@ -82,8 +82,8 @@ struct SignOutView: View { .padding(.top, 16.7) UserTextField( - title: "비밀번호 확인", - hint: "비밀번호를 입력해주세요.", + title: I18n.Settings.SignOut.passwordTitle, + hint: I18n.Settings.SignOut.passwordPlaceholder, isSecure: true, variable: $viewModel.password, keyboardType: .emailAddress diff --git a/SodaLive/Sources/Settings/SignOut/SignOutViewModel.swift b/SodaLive/Sources/Settings/SignOut/SignOutViewModel.swift index 55a0354..523e566 100644 --- a/SodaLive/Sources/Settings/SignOut/SignOutViewModel.swift +++ b/SodaLive/Sources/Settings/SignOut/SignOutViewModel.swift @@ -13,18 +13,7 @@ final class SignOutViewModel: ObservableObject { private let repository = UserRepository() private var subscription = Set() - let reasons = [ - "닉네임을 변경하고 싶어서", - "다른 사용자와의 다툼이 있어서", - "이용이 불편하고 장애가 많아서", - "서비스 운영이 마음에 들지 않아서", - "다른 서비스가 더 좋아서", - "삭제하고 싶은 내용이 있어서", - "이용빈도가 낮아서", - "원하는 콘텐츠나 크리에이터가 없어서", - "이용요금이 비싸서", - "기타" - ] + let reasons = I18n.Settings.SignOut.reasons @Published var reasonSelectedIndex = -1 @Published var reason = "" @@ -62,13 +51,13 @@ final class SignOutViewModel: 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 } } @@ -78,7 +67,7 @@ final class SignOutViewModel: ObservableObject { private func validate() -> Bool { if reasonSelectedIndex < 0 || (reasonSelectedIndex == reasons.count - 1 && self.reason.trimmingCharacters(in: .whitespaces).isEmpty) { - errorMessage = "계정을 삭제하려는 이유를 선택해 주세요." + errorMessage = I18n.Settings.SignOut.selectReasonRequired isShowPopup = true return false }