본문 바로가기

Project/MovieClip

영어 장르 이름을 한글로 표시하기

https://explorer89.tistory.com/321

 

genre_ids 의 Int 타입의 배열에 맞는 genre 찾기

📌 해결해야 할 문제1️⃣ 영화 목록 내 genre_ids의 값을 받아옴{ "page": 1, "results": [ { ... "genre_ids": [ 27, 53 ], ... }, 2️⃣ 장르의 값을 TMDB API를 통해 받아옴{ "genres": [ { "id": 27, "name": "공포" }, ... }, {

explorer89.tistory.com

 

✅ 위의 블로그와 이어진 내용

📌 특정 장르 이름을 커스텀 변환하여 한글로 표시하기

현재 getTVGenre()에서 가져오는 genre.name이 영어로 반환되는 경우가 있음

예를 들어 "Action & Adventure" → "액션 & 모험"로 변경하려면,

 

✅ 특정 영어 장르 이름을 한글로 변환하는 매핑 딕셔너리를 생성 필요

 

🚀 해결 방법

  1. 장르 변환 딕셔너리(genreTranslation)를 만들어서 특정 장르를 한글로 변환
  2. TV 데이터의 genreNames를 설정할 때, 변환 딕셔너리를 적용하여 한글로 변경
  3. CollectionViewCell에서 변경된 한글 장르를 표시하도록 업데이트

 

🔹 Step 1: 장르 변환 딕셔너리 추가

let genreTranslation: [String: String] = [
    "War & Politics": "전쟁 & 정치",
    "Action & Adventure": "액션 & 모험",
    "Sci-Fi & Fantasy": "SF & 판타지",
    "Kids": "어린이",
    "News": "뉴스",
    "Reality": "리얼리티",
    "Soap": "연속극"
]

 

🔹 Step 2: fetchMediaData()에서 장르 변환 적용

genreTranslation[genre.name] ?? genre.name → 한글로 변환할 수 있으면 변환하고, 없으면 원래 값 유지

private func fetchMediaData() {
    Task {
        do {
            // ✅ 1. 트렌딩 TV 목록 가져오기
            var trendingTVs = try await NetworkManager.shared.getTrendingTVs()

            // ✅ 2. 트렌딩 TV 장르 목록 가져오기
            let tvGenres = try await NetworkManager.shared.getTVGenre()

            // ✅ 3. 각 TV의 genreIds를 genreNames로 변환 (한글 적용)
            for i in 0..<trendingTVs.count {
                let tv = trendingTVs[i]
                let matchedGenres = tv.genreIDS.compactMap { genreId in
                    if let genre = tvGenres.first(where: { $0.id == genreId }) {
                        return genreTranslation[genre.name] ?? genre.name // ✅ 한글 변환 적용
                    }
                    return nil
                }

                // ✅ 장르 이름 저장
                trendingTVs[i].genreNames = matchedGenres
            }

            // ✅ 4. HomeViewController의 데이터 업데이트
            HomeViewController.homeSections = [
                .trendingTVs(trendingTVs)
            ]

            DispatchQueue.main.async {
                self.homeFeedTableView.reloadData()
            }
        } catch {
            print("Failed to fetch data: \(error)")
        }
    }
}

 

🔹 Step 3: CollectionViewCell에서 수정된 장르 표시

✅ 이제 특정 장르가 한글로 변환되어 CollectionViewCell에서 표시됨!

🔥추가로 변환할 장르가 있으면 genreTranslation에 추가하면 됨 🔥

func configureCollectionView(_ tv: TVResult) {
    titleLabel.text = tv.name
    releasedDateLabel.text = formatDateString(tv.firstAirDate)

    let score = (tv.voteAverage)
    if score != 0 {
        scoreLabel.configure(with: Int(score * 10))
    } else {
        scoreLabel.configure(with: 100)
    }

    let posterPath = tv.posterPath
    guard let url = URL(string: "https://image.tmdb.org/t/p/w500/\(posterPath)") else { return }
    posterImageView.sd_setImage(with: url, completed: nil)

    // ✅ 장르를 " / "로 구분하여 표시
    if let genres = tv.genreNames, !genres.isEmpty {
        genreLabel.text = genres.joined(separator: " / ") // ✅ "전쟁 & 정치 / 액션 & 모험" 형식으로 표시
    } else {
        genreLabel.text = "장르 없음"
    }
}