캐릭터 상세 - 언어 설정에 따라 번역 데이터를 표시하도록 수정
This commit is contained in:
@@ -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?
|
||||||
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user