예, 간만입니다.
일단 해야 하는 게 뭐였냐면...
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)")
*/
요런 식으로 현지화를 하라고 코드를 제공해주셨더라고요?
- 저렇게 코드 고봉밥이 있는 것
- 추후 범위를 넓히면 또 수동으로 추가해줘야 한다는 점
- 사용하지 않을 수도 있는 정보들이 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에서 영어이름이 수정되어 현지화된 이름이 나오지 않는 문제를 소 뒷걸음질치다 쥐 잡은 격으로 겪지 않게 되었네요...? 완전 럭키비키잖아💛✨
헐!!!!!!!!!!! 저 방금 과제에서 준 enum에 현지화 데이터 더 추가하고 왔는데요!!!
하민님 게시글 참고해서 리팩토링 해보아야겠습니다!!!!!!!!