이번 글에서는 로컬라이징에 대해서 알아보겠습니다.
로컬라이징이란 간단히 설명해드리자면 현지화, 즉 다국적 버전으로 제작하여 여러 나라에서 대응이 가능한 것을 나타냅니다.
개인적으론 App도 많이 국제화가 되어있기 때문에 외국인들도 사용하기 편하게 하기 위해서는 필수적인 요소라고 생각합니다.
(저 같은 경우는 지금까지 참여한 App 전부가 이 로컬라이징을 진행하였습니다.)
그렇다면 이번 글을 통해서 어떤 식으로 하면 되는지 간단히 알아보고자 합니다.
1. Localizable.strings 파일 생성
우선 프로젝트 생성 후 Strings 파일로 Localizable.strings 파일을 추가해 줍니다.
2. 언어 추가
이제 언어를 추가해보는 작업을 진행해 보겠습니다. 우선 추가한 Localizable.strings 파일의 우측에 보시면 아래와 같은 버튼이 있습니다.
여기서 Localize... 를 클릭하시면 기본 베이스로 영어가 추가됩니다.
다음으로 이제 [Project] -> [Localizations] 탭으로 이동하셔서 대응할 언어들을 추가해 줍니다.
(저 같은 경우는 간단히 한국어랑 일본어를 추가하였습니다.)
추가 시, 적용 파일에 대하여 나오는데 별 다른 사항 없으면 Finish를 눌러주시면 됩니다.
추가가 완료되었다면 1번 과정에서 생성한 Localizable.strings 파일에 추가한 언어들의 strings 파일이 생성된 것을 확인하실 수 있습니다.
3. 사용해보기
이제 그렇다면 어떤 식으로 사용하면 될지 한 번 알아보겠습니다.
영어, 한국어, 일본어 아무 파일이나 눌러보시면 그저 빈 파일임을 아실 수 있습니다.
로컬라이징은 키값을 지정해서 사용하는데 형식이 "키" = "데이터"; 가 됩니다.
다음으로 프로젝트에서 사용해보겠습니다.
간단히 라벨 하나 추가해 주시고 출력해보겠습니다.
class ViewController: UIViewController {
@IBOutlet weak var localizingText: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
self.localizingText.text = NSLocalizedString("str_hello_world_message", comment: "")
}
}
4. 출력
스마트폰의 언어 설정을 해당 국가에 설정하시면 출력이 잘 되는 것을 확인하실 수 있습니다.
5. 활용법
로컬라이징 메시지에 임의의 데이터를 입력하여 출력하고 싶을 경우 아래와 같이 작성해 주시면 됩니다.
"str_data_text" = "%@ 는 좋다!";
%@로 임의의 데이터를 출력할 수 있게 설정한 후 아래와 같이 format을 사용하시면 출력할 수 있습니다.
let localized = NSLocalizedString("str_data_text", comment: "")
self.localizingText = String(format: localized, arguments: "스위프트")
그리고,
String의 확장 기능을 사용해서 구현하신다면 더욱 편하게 사용하실 수 있습니다.
extension String {
static func localized(key: String, keyword: String) -> String {
if keyword.isEmpty {
return NSLocalizedString(key, comment: "")
}
let localized = NSLocalizedString(key, comment: "")
return String(format: localized, keyword)
}
}
6. 마무리 인사말
이번 글에서는 로컬라이징에 대하여 알아보았습니다.
꼭 다국적 대응뿐만이 아니라 그냥 App의 문자열 관리에도 편하고 좋은 기능인 것 같습니다.
(후에 추가적으로 다국적 대응이 시작되어도 금방 작성할 수도 있고...)
부족한 점이나 지적사항은 댓글에 부탁드립니다.
많은 도움이 되었으면 좋겠습니다.
#참조
https://developer.apple.com/documentation/xcode/localizing_your_app
환경
Xcode 11.3.1
Swift 5
'Swift > 정보 공유' 카테고리의 다른 글
[Swift] 연산 시간 측정 (0) | 2021.12.27 |
---|---|
[Swift] discardableResult 에 대해 알아보자! (0) | 2021.12.08 |
[Swift] iOS App의 LifeCycle에 대하여 알아보자! (0) | 2020.06.22 |
[Swift] iOS ViewController의 LifeCycle에 대하여 알아보자! (0) | 2020.06.22 |
[Swift] UIActivityController에 대하여 알아보자! (0) | 2020.06.08 |