[Xcode] 나는 Global App을 만들 테야 - Localization 2편

2025. 2. 1. 03:02·📱 iOS/Xcode

개요

지난 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
'📱 iOS/Xcode' 카테고리의 다른 글
  • [Xcode] 나는 Global App을 만들 테야 - Localization 1편
  • [Xcode] 우리의 최종 모듈화 - Multiple Project로 모듈화 공부하기 3편
  • [Xcode] Dynamic Library vs Static Library - Multiple Project로 모듈화 공부하기 2편
  • [Xcode] Library vs Framework - Multiple Project로 모듈화 공부하기 1편
kyxxn
kyxxn
컴퓨터공학을 좋아하는 대학생의 공부 일기
  • kyxxn
    컴공 학부생의 공부 일기
    kyxxn
  • 전체
    오늘
    어제
    • 분류 전체보기 (156)
      • 📱 iOS (64)
        • Xcode (10)
        • Swift (17)
        • Swift Concurrency (12)
        • UIKit (21)
        • SwiftUI (0)
      • 🖥️ Computer Science (57)
        • 🏛️ Software Architecture Pa.. (2)
        • 👨🏻‍🎨 Design Pattern (3)
        • Data Structure (4)
        • Algorithm (10)
        • Computer Architecture (4)
        • Operating System (19)
        • Network (15)
      • ✍🏻 회고록 (9)
      • 🎸 기타 (25)
        • 해커톤 (1)
        • git (6)
        • 세미나 (1)
        • 책을 읽고 (1)
        • AOS, Kotlin (6)
        • Reinforcement Learning (9)
  • 블로그 메뉴

    • 링크

      • 깃허브
      • 일상 블로그
    • 공지사항

    • 인기 글

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    kyxxn
    [Xcode] 나는 Global App을 만들 테야 - Localization 2편
    상단으로

    티스토리툴바