회원탈퇴 문구 다국어화

This commit is contained in:
Yu Sung
2025-12-19 21:43:32 +09:00
parent 0ddb5810b1
commit 8dae75afd7
3 changed files with 133 additions and 17 deletions

View File

@@ -111,6 +111,133 @@ enum I18n {
static var points: String { pick(ko: "포인트", en: "Points", ja: "ポイント") } 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 { enum CanCoupon {
// //

View File

@@ -82,8 +82,8 @@ struct SignOutView: View {
.padding(.top, 16.7) .padding(.top, 16.7)
UserTextField( UserTextField(
title: "비밀번호 확인", title: I18n.Settings.SignOut.passwordTitle,
hint: "비밀번호를 입력해주세요.", hint: I18n.Settings.SignOut.passwordPlaceholder,
isSecure: true, isSecure: true,
variable: $viewModel.password, variable: $viewModel.password,
keyboardType: .emailAddress keyboardType: .emailAddress

View File

@@ -13,18 +13,7 @@ final class SignOutViewModel: ObservableObject {
private let repository = UserRepository() private let repository = UserRepository()
private var subscription = Set<AnyCancellable>() private var subscription = Set<AnyCancellable>()
let reasons = [ let reasons = I18n.Settings.SignOut.reasons
"닉네임을 변경하고 싶어서",
"다른 사용자와의 다툼이 있어서",
"이용이 불편하고 장애가 많아서",
"서비스 운영이 마음에 들지 않아서",
"다른 서비스가 더 좋아서",
"삭제하고 싶은 내용이 있어서",
"이용빈도가 낮아서",
"원하는 콘텐츠나 크리에이터가 없어서",
"이용요금이 비싸서",
"기타"
]
@Published var reasonSelectedIndex = -1 @Published var reasonSelectedIndex = -1
@Published var reason = "" @Published var reason = ""
@@ -62,13 +51,13 @@ final class SignOutViewModel: ObservableObject {
if let message = decoded.message { if let message = decoded.message {
self.errorMessage = message self.errorMessage = message
} else { } else {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." self.errorMessage = I18n.Common.commonError
} }
self.isShowPopup = true self.isShowPopup = true
} }
} catch { } catch {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." self.errorMessage = I18n.Common.commonError
self.isShowPopup = true self.isShowPopup = true
} }
} }
@@ -78,7 +67,7 @@ final class SignOutViewModel: ObservableObject {
private func validate() -> Bool { private func validate() -> Bool {
if reasonSelectedIndex < 0 || (reasonSelectedIndex == reasons.count - 1 && self.reason.trimmingCharacters(in: .whitespaces).isEmpty) { if reasonSelectedIndex < 0 || (reasonSelectedIndex == reasons.count - 1 && self.reason.trimmingCharacters(in: .whitespaces).isEmpty) {
errorMessage = "계정을 삭제하려는 이유를 선택해 주세요." errorMessage = I18n.Settings.SignOut.selectReasonRequired
isShowPopup = true isShowPopup = true
return false return false
} }