회원탈퇴 문구 다국어화
This commit is contained in:
@@ -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 {
|
||||||
// 화면 타이틀
|
// 화면 타이틀
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user