localization은 지역화
internalization은 세계화
라는 뜻으로, 각각 L10N과 I18N으로 표기하기도 한다
지역화
전에 세계화
가 먼저 되어 있어야 하는데, 세계화가 되었다는건 여러 국가에서 사용할 수 있도록 배포된 앱이어야 한다는 뜻인 것 같다
한국에서만 사용할 수 있는 앱(세계화 되지 않은 앱)이 지역화를 한다는건 무쓸모..
: 여러 언어와 지역 등을 지원하여 앱의 시장을 확장한다
Localization 공식문서의 문단을 보면 Xcode에서 localization을 적용하는 방법이 나와있다
1️⃣ 프로젝트에 localization을 추가하고
2️⃣ 해당 언어와 지역에 포함할 리소스를 선택한다
3️⃣ localization을 export하고 파일을 localizer에게 보낸다
4️⃣ localizer는 user-facing text를 번역하고, 특정 문화 및 지역에 대한 리소스를 조정한다
5️⃣ localized된 파일을 import하고, 해당 언어와 지역에서 xcode로 직접 앱을 테스트한다
이렇게 나와있는데, 프로젝트에 적용해서 버튼을 누르면 영어가 한국말로 바뀌도록 해볼거다 🤓
프로젝트에서 strings file을 추가하면 해당 파일의 inspector의 Localization 영역에 Localize...라는 걸 클릭해주고
Project > Info > Localizations 영역에서 원하는 언어를 추가해주면
왼쪽 Localization 파일에 English와 Korean 파일이 잘 추가되어 있다
그 파일들에서
"원래 문자열" = "바꿀 문자열";
이렇게 설정해서 버튼을 눌렀을 때 영어 -> 한국어로 바뀌게 할거다
현재 화면을 실행하면
이렇게 뜨는데, Welcome 문구와 시간, 화폐단위를 다 한국말로 바꿔볼거다
- Welcome to yagom-academy ➡️ 야곰아카데미에 오신걸 환영합니다!
- 2025 . 03. 03. ➡️ 2025년 3월 3일
- $3,000.34 ➡️ 환율 적용한 ₩단위
영어는 그대로니까 생략하고,, Localizable (Korean) 파일에 가서 아래와 같이 코드를 작성한다 (세미콜론 꼭 써야함!)
"Welcome to yagom-academy!" = "야곰아카데미에 오신걸 환영합니다!";
"2025. 3. 3." = "2025년 3월 3일";
"$ 3,000.34" = "3,873,438.94원";
이렇게 쓰고 해당 텍스트들이 쓰이는 곳에 가서 바꿔주면 된다
// 1️⃣ bundle의 localizedString 메서드 사용 (localized된 string 리턴)
welcomeLabel.text = bundle?.localizedString(forKey: "Welcome to yagom-academy!", value: nil, table: nil)
dateTimeLabel.text = bundle?.localizedString(forKey: "2025. 3. 3.", value: nil, table: nil)
currencyLabel.text = bundle?.localizedString(forKey: "$ 3,000.34", value: nil, table: nil)
// 2️⃣ NSLocalizedString 메서드 사용 (이것도 localized된 string 리턴)
welcomeLabel.text = NSLocalizedString("Welcome to yagom-academy!", comment: "")
dateTimeLabel.text = NSLocalizedString("2025. 3. 3.", comment: "")
currencyLabel.text = NSLocalizedString("$ 3,000.34", comment: "")
둘 중에 고르자면 1️⃣번 방법은 path와 bundle도 따로 설정해줘야해서 좀 번거롭고, 2️⃣번이 더 간단한듯 하다
그런데 Zedd님 블로그를 보니 String을 extension하는 방법이 있는 것 같아서 써보면
extension String {
var localized: String {
return NSLocalizedString(self, tableName: "Localizable", value: self, comment: "")
}
}
welcomeLabel.text = "Welcome to yagom-academy!".localized
dateTimeLabel.text = "2025. 3. 3.".localized
currencyLabel.text = "$ 3,000.34".localized
이게 더 깔끔해보인다
👏
참고자료