[포켓몬] 한국어네? 한국어야?

김하민·2025년 1월 6일
3
post-thumbnail

예, 간만입니다.

일단 해야 하는 게 뭐였냐면...

PokéAPI를 사용해서 MVVM 구조로 도감을 만드는 것입니다.

RxSwift와 MVVM 구조는 처음이라 좀 익숙치 않았는데,

처음이니까~ 하면서 우당탕탕 진행하면서

아무 일 없던 척 다음 단계로 넘어가던 와중에...

현지화를 해야된다

영어로 된 포켓몬의 이름과 타입 등을 한국어로 현지화해서 나타내야 하는 과정에 도달했습니다.

근데 과제에선 말이죠,

import Foundation

enum PokemonTranslator {
    private static let koreanNames: [String: String] = [
        "bulbasaur": "이상해씨",
        "ivysaur": "이상해풀",
        
        // (중략)
        
        "mewtwo": "뮤츠",
        "mew": "뮤"
    ]
    
    static func getKoreanName(for englishName: String) -> String {
        return koreanNames[englishName.lowercased()] ?? englishName
    }
}

/* 사용 예시
 let pokemonName = "Pikachu"
 let koreanName = PokemonTranslator.getKoreanName(for: pokemonName)
 print("\(pokemonName)의 한국어 이름: \(koreanName)")
 */

요런 식으로 현지화를 하라고 코드를 제공해주셨더라고요?

물론... 나쁘지 않은 해결책이지만...

  1. 저렇게 코드 고봉밥이 있는 것
  2. 추후 범위를 넓히면 또 수동으로 추가해줘야 한다는 점
  3. 사용하지 않을 수도 있는 정보들이 static으로 선언되어 메모리에서 자리를 차지하고 있는 것

↑와 같은 사유 때문에 맘이 불편해서, 분명히 방법이 있을 것이야...를 되뇌며 pokeAPI를 쥐 잡듯 뒤졌습니다.

그러다가...?

음?
너 일로와봐

어어??
다국어 지원이 안 되는 데 이게 있을 리가 없죠?

더 찾아봅시다.

그랬더니 PokéAPI 깃헙에서 이것을 발견했습니다.

링크 들어가기 귀찮은 분들을 위한 스샷↓

오호... pokemon species로 찾으면 뭔가 나올 것 같네요.

PokéAPI 문서로 돌아가봅시다.

음... pokemon species니까... Pokémon에서 찾아볼까요...?

오호
어디 그럼 https://pokeapi.co/api/v2/pokemon-species/1 로 들어가서 최종 확인해봅시다.

딴~ 라라란~ 따라란~ 따라란~ 따~ 쿵짝짝~ 쿵짝짝~ 따라리라라리
(BGM - 요한 슈트라우스 2세: 봄의 소리 왈츠)

한국어네?

한국어야?

갓챠

있었습니다. 한국어가!

그럼 새롭게 발견한 이 녀석을 사용해주기 위해...

struct PokemonSpecies: Codable {
    var names: [Name] = []
}

struct Name: Codable {
    let name: String
    let language: Language
}

struct Language: Codable {
    let name: String
    let url: String
}

JSON 디코딩을 위한 구조체를 선언해주고...

private func fetchLocalizedNames() {
    guard let url = URL(string: "https://pokeapi.co/api/v2/pokemon-species/\(pokemonID.description)") else {
        namesSubject.onError(NetworkError.invalidURL)
        return
    }
    
    NetworkManager.shared.fetch(url: url)
        .subscribe(onSuccess: { [weak self] (names: PokemonSpecies) in
            self?.namesSubject.onNext(names)
        }, onFailure: { [weak self] error in
            self?.namesSubject.onError(error)
        }).disposed(by: disposeBag)
}

ViewModel에서 정보를 받아오는 부분을 추가해주고...

View에서 적용해주면...?

한국어로 잘 나오는군요

추가 사항

다른 분들이 겪으신 29. 니드런♀이나 122. 마임맨 등의 api에서 영어이름이 수정되어 현지화된 이름이 나오지 않는 문제를 소 뒷걸음질치다 쥐 잡은 격으로 겪지 않게 되었네요...? 완전 럭키비키잖아💛✨

6개의 댓글

comment-user-thumbnail
2025년 1월 6일

헐!!!!!!!!!!! 저 방금 과제에서 준 enum에 현지화 데이터 더 추가하고 왔는데요!!!
하민님 게시글 참고해서 리팩토링 해보아야겠습니다!!!!!!!!

1개의 답글
comment-user-thumbnail
2025년 1월 7일

해설강의에서 기 꺾여서 리팩토링에는 실패한 채 팀프로젝트가 시작되었다. 그래도 나는 언젠가 꼭 이사람이 한 걸 따라할 것이다

1개의 답글
comment-user-thumbnail
2025년 1월 11일

안그래도 무한 스크롤 구현하니까 밑으로 많ㅇ 스크롤 했을 때 나오는 친구들은 고대로 영어로 나와서 불-편하더라구요..
이런 게 있었군여,,

1개의 답글