채팅 화면과 비밀번호 재설정 현지화 추가
채팅방 잠금 및 초기화 안내 문구와 설정, 비밀번호 재설정\n제목을 다국어 문자열로 제공한다.
This commit is contained in:
@@ -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" : {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
// 갤러리 그리드
|
// 갤러리 그리드
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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글자 이상 안내
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user