Localization은 앱을 다양한 언어와 문화권에서 사용할 수 있도록 번역하고, 지역별 형식(날짜, 숫자)을 조정하는 과정이라고 할 수 있습니다. 이를 통해 사용자는 자신의 언어와 문화에 맞는 인터페이스를 경험할 수 있습니다.
“Localizable.strings”파일로 텍스트를 관리하고 “stringsdict” 파일로 복수형 처리 등 다양한 언어 규칙을 적용합니다. 또한 Xcode 15부터는 String Catalog라는 파일에서 모든 것을 관리할 수 있습니다.
Strings File을 활용한 다국어 처리
1) Strings 파일 추가
현재 Xcode15 이상인 버전에서 String Catalog를 활용한 새로운 기술이 나타났지만 기존에 활용했던 Strings File을 활용한 다국어처리를 먼저 공부해 볼 예정입니다.
2) 언어 추가
Project -> Info 를 확인하면 Localizations 부분에 + 버튼을 눌러 원하는 언어를 추가할 수 있습니다.
3) Strings 파일에 key value 정의
"ContentView.title" = "USA";
다음과 같이 쉽게 다국어 처리를 할 수 있습니다.
만약 다른 나라 언어를 테스트 해보고 싶다면
Edit Scheme -> Run -> Options에서 언어를 바꿀 수 있습니다.
SwiftUI에서 다국어 처리
SwiftUI에서 일반적으로 사용하는 Text()를 보면 String 값이 아닌 LocalizedStringKey입니다.
Text의 구현 부분을 보면 다음과 같습니다.
key
역할: 로컬라이즈된 문자열의 키를 나타냅니다. 로컬라이즈된 문자열은 “Localizable.strings”파일에 정의되어 있으며, 이 파일에서 해당 키에 매핑된 로컬라이즈된 텍스트를 가져옵니다.
사용 예시: Text(“Hello, world!”)를 사용하면 “Hello, world!”라는 키에 해당하는 로컬라이즈된 문자열을 표시합니다.
tableName
역할: 특정 로컬라이제이션 테이블의 이름을 지정할 수 있습니다. 기본값은 “nil”이고, 이 경우 기본 로컬라이제이션 테이블(“Localizable.strings”)에서 문자열을 찾습니다.
bundle
역할: 로컬라이제이션 파일이 포함된 번들을 지정합니다. 기본값은 ‘nil”이고 이 경우 기본 번들(main bundle)에서 로컬라이제이션을 찾게 됩니다.
사용 예시: 만약 로컬라이제이션 파일이 다른 번들에 있다면, 해당 번들을 명시적으로 지정할 수 있습니다.
comment
역할: 해당 key가 어떤 상황에서 어떤 의미인지 이해하는데 도움을 주기 위한 코멘트(주석)의 역할입니다.
UIKit에서 다국어 처리
UIKit에서 Label의 text는 String? 값입니다. 때문에 UIKit에서 다국어 처리를 위해서는 다음과 같은 메서드를 추가로 사용해야 합니다.
해당 메서드는 반환 타입이 String이기 때문에 SwiftUI에서와 마찬가지로 입력 값을 key 값과 string 값으로 활용할 수 있습니다.