개요
지난 1편에서 Localization에 대해 알아봤었다.
여기서 배운 개념을 네부캠 프로젝트 '기록소'에 적용해보았고,
그 과정에서 어떻게 작업했는지 특이사항은 뭐가 있었는 지를 기록해보겠다.
작업 진행
먼저 En 영어를 등록해주었다.
우리 프로젝트는 클린 아키텍처에 따라 레이어를 모듈로 분리했는데, 이에 따라서 localizable.xcstrings 파일을 어디에 둘 지 결정해야 했다. 직접 만지며 익힌 결과 Executable 실행 파일인 MHApplication 모듈에서 생성을 해야만 적용이 되는 것을 확인했고, 하나만 만들어서 관리하면 다른 모듈에 있는 Text도 모두 적용되는 것을 알 수 있었다.

그래서 위와 같이 MHApplication - Localizable을 만들었다.
참고로 우리 프로젝트는 iOS 16 이상, Xcode 버전이 16이기 때문에 Localizable.xcstrings를 도입해서 진행했다.

Executable 파일인 MHApplication은 기본 언어가 Korean이 아닌, English였다.
그래서 위 사진과 같이 Korean을 추가하고 Default로 지정했다.
TMI 이지만, 위 문제 때문에 앱스토어에서 우리 앱이 ko가 아니라 en으로 떴던 것 같다.

Label이든 Button이든 Text를 사용하는 곳을 모두 문자열에 대해 Key를 추가하고 번역기와 GPT를 통해서 적절한 영어를 Value에 맵핑해주었다.
SwiftUI로 된 프로젝트라면 Key를 직접 입력하지 않아도 됐을 터인데, 우리 프로젝트는 UIKit 기반이기 때문에 Key를 하나하나 다 입력해주었다.
진행하며 고민했던 점
UIKit에서 문자열을 사용하는 방법
public func NSLocalizedString(_ key: String, tableName: String? = nil,
bundle: Bundle = Bundle.main,
value: String = "",
comment: String) -> String
UIKit에서는 LocalizedString을 사용해서 Text 설정해주면 위에서 내가 설정한 Key가 Value로 변환되어 보이게 된다.
알고보면 얘는 메소드였고, 반환타입이 String이라 text에 들어갈 수 있었다.
그래서 아래처럼 Extension으로 설정해주고 편하게 사용했다.
extension String {
public func localized() -> String {
NSLocalizedString(self, comment: "")
}
}
매개변수 대응

Navigation Bar에 첫 등록화면에서 유저에게 입력받은 닉네임이 보여야 한다.
예를 들어 "효준"을 입력했으면 "효준 기록소"라고 떠야하는 것이다.
그러면 매개변수를 받아야 하는데 이를 어떻게 맵핑할지 몰라서 한참 헤맸었다.

찾아본 결과 문자열의 경우 %@를 이용해서 매개변수를 넣어줄 수 있었고, 여기에는 localizedKey를 이용해서 내가 등록한 key를 value로 변경할 수 있었다.
public static func localizedStringWithFormat(_ format: String, _ arguments: any CVarArg...) -> String
위 메소드로 C언어처럼 매개변수를 , 뒤에 넣어주면서 %@에 대한 매개변수 제공을 해줄 수 있었다.
내가 파라미터 title에 "효준"을 넣으면 그게 '%@ 기록소'에 들어가는 것이다.
결과






좌측은 언어를 한국어로, 우측은 언어를 영어로 설정한 시뮬레이터이다.
휴 ~ 고생쓰
'📱 iOS > Xcode' 카테고리의 다른 글
[Xcode] 나는 Global App을 만들 테야 - Localization 1편 (0) | 2025.01.23 |
---|---|
[Xcode] 우리의 최종 모듈화 - Multiple Project로 모듈화 공부하기 3편 (0) | 2025.01.19 |
[Xcode] Dynamic Library vs Static Library - Multiple Project로 모듈화 공부하기 2편 (0) | 2025.01.17 |
[Xcode] Library vs Framework - Multiple Project로 모듈화 공부하기 1편 (2) | 2025.01.15 |
[XCTest] 유닛 테스트(Unit Test) 사용후기 (2) | 2024.07.24 |