채팅 화면과 비밀번호 재설정 현지화 추가

채팅방 잠금 및 초기화 안내 문구와 설정, 비밀번호 재설정\n제목을 다국어 문자열로 제공한다.
This commit is contained in:
Yu Sung
2025-12-19 22:12:41 +09:00
parent 3220f300b5
commit dbc4e40904
6 changed files with 121 additions and 33 deletions

View File

@@ -3320,6 +3320,22 @@
} }
} }
}, },
"대화 설정" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Chat settings"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "チャット設定"
}
}
}
},
"대화 중인 톡이 없습니다" : { "대화 중인 톡이 없습니다" : {
"localizations" : { "localizations" : {
"en" : { "en" : {
@@ -4088,18 +4104,18 @@
} }
} }
}, },
"모집완료" : { "모든 기기에서 로그아웃" : {
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "Recruitment closed" "value" : "Log out from all devices"
} }
}, },
"ja" : { "ja" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "募集終了" "value" : "すべての端末でログアウト"
} }
} }
} }
@@ -4120,18 +4136,18 @@
} }
} }
}, },
"모든 기기에서 로그아웃" : { "모집완료" : {
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "Log out from all devices" "value" : "Recruitment closed"
} }
}, },
"ja" : { "ja" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "すべての端末でログアウト" "value" : "募集終了"
} }
} }
} }
@@ -4440,6 +4456,22 @@
} }
} }
}, },
"배경 이미지 선택" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Select background image"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "背景画像を選択"
}
}
}
},
"보관" : { "보관" : {
"localizations" : { "localizations" : {
"en" : { "en" : {
@@ -4824,6 +4856,22 @@
} }
} }
}, },
"비밀번호 재설정" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Reset password"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "パスワード再設定"
}
}
}
},
"비밀번호 표시" : { "비밀번호 표시" : {
"localizations" : { "localizations" : {
"en" : { "en" : {
@@ -8552,22 +8600,6 @@
} }
} }
}, },
"캐릭터 정보" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Character info"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "キャラクター情報"
}
}
}
},
"캔" : { "캔" : {
"localizations" : { "localizations" : {
"en" : { "en" : {
@@ -8584,6 +8616,22 @@
} }
} }
}, },
"캐릭터 정보" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Character info"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "キャラクター情報"
}
}
}
},
"캔 충전" : { "캔 충전" : {
"localizations" : { "localizations" : {
"en" : { "en" : {

View File

@@ -227,13 +227,13 @@ struct ChatRoomView: View {
if let message = viewModel.selectedMessage, viewModel.selectedMessageIndex >= 0 { if let message = viewModel.selectedMessage, viewModel.selectedMessageIndex >= 0 {
SodaDialog( SodaDialog(
title: "잠금된 메시지", title: I18n.ChatRoom.lockedMessageTitle,
desc: "이 메시지를 \(message.price ?? 5)캔으로 잠금해제 하시겠습니까?", desc: I18n.ChatRoom.unlockMessageDescription(message.price ?? 5),
confirmButtonTitle: "잠금해제", confirmButtonTitle: I18n.ChatRoom.unlock,
confirmButtonAction: { confirmButtonAction: {
viewModel.purchaseChatMessage() viewModel.purchaseChatMessage()
}, },
cancelButtonTitle: "취소" cancelButtonTitle: I18n.Common.cancel
) { ) {
viewModel.selectedMessage = nil viewModel.selectedMessage = nil
viewModel.selectedMessageIndex = -1 viewModel.selectedMessageIndex = -1
@@ -265,14 +265,14 @@ struct ChatRoomView: View {
Color.black.opacity(0.7) Color.black.opacity(0.7)
SodaDialog( SodaDialog(
title: "대화 초기화", title: I18n.ChatRoom.resetTitle,
desc: "지금까지의 대화가 모두 초기화 되고 새롭게 대화를 시작합니다.", desc: I18n.ChatRoom.resetDescription,
confirmButtonTitle: "30캔으로 초기화", confirmButtonTitle: I18n.ChatRoom.resetWithCans(30),
confirmButtonAction: { confirmButtonAction: {
viewModel.resetChatRoom() viewModel.resetChatRoom()
viewModel.isShowingChatResetConfirmDialog = false viewModel.isShowingChatResetConfirmDialog = false
}, },
cancelButtonTitle: "취소", cancelButtonTitle: I18n.Common.cancel,
cancelButtonAction: { cancelButtonAction: {
viewModel.isShowingChatResetConfirmDialog = false viewModel.isShowingChatResetConfirmDialog = false
} }

View File

@@ -26,7 +26,7 @@ struct ChatBgSelectionView: View {
var body: some View { var body: some View {
BaseView(isLoading: $viewModel.isLoading) { BaseView(isLoading: $viewModel.isLoading) {
VStack(spacing: 0) { VStack(spacing: 0) {
DetailNavigationBar(title: "배경 이미지 선택") { DetailNavigationBar(title: String(localized: "배경 이미지 선택")) {
isShowing = false isShowing = false
} }
// //

View File

@@ -17,7 +17,7 @@ struct ChatSettingsView: View {
var body: some View { var body: some View {
VStack(spacing: 0) { VStack(spacing: 0) {
DetailNavigationBar(title: "대화 설정") { DetailNavigationBar(title: String(localized: "대화 설정")) {
isShowing = false isShowing = false
} }

View File

@@ -11,6 +11,46 @@ import Foundation
// String Catalog i18n. // String Catalog i18n.
// LanguageHeaderProvider.current("ko"|"en"|"ja"). // LanguageHeaderProvider.current("ko"|"en"|"ja").
enum I18n { enum I18n {
// ( )
enum ChatRoom {
//
static var lockedMessageTitle: String {
pick(ko: "잠금된 메시지", en: "Locked message", ja: "ロックされたメッセージ")
}
static func unlockMessageDescription(_ price: Int) -> String {
pick(
ko: "이 메시지를 \(price)캔으로 잠금해제 하시겠습니까?",
en: "Do you want to unlock this message for \(price) cans?",
ja: "このメッセージを\(price)缶で解除しますか?"
)
}
static var unlock: String {
pick(ko: "잠금해제", en: "Unlock", ja: "解除する")
}
//
static var resetTitle: String {
pick(ko: "대화 초기화", en: "Reset conversation", ja: "会話をリセット")
}
static var resetDescription: String {
pick(
ko: "지금까지의 대화가 모두 초기화 되고 새롭게 대화를 시작합니다.",
en: "All previous messages will be cleared and a new conversation will begin.",
ja: "これまでの会話がすべて初期化され、新しい会話を開始します。"
)
}
static func resetWithCans(_ cans: Int) -> String {
pick(
ko: "\(cans)캔으로 초기화",
en: "Reset with \(cans) cans",
ja: "\(cans)缶でリセット"
)
}
}
// //
enum Search { enum Search {
// : 2 // : 2

View File

@@ -17,7 +17,7 @@ struct FindPasswordView: View {
BaseView(isLoading: $viewModel.isLoading) { BaseView(isLoading: $viewModel.isLoading) {
GeometryReader { proxy in GeometryReader { proxy in
VStack(spacing: 0) { VStack(spacing: 0) {
DetailNavigationBar(title: "비밀번호 재설정") DetailNavigationBar(title: String(localized: "비밀번호 재설정"))
ScrollView(.vertical, showsIndicators: false) { ScrollView(.vertical, showsIndicators: false) {
VStack(spacing: 0) { VStack(spacing: 0) {