From 02d767d5d85e46417b42134cf042c6a0dc13f385 Mon Sep 17 00:00:00 2001 From: Yu Sung Date: Fri, 23 Jan 2026 05:27:26 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B2=80=EC=83=89=20=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=ED=95=98=EB=93=9C=20=EC=BD=94=EB=94=A9=EB=90=9C=20=ED=85=8D?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EB=8B=A4=EA=B5=AD=EC=96=B4=20=EC=A0=84?= =?UTF-8?q?=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SodaLive/Sources/I18n/I18n.swift | 28 +++++++++++++++++++ .../Sources/Search/SearchUnifiedView.swift | 8 +++--- SodaLive/Sources/Search/SearchView.swift | 10 +++---- SodaLive/Sources/Search/SearchViewModel.swift | 16 +++++------ 4 files changed, 45 insertions(+), 17 deletions(-) diff --git a/SodaLive/Sources/I18n/I18n.swift b/SodaLive/Sources/I18n/I18n.swift index 3a0acad..6bb4d0a 100644 --- a/SodaLive/Sources/I18n/I18n.swift +++ b/SodaLive/Sources/I18n/I18n.swift @@ -61,6 +61,34 @@ enum I18n { ja: "2文字以上で入力してください" ) } + + static var tabUnified: String { + pick(ko: "통합", en: "All", ja: "統合") + } + + static var tabCreator: String { + pick(ko: "채널", en: "Channel", ja: "チャンネル") + } + + static var tabContent: String { + pick(ko: "콘텐츠", en: "Content", ja: "コンテンツ") + } + + static var tabSeries: String { + pick(ko: "시리즈", en: "Series", ja: "シリーズ") + } + + static var noResults: String { + pick( + ko: "검색 결과가 없습니다.", + en: "No results found.", + ja: "検索結果がありません。" + ) + } + + static var more: String { + pick(ko: "더보기 >", en: "More >", ja: "もっと見る >") + } } enum ContentDetail { static var creatorOtherContents: String { diff --git a/SodaLive/Sources/Search/SearchUnifiedView.swift b/SodaLive/Sources/Search/SearchUnifiedView.swift index 38ef86d..deeed82 100644 --- a/SodaLive/Sources/Search/SearchUnifiedView.swift +++ b/SodaLive/Sources/Search/SearchUnifiedView.swift @@ -23,7 +23,7 @@ struct SearchUnifiedView: View { VStack(spacing: 30) { if !creatorList.isEmpty { SearchUnifiedItemView( - title: "채널", + title: I18n.Search.tabCreator, itemList: creatorList, onTapMore: onTapMoreCreator ) @@ -33,7 +33,7 @@ struct SearchUnifiedView: View { if !contentList.isEmpty { SearchUnifiedItemView( - title: "콘텐츠", + title: I18n.Search.tabContent, itemList: contentList, onTapMore: onTapMoreContent ) @@ -43,7 +43,7 @@ struct SearchUnifiedView: View { if !searchList.isEmpty { SearchUnifiedItemView( - title: "시리즈", + title: I18n.Search.tabSeries, itemList: searchList, onTapMore: onTapMoreSeries ) @@ -81,7 +81,7 @@ struct SearchUnifiedItemView: View { } } - Text("더보기 >") + Text(I18n.Search.more) .appFont(size: 13.3, weight: .medium) .foregroundColor(.grayee) .padding(.vertical, 10) diff --git a/SodaLive/Sources/Search/SearchView.swift b/SodaLive/Sources/Search/SearchView.swift index 7d9b3d6..0ef271f 100644 --- a/SodaLive/Sources/Search/SearchView.swift +++ b/SodaLive/Sources/Search/SearchView.swift @@ -19,10 +19,10 @@ struct SearchView: View { @State private var isFocused: Bool = false let tabItemList = [ - SearchViewTabItem(title: "통합", tab: .UNIFIED), - SearchViewTabItem(title: "채널", tab: .CREATOR), - SearchViewTabItem(title: "콘텐츠", tab: .CONTENT), - SearchViewTabItem(title: "시리즈", tab: .SERIES) + SearchViewTabItem(title: I18n.Search.tabUnified, tab: .UNIFIED), + SearchViewTabItem(title: I18n.Search.tabCreator, tab: .CREATOR), + SearchViewTabItem(title: I18n.Search.tabContent, tab: .CONTENT), + SearchViewTabItem(title: I18n.Search.tabSeries, tab: .SERIES) ] var body: some View { @@ -126,7 +126,7 @@ struct SearchView: View { viewModel.searchUnifiedContentList.isEmpty && viewModel.searchUnifiedSeriesList.isEmpty && viewModel.keyword.count > 2 { - Text("검색 결과가 없습니다.") + Text(I18n.Search.noResults) .appFont(size: 18.3, weight: .medium) .foregroundColor(.white) .padding(.top, 20) diff --git a/SodaLive/Sources/Search/SearchViewModel.swift b/SodaLive/Sources/Search/SearchViewModel.swift index fd71b01..a659fc2 100644 --- a/SodaLive/Sources/Search/SearchViewModel.swift +++ b/SodaLive/Sources/Search/SearchViewModel.swift @@ -120,14 +120,14 @@ final class SearchViewModel: ObservableObject { if let message = decoded.message { self.errorMessage = message } else { - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError } self.isShowPopup = true } } catch { DEBUG_LOG("error: \(error)") - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError self.isShowPopup = true } } @@ -167,14 +167,14 @@ final class SearchViewModel: ObservableObject { if let message = decoded.message { self.errorMessage = message } else { - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError } self.isShowPopup = true } } catch { ERROR_LOG("test: \(error)") - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError self.isShowPopup = true } } @@ -214,14 +214,14 @@ final class SearchViewModel: ObservableObject { if let message = decoded.message { self.errorMessage = message } else { - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError } self.isShowPopup = true } } catch { ERROR_LOG("test: \(error)") - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError self.isShowPopup = true } } @@ -261,14 +261,14 @@ final class SearchViewModel: ObservableObject { if let message = decoded.message { self.errorMessage = message } else { - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError } self.isShowPopup = true } } catch { ERROR_LOG("test: \(error)") - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError self.isShowPopup = true } }