캐릭터 상세 - 언어 설정에 따라 번역 데이터를 표시하도록 수정

This commit is contained in:
Yu Sung
2025-12-17 00:16:29 +09:00
parent 96df4c1f1b
commit b61f432b72
2 changed files with 30 additions and 10 deletions

View File

@@ -22,6 +22,7 @@ struct CharacterDetailResponse: Decodable {
let others: [OtherCharacter] let others: [OtherCharacter]
let latestComment: CharacterCommentResponse? let latestComment: CharacterCommentResponse?
let totalComments: Int let totalComments: Int
let translated: TranslatedAiCharacterDetail?
} }
enum CharacterType: String, Decodable { enum CharacterType: String, Decodable {
@@ -44,3 +45,22 @@ struct CharacterBackgroundResponse: Decodable {
let topic: String let topic: String
let description: String let description: String
} }
struct TranslatedAiCharacterDetail: Decodable {
let name: String?
let description: String?
let gender: String?
let personality: TranslatedAiCharacterPersonality?
let background: TranslatedAiCharacterBackground?
let tags: String?
}
struct TranslatedAiCharacterPersonality: Decodable {
let trait: String?
let description: String?
}
struct TranslatedAiCharacterBackground: Decodable {
let topic: String?
let description: String?
}

View File

@@ -59,7 +59,7 @@ struct CharacterDetailView: View {
// //
if let backgrounds = viewModel.characterDetail?.backgrounds { if let backgrounds = viewModel.characterDetail?.backgrounds {
worldViewSection(backgrounds: backgrounds) worldViewSection(backgrounds: viewModel.characterDetail?.translated?.background?.description ?? backgrounds.description)
} }
// //
@@ -70,7 +70,7 @@ struct CharacterDetailView: View {
// //
if let personalities = viewModel.characterDetail?.personalities { if let personalities = viewModel.characterDetail?.personalities {
personalitySection(personalities: personalities) personalitySection(personalities: viewModel.characterDetail?.translated?.personality?.description ?? personalities.description)
} }
// //
@@ -204,7 +204,7 @@ extension CharacterDetailView {
{ {
HStack(spacing: 4) { HStack(spacing: 4) {
if let gender = viewModel.characterDetail?.gender { if let gender = viewModel.characterDetail?.gender {
Text(gender) Text(viewModel.characterDetail?.translated?.gender ?? gender)
.font(.custom(Font.preRegular.rawValue, size: 14)) .font(.custom(Font.preRegular.rawValue, size: 14))
.foregroundColor( .foregroundColor(
gender == "남성" ? gender == "남성" ?
@@ -262,7 +262,7 @@ extension CharacterDetailView {
// //
HStack(spacing: 8) { HStack(spacing: 8) {
Text(viewModel.characterDetail?.name ?? "") Text(viewModel.characterDetail?.translated?.name ?? viewModel.characterDetail?.name ?? "")
.font(.custom(Font.preBold.rawValue, size: 26)) .font(.custom(Font.preBold.rawValue, size: 26))
.foregroundColor(.white) .foregroundColor(.white)
.lineLimit(1) .lineLimit(1)
@@ -282,11 +282,11 @@ extension CharacterDetailView {
} }
// //
Text(viewModel.characterDetail?.description ?? "") Text(viewModel.characterDetail?.translated?.description ?? viewModel.characterDetail?.description ?? "")
.font(.custom(Font.preRegular.rawValue, size: 18)) .font(.custom(Font.preRegular.rawValue, size: 18))
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
Text(viewModel.characterDetail?.tags ?? "") Text(viewModel.characterDetail?.translated?.tags ?? viewModel.characterDetail?.tags ?? "")
.font(.custom(Font.preRegular.rawValue, size: 14)) .font(.custom(Font.preRegular.rawValue, size: 14))
.foregroundColor(Color(hex: "3BB9F1")) .foregroundColor(Color(hex: "3BB9F1"))
.multilineTextAlignment(.leading) .multilineTextAlignment(.leading)
@@ -297,7 +297,7 @@ extension CharacterDetailView {
// MARK: - World View Section // MARK: - World View Section
extension CharacterDetailView { extension CharacterDetailView {
private func worldViewSection(backgrounds: CharacterBackgroundResponse) -> some View { private func worldViewSection(backgrounds: String) -> some View {
VStack(alignment: .leading, spacing: 8) { VStack(alignment: .leading, spacing: 8) {
HStack { HStack {
Text("[세계관 및 작품 소개]") Text("[세계관 및 작품 소개]")
@@ -307,7 +307,7 @@ extension CharacterDetailView {
Spacer() Spacer()
} }
CharacterExpandableTextView(text: backgrounds.description) CharacterExpandableTextView(text: backgrounds)
} }
.padding(.horizontal, 24) .padding(.horizontal, 24)
} }
@@ -357,7 +357,7 @@ extension CharacterDetailView {
// MARK: - Personality Section // MARK: - Personality Section
extension CharacterDetailView { extension CharacterDetailView {
private func personalitySection(personalities: CharacterPersonalityResponse) -> some View { private func personalitySection(personalities: String) -> some View {
VStack(alignment: .leading, spacing: 8) { VStack(alignment: .leading, spacing: 8) {
HStack { HStack {
Text("[성격 및 특징]") Text("[성격 및 특징]")
@@ -367,7 +367,7 @@ extension CharacterDetailView {
Spacer() Spacer()
} }
CharacterExpandableTextView(text: personalities.description) CharacterExpandableTextView(text: personalities)
// //
VStack(alignment: .leading, spacing: 16) { VStack(alignment: .leading, spacing: 16) {