회원탈퇴 문구 다국어화

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: "ポイント") }
}
// > (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 {
//

View File

@@ -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

View File

@@ -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
}