-
Swift 다국어 String Catalog 적용하기🧑💻/Swift 2025. 3. 30. 20:23반응형
iOS의 i18n 다국어 처리 방법을 알아봅시다.
Xcode 15 이상부터 적용 가능합니다.
1. 현지화 언어 추가
먼저 현지화할 언어를 추가합니다.
왼쪽 프로젝트 클릭 > 프로젝트 클릭 > Localizations + 버튼 클릭 > 현지화할 언어 추가
저는 한국어를 추가했습니다.
스토리보드 현지화할 거냐고 물어보는데 체크하고 Finish
2. String Catalog 추가
폴더 클릭 > 우클릭 > New File from Template > String Catalog를 클릭합니다.
파일명은 꼭 자동으로 입력된 Localizable 를 사용해야 인식됩니다.
파일이 생성되면 이렇게 비어있죠. 여기서 수동으로 추가하지 않습니다.
3. 다국어 코드 작성
다국어 코드 작성 > 빌드 > Localizable 자동 반영됩니다.
SwiftUI
Text()를 사용하기만 해도 다국어 처리됩니다.
다국어 처리하지 않을 경우에만 Text(verbatim:) 을 사용합니다. verbatim은 "말하는 바 그대로" 라는 뜻이라네요.
Text() 안에 변수를 추가하면 자동으로 "Hello %@"로 다국어가 추가됩니다.
import SwiftUI struct SwiftUIView: View { let name = "yurimac" var body: some View { // 다국어 적용 Text("Hello") // 변수 추가 Text("Hello \(name)") // 다국어 적용 X Text(verbatim: "Hello") } } #Preview { SwiftUIView() }
만약 Title을 enum case에 따라 설정하고 있다면 enum을 LocalizedStringKey로 감싸서 Text에 설정할 수 있습니다.
import SwiftUI struct SwiftUIView: View { enum Title: LocalizedStringKey { case signIn = "Sign In" case signOut = "Sign Out" } let title: Title = .signIn var body: some View { Text(title.rawValue) } } #Preview { SwiftUIView() }
UIKit
텍스트를 String(localized: "Hello")로 감쌉니다.
구글링하다보면 extension으로 "Hello".localized() 처럼 호출하는 방법도 있던데, 코드가 깔끔해져서 좋긴 합니다.
하지만 변수 추가할 때 유연하지가 않아서 String(localized:)를 사용하는게 편하더라구요.
String(localized:)를 String(format:)에 넣어서 변수도 처리할 수 있습니다.
import UIKit class ViewController: UIViewController { let helloLabel = UILabel() override func viewDidLoad() { super.viewDidLoad() view.addSubview(helloLabel) helloLabel.translatesAutoresizingMaskIntoConstraints = false helloLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true helloLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true // 다국어 적용 helloLabel.text = String(localized: "Hello") // 변수 추가 let name = "yurimac" helloLabel.text = String(format: String(localized: "Hello %@"), name) // 다국어 적용 X helloLabel.text = "Hello" } }
Info.plist 다국어
NSCameraUsageDescription, NSPhotoLibraryUsageDescription 등
Info.plist 내용들을 다국어 처리하려면
Localizable과 동일하게 String Catalog 파일을 생성하되 파일명을 InfoPlist로 설정합니다.
빌드하면 자동으로 InfoPlist가 채워집니다.
간혹 바로 채워지지 않는 경우도 있는데 Xcode 껐다가 켜서 빌드하면 됩니다.
4. 빌드 및 Localizable 관리
빌드를 완료하면 자동으로 Localizable.xcstrings 파일에 추가됩니다. NEW 상태와 함께 !
변수는 크게 String, Numeric 두 가지로 처리합니다.
- String 변수 : %@
- Numeric 변수 : %lld
변수가 여러 개 붙으면 1$, 2$, 3$, ... 가 자동으로 붙습니다.
다국어 적용되던 String을 더 이상 사용하지 않으면 자동으로 Stale 태그가 붙습니다.
마이너스 버튼 클릭하여 제거해주면 됩니다.
5. 테스트
다국어 적용 여부를 확인하기 위해 테스트가 필요하죠. 앱 언어를 변경하여 확인할 수 있습니다.
아이폰 설정 앱 > 일반 > 언어 및 지역 > 선호하는 언어 변경 > 앱 재접속 > 앱 재시작됨 > 다국어 적용 확인
참고
https://www.youtube.com/watch?v=7xxUopPqjyI
반응형