diff --git a/SodaLive/Resources/Localizable.xcstrings b/SodaLive/Resources/Localizable.xcstrings index 39e0bb6..5166cde 100644 --- a/SodaLive/Resources/Localizable.xcstrings +++ b/SodaLive/Resources/Localizable.xcstrings @@ -4068,22 +4068,6 @@ } } }, - "모집완료" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Recruitment closed" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "募集終了" - } - } - } - }, "목" : { "localizations" : { "en" : { @@ -4100,6 +4084,22 @@ } } }, + "모집완료" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recruitment closed" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "募集終了" + } + } + } + }, "모집중" : { "localizations" : { "en" : { @@ -4148,6 +4148,22 @@ } } }, + "무료 콘텐츠 전체" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "All free content" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "無料コンテンツ一覧" + } + } + } + }, "문자" : { "localizations" : { "en" : { @@ -6724,102 +6740,6 @@ } } }, - "이벤트 참여하기" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Join the event" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "イベントに参加する" - } - } - } - }, - "이용약관" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terms of service" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "利用規約" - } - } - } - }, - "인기" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Popular" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "人気" - } - } - } - }, - "인기순" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "By popularity" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "人気順" - } - } - } - }, - "인증완료" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verification completed" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "認証完了" - } - } - } - }, - "일" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sun" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "日" - } - } - } - }, "이메일" : { "localizations" : { "en" : { @@ -6900,6 +6820,38 @@ } } }, + "이벤트 참여하기" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Join the event" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "イベントに参加する" + } + } + } + }, + "이용약관" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terms of service" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "利用規約" + } + } + } + }, "이전화" : { "localizations" : { "en" : { @@ -6916,6 +6868,22 @@ } } }, + "인기" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Popular" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "人気" + } + } + } + }, "인기 시리즈" : { "localizations" : { "en" : { @@ -6996,6 +6964,54 @@ } } }, + "인기순" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "By popularity" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "人気順" + } + } + } + }, + "인증완료" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verification completed" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認証完了" + } + } + } + }, + "일" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sun" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "日" + } + } + } + }, "일간 랭킹" : { "localizations" : { "en" : { @@ -8676,6 +8692,22 @@ } } }, + "콘텐츠 전체" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "All content" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "コンテンツ一覧" + } + } + } + }, "콘텐츠 전체보기" : { "localizations" : { "en" : { @@ -9124,6 +9156,22 @@ } } }, + "포인트 대여 전체" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "All point rentals" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ポイントレンタル一覧" + } + } + } + }, "포인트 대여 콘텐츠" : { "localizations" : { "en" : { @@ -9638,4 +9686,4 @@ } }, "version" : "1.1" -} \ No newline at end of file +} diff --git a/SodaLive/Sources/Content/All/ContentAllView.swift b/SodaLive/Sources/Content/All/ContentAllView.swift index 5c827ca..577b8f7 100644 --- a/SodaLive/Sources/Content/All/ContentAllView.swift +++ b/SodaLive/Sources/Content/All/ContentAllView.swift @@ -18,7 +18,7 @@ struct ContentAllView: View { NavigationView { BaseView(isLoading: $viewModel.isLoading) { VStack(spacing: 0) { - DetailNavigationBar(title: isFree ? "무료 콘텐츠 전체" : isPointAvailableOnly ? "포인트 대여 전체" : "콘텐츠 전체") + DetailNavigationBar(title: isFree ? String(localized: "무료 콘텐츠 전체") : isPointAvailableOnly ? String(localized: "포인트 대여 전체") : String(localized: "콘텐츠 전체")) if !viewModel.themeList.isEmpty { ContentMainContentThemeView( diff --git a/SodaLive/Sources/Content/All/ContentAllViewModel.swift b/SodaLive/Sources/Content/All/ContentAllViewModel.swift index 04664ce..14e998d 100644 --- a/SodaLive/Sources/Content/All/ContentAllViewModel.swift +++ b/SodaLive/Sources/Content/All/ContentAllViewModel.swift @@ -32,7 +32,7 @@ final class ContentAllViewModel: ObservableObject { } } - @Published var selectedTheme = "전체" { + @Published var selectedTheme = I18n.Category.all { didSet { page = 1 isLast = false @@ -52,7 +52,7 @@ final class ContentAllViewModel: ObservableObject { if !isLast && !isLoading { isLoading = true - repository.getAllAudioContents(page: page, size: pageSize, isFree: isFree, isPointAvailableOnly: isPointAvailableOnly, sortType: sort, theme: selectedTheme == "전체" ? nil : selectedTheme) + repository.getAllAudioContents(page: page, size: pageSize, isFree: isFree, isPointAvailableOnly: isPointAvailableOnly, sortType: sort, theme: selectedTheme == I18n.Category.all ? nil : selectedTheme) .sink { result in switch result { case .finished: @@ -84,13 +84,13 @@ final class ContentAllViewModel: ObservableObject { if let message = decoded.message { self.errorMessage = message } else { - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError } self.isShowPopup = true } } catch { - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError self.isShowPopup = true self.isLoading = false } @@ -118,18 +118,18 @@ final class ContentAllViewModel: ObservableObject { self.isLoading = false if let data = decoded.data, decoded.success { - self.themeList = ["전체"] + data + self.themeList = [I18n.Category.all] + data } else { if let message = decoded.message { self.errorMessage = message } else { - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError } self.isShowPopup = true } } catch { - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError self.isShowPopup = true self.isLoading = false } diff --git a/SodaLive/Sources/Content/All/ContentNewAllViewModel.swift b/SodaLive/Sources/Content/All/ContentNewAllViewModel.swift index ee55f67..7122a8e 100644 --- a/SodaLive/Sources/Content/All/ContentNewAllViewModel.swift +++ b/SodaLive/Sources/Content/All/ContentNewAllViewModel.swift @@ -20,7 +20,7 @@ final class ContentNewAllViewModel: ObservableObject { @Published var themeList = [String]() @Published var newContentList = [GetAudioContentMainItem]() - @Published var selectedTheme = "전체" { + @Published var selectedTheme = I18n.Category.all { didSet { page = 1 isLast = false @@ -41,7 +41,7 @@ final class ContentNewAllViewModel: ObservableObject { repository.getNewContentAllOfTheme( isFree: isFree, - theme: selectedTheme == "전체" ? "" : selectedTheme, + theme: selectedTheme == I18n.Category.all ? "" : selectedTheme, page: page, size: pageSize ) @@ -78,13 +78,13 @@ final class ContentNewAllViewModel: ObservableObject { if let message = decoded.message { self.errorMessage = message } else { - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError } self.isShowPopup = true } } catch { - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError self.isShowPopup = true self.isLoading = false } @@ -113,19 +113,19 @@ final class ContentNewAllViewModel: ObservableObject { if let data = decoded.data, decoded.success { self.themeList.removeAll() - self.themeList.append("전체") + self.themeList.append(I18n.Category.all) self.themeList.append(contentsOf: data) } else { if let message = decoded.message { self.errorMessage = message } else { - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError } self.isShowPopup = true } } catch { - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + self.errorMessage = I18n.Common.commonError self.isShowPopup = true } }