SwiftUI 가계부 앱 개발기 7편 – 다국어(Localization) 지원: 한국어/영어 국제화 처리

이번 글에서는 iOS 앱에서 다국어(Localization) 지원을 구현하는 방법을 설명합니다.
SwiftUI 기반의 가계부 앱을 한국어/영어 사용자 모두 사용할 수 있도록 설계하여 글로벌 접근성을 높입니다.


1. 다국어 지원의 필요성

  • iOS는 Locale 기반으로 앱 언어를 자동 설정
  • 글로벌 사용자 확보를 위해 반드시 고려해야 할 기능
  • App Store 심사 통과에도 긍정적 영향

2. Localizable.strings 파일 생성

Xcode에서 다국어를 적용하려면 다음 순서를 따릅니다:

  1. Localizable.strings 파일 생성
  2. File Inspector에서 해당 파일의 Localization 항목에서 “Korean”과 “English” 추가
  3. 각 언어별 .strings 파일에 대응되는 번역 추가

예시:

Localizable.strings (Korean):

settings_tab = "설정";
income = "수입";
expense = "지출";
all = "전체";


Localizable.strings (English):

settings_tab = "Settings";
income = "Income";
expense = "Expense";
all = "All";

3. NSLocalizedString 사용 예

문자열을 직접 입력하지 않고 NSLocalizedString을 사용하여 다국어 처리를 합니다:

Text(NSLocalizedString("income", comment: "수입"))
.font(.system(size: 15, weight: .regular))

이렇게 하면 시스템 언어에 따라 자동으로 수입/Income 으로 변경됩니다.


4. Picker, Alert, Label 등 다국어 적용

다국어는 화면 내 텍스트뿐만 아니라 다음 UI 요소에도 동일하게 적용됩니다:

  • Picker의 tag 값과 label
  • Alert 버튼 및 메시지
  • NavigationBar 타이틀
  • SegmentedPicker 항목

예시:

Picker("Type", selection: $selectedType) {
   Text(NSLocalizedString("all", comment: "전체")).tag(NSLocalizedString("all", comment: "전체"))
   Text(NSLocalizedString("income", comment: "수입")).tag(NSLocalizedString("income", comment: "수입"))
   Text(NSLocalizedString("expense", comment: "지출")).tag(NSLocalizedString("expense", comment: "지출"))
}

5. 저장된 데이터와 다국어 분리

중요: 데이터베이스에 저장되는 값(ex: 카테고리 이름)은 번역된 문자열이 아닌 “원래 언어”로 저장되어야 합니다.

앱 내부 UI에서만 NSLocalizedString을 활용해야 혼란이 없습니다.

잘못된 예:

// ❌ 저장할 때 번역된 문자열 사용
category.type = NSLocalizedString("income", comment: "")


올바른 예:

// ✅ 저장은 고정된 내부 코드 사용
category.type = "income" // 저장
Text(NSLocalizedString("income", comment: "")) // UI 출력

6. 언어 전환 테스트 방법

  1. iOS 시뮬레이터 또는 기기 설정에서 언어 변경
  2. 앱 강제 종료 후 재실행
  3. UI가 정상적으로 변환되는지 확인

8. 마무리

이번 편에서는 SwiftUI 앱에서의 다국어(Localization) 적용 방법을 자세히 다루었습니다.

SwiftUI 가계부 앱 개발기 8편 – iOS 앱 배포를 위한 설정: App Store 심사 준비에서는 iOS 앱 배포 준비 및 App Store 심사 통과를 위한 설정을 안내합니다.

시리즈 목록