Localization is the process of adapting your app for different languages, regions, and cultures.”
Apple Developer Documentation – App Localization
번역하면 -> 현지화는 다양한 언어, 지역, 문화에 맞춰 앱을 조정하는 과정 이라고 한다.
그냥 어렵게 말 할 필요 없이 다른 언어권에도 쉽게 등록할 수 있게 도와주는 것입니다!
Hi로 나오지만, 한국사람들에게는 안녕이 나오게하는 거라서 필요성을 아마 다들 알고 계실 것같아요.
일단은 영어 베이스에 한국어랑 중국어(간체) 정도 추가하려한다 !
이제 칼럼으로 나타난 것을 볼 수가 있는 것이다.


그럼 이
Localizable.xcstrings끝에 State는 뭔가요?

이건 내가 한다기보다 이렇게 Xcode측에서 알려준다고 보시면된다!
Translated
Needs Review
Untranslated / Missing
Auto-translated
Error / Conflict
잘 기입이 되었는지 확인할 수 있는 섹션 정도라고 생각하면 될 듯 !
String에 아래와 같은 Extension을 추가해두면,
extension String {
var localized: String {
NSLocalizedString(self, comment: "")
}
}
직접 문자열을 넣는 대신 "quit".localized 형태로 손쉽게 로컬라이징된 문자열을 사용할 수 있다.
근데 여기서 의문이든게, 문자열 키를 이렇게"quit".localized처럼 직접 작성해버리면 오타나 관리 측면에서 안정성이 떨어질 수 있을 것 같아서, 이를 enum으로 만들어주려고 한다. 그래서 문자열 키들을 enum으로 묶어 타입 안정성을 조금 더 높이는 방향으로 정리했다.
enum LocalText {
enum Settings {
static let quit = "quit".localized
static let appInfo = "appInfo".localized
}
enum Common {
static let confirm = "confirm".localized
static let cancel = "cancel".localized
}
}
이렇게 분리해두면 "quit".localized 같은 문자열 기반 접근을 피하면서, 자동 완성을 누릴 수 있다..!
Text(LocalText.Settings.quit)
그리고 이렇게하면 Feature 별로 나누거나, 혹은 View별로 나눌 수가 있게 되는 것이다.
localization Key 자체를 반환하게끔 해주면 되는것이다.예시를 들어보자! 그냥 간단하게 MenuItem을 ForEach로 출력해보자!
struct ContentView: View {
var body: some View {
VStack {
ForEach(items) { item in
Text(item.titleKey.localized)
}
}
}
}
struct MenuItem: Identifiable {
let id = UUID()
let titleKey: String
}
let items = [
MenuItem(titleKey: "confirm"),
MenuItem(titleKey: "cancel"),
]
잘 출력된것을 확인할 수 있다 !
참고 자료