회원탈퇴 문구 다국어화
This commit is contained in:
@@ -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 {
|
||||
// 화면 타이틀
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -13,18 +13,7 @@ final class SignOutViewModel: ObservableObject {
|
||||
private let repository = UserRepository()
|
||||
private var subscription = Set<AnyCancellable>()
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user