메시지 현지화와 종료 라이브 날짜 추가

문자 메시지 화면에 새 현지화 문구를 추가한다.
This commit is contained in:
Yu Sung
2025-12-19 23:31:14 +09:00
parent dbc4e40904
commit 7307e5b255
6 changed files with 135 additions and 64 deletions

View File

@@ -4008,6 +4008,22 @@
} }
} }
}, },
"메시지" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Message"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "メッセージ"
}
}
}
},
"메시지 보관" : { "메시지 보관" : {
"localizations" : { "localizations" : {
"en" : { "en" : {
@@ -4104,22 +4120,6 @@
} }
} }
}, },
"모든 기기에서 로그아웃" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Log out from all devices"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "すべての端末でログアウト"
}
}
}
},
"목" : { "목" : {
"localizations" : { "localizations" : {
"en" : { "en" : {
@@ -4136,6 +4136,22 @@
} }
} }
}, },
"모든 기기에서 로그아웃" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Log out from all devices"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "すべての端末でログアウト"
}
}
}
},
"모집완료" : { "모집완료" : {
"localizations" : { "localizations" : {
"en" : { "en" : {
@@ -4360,6 +4376,22 @@
} }
} }
}, },
"받는 사람 검색" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Search recipient"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "受信者を検索"
}
}
}
},
"받은 메시지" : { "받은 메시지" : {
"localizations" : { "localizations" : {
"en" : { "en" : {
@@ -6856,6 +6888,38 @@
} }
} }
}, },
"이용약관" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Terms of service"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "利用規約"
}
}
}
},
"일" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sun"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "日"
}
}
}
},
"이메일" : { "이메일" : {
"localizations" : { "localizations" : {
"en" : { "en" : {
@@ -6952,22 +7016,6 @@
} }
} }
}, },
"이용약관" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Terms of service"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "利用規約"
}
}
}
},
"이전화" : { "이전화" : {
"localizations" : { "localizations" : {
"en" : { "en" : {
@@ -7112,22 +7160,6 @@
} }
} }
}, },
"일" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sun"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "日"
}
}
}
},
"일간 랭킹" : { "일간 랭킹" : {
"localizations" : { "localizations" : {
"en" : { "en" : {

View File

@@ -713,6 +713,45 @@ enum I18n {
) )
} }
} }
// (Text Message)
enum TextMessage {
//
static var send: String {
pick(ko: "메시지 보내기", en: "Send message", ja: "メッセージを送る")
}
//
static var placeholder: String {
pick(ko: "내용을 입력해 주세요.", en: "Please enter your message.", ja: "内容を入力してください。")
}
//
static var recipientPlaceholder: String {
pick(ko: "받는 사람", en: "Recipient", ja: "受信者")
}
//
static var selectRecipient: String {
pick(ko: "받는 사람을 선택해 주세요.", en: "Please select a recipient.", ja: "受信者を選択してください。")
}
// /
static var sendSuccess: String {
pick(ko: "메시지 전송이 완료되었습니다.", en: "Your message has been sent.", ja: "メッセージの送信が完了しました。")
}
enum Validation {
//
static func minLength(_ count: Int) -> String {
pick(
ko: "\(count)글자 이상 입력해 주세요.",
en: "Please enter at least \(count) characters.",
ja: "\(count)文字以上で入力してください。"
)
}
}
}
} }
// MARK: - // MARK: -

View File

@@ -17,7 +17,7 @@ struct MessageView: View {
Color.black Color.black
VStack { VStack {
DetailNavigationBar(title: "메시지") DetailNavigationBar(title: String(localized: "메시지"))
Tab() Tab()

View File

@@ -18,7 +18,7 @@ struct SelectRecipientView: View {
var body: some View { var body: some View {
BaseView { BaseView {
VStack(spacing: 20) { VStack(spacing: 20) {
DetailNavigationBar(title: "받는 사람 검색") { DetailNavigationBar(title: String(localized: "받는 사람 검색")) {
isShowing = false isShowing = false
} }

View File

@@ -40,9 +40,9 @@ final class TextMessageViewModel: ObservableObject {
@Published var recipientNickname: String = "" @Published var recipientNickname: String = ""
@Published var recipientId = 0 @Published var recipientId = 0
@Published var sendText = "메시지 보내기" @Published var sendText = I18n.TextMessage.send
let placeholder = "내용을 입력해 주세요." let placeholder = I18n.TextMessage.placeholder
var isLast = false var isLast = false
var page = 1 var page = 1
@@ -51,13 +51,13 @@ final class TextMessageViewModel: ObservableObject {
func write() { func write() {
let textMessage = message.trimmingCharacters(in: .whitespacesAndNewlines) != placeholder ? message : "" let textMessage = message.trimmingCharacters(in: .whitespacesAndNewlines) != placeholder ? message : ""
if recipientId <= 0 { if recipientId <= 0 {
errorMessage = "받는 사람을 선택해 주세요." errorMessage = I18n.TextMessage.selectRecipient
isShowPopup = true isShowPopup = true
return return
} }
if textMessage.count < 10 { if textMessage.count < 10 {
errorMessage = "10글자 이상 입력해 주세요." errorMessage = I18n.TextMessage.Validation.minLength(10)
isShowPopup = true isShowPopup = true
return return
} }
@@ -82,7 +82,7 @@ final class TextMessageViewModel: ObservableObject {
let decoded = try jsonDecoder.decode(ApiResponseWithoutData.self, from: responseData) let decoded = try jsonDecoder.decode(ApiResponseWithoutData.self, from: responseData)
if decoded.success { if decoded.success {
self.errorMessage = "메시지 전송이 완료되었습니다." self.errorMessage = I18n.TextMessage.sendSuccess
self.isShowPopup = true self.isShowPopup = true
DispatchQueue.main.asyncAfter(deadline: .now() + 1) { DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
AppState.shared.back() AppState.shared.back()
@@ -91,13 +91,13 @@ final class TextMessageViewModel: 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
} }
} }
@@ -140,13 +140,13 @@ final class TextMessageViewModel: 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
} }
} }
@@ -188,13 +188,13 @@ final class TextMessageViewModel: 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
} }
} }
@@ -236,13 +236,13 @@ final class TextMessageViewModel: 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
} }
} }

View File

@@ -64,7 +64,7 @@ struct VoiceMessageWriteView: View {
Text( Text(
viewModel.recipientNickname.count > 0 ? viewModel.recipientNickname.count > 0 ?
viewModel.recipientNickname : viewModel.recipientNickname :
"받는 사람" I18n.TextMessage.recipientPlaceholder
) )
.font( .font(
.custom( .custom(