Localization
- 하드웨어, 소프트웨어 등의 제품을 언어, 문화권이 다른 환경에서 사용할 수 있도록 지원하는 서비스
- 이를 지원할 경우 일반적으로 사용자가 선택한 기기의 기본 언어 따라 국제화가 이러우짐
- 추가 기능 구현을 통해, 사용자가 선택한 기기의 기본 언어와 상관 없이 앱에서 사용할 언어를 선택 할 수 있음
- iOS 13 이상부터 사용자가 기기의 기본 언어와 관계 없이 앱에서 선호하는 언어 선택이 가능해 다국어 사용자가 앱에서 쉽게 언어 간 전환이 가능함
- iOS12 전엔 시스템 전체 언어를 변경하는 것만 가능
- 시간대, 숫자, 화폐 단위의 표현 차이, 선호 레이아웃, 선호 프로모션 등에서 차이가 발생 가능
- 단지 언어 뿐만 아니라 문화/환경적 측면도 고려할 필요가 있음
Apple의 국제화 시스템
- Apple API를 활용해 날짜, 길이, 무게, 가격 및 통화 기호와 같이 사용자에게 표시되거나 동적으로 생성되는 값을 모든 지역에 올바르게 표현할 수 있게 구현
- 앱에서 사용되는 언어
- Localization.strings를 작성해 각 나라와 지역에 맞는 고정 텍스트를 제공할 수 있음
- InfoPlist.strings를 작성해 각 나라와 지역에 맞는 권한 문구 출력
- plural.stringsdict를 작성해 각 나라와 지역에 맞는 표현 단위 등을 출력 가능
- 앱스토어의 메타 데이터
- 앱의 현지화와 상관없이 앱스토어 제품 페이지의 메타데이터 내용을 현지화시킬 수 있음
- 단 앱의 기본 언어 설정의 경우 프로젝트에서 메세지 설정 파일 대응이 된 국가중에 선택이 가능함
- 앱의 기본 언어 설정
- 앱 설치 후 최초 앱 실행시 기본적으로 설정 될 언어값
- 예를 들어 한국어와 영어를 대응한 경우 앱의 기본 언어를 영어 또는 한국어로만 설정 가능
국제화
- 앱이 특정 국가나 지역에 종속되지 않도록 호환성을 통해 앱을 설계하는 과정
- 언어 번역뿐만 아니라 국가별 쓰기 방향의 차이(LTR, RTL), 숫자, 화폐, 날짜 등의 표기 방법, 시간대를 고려해 앱을 설계하는 과정
- 예를 들어 사용자가 여행을 하면 국가에 따라 표준 시간대, 날짜가 달라짐 -> 이런 변화를 감지하고 타임 스탬프를 처리할 수 있는 것
- 이런 설계와 코드를 통해 앱이 localized(현지화) 될 수 있음
- l18N
- Internationalization의 첫글자와 마지막 글자, i 와 n 사이에 알파벳이 18개가 있다는 의미
현지화
- L10N
- Localization의 첫글자와 마지막 글자. l과 n 사이에 알파뱃이 10개가 있다는 뜻
- 그 국가와 지역에 맞게 앱을 번역하고 리소스 작업을 하는 등 적합하게 구현하는 과정
- 예를 들어 날짜와 시간을 표현할 때 그 나라(한국, 대만, 미국, 유럽 등)에 맞는 형식으로 표현하는 것
Localization.strings
- Project -> Localizations -> +를 통해 지원할 언어를 선택할 수 있음
- code로 추가 설정
- Localizable.strings파일 생성
- default로 이름이 Localizable임
- 생성한 Localizable.strings의 인스펙터 영역에서 Localize 버튼을 통해 기본 다국어를 생성 할 수 있음
- 이런 식의 양식을 통해 생성
- 세미클론을 잊지말고 작성해야함
- 매번 이름을 작성하는건 너무 레어한 코드이므로 extension을 통해 개선 가능함
extension String {
var localized: String {
return NSLocalizedString(self, comment: "")
}
func localized(with: String) -> String {
return String(format: self.localized, with)
}
func localized(number: Int) -> String {
return String(format: self.localized, number)
}
}
- 앱 이름 or 하드웨어 or 개인정보 보호 권한 문구의 경우 Localizable.strings 파일로 지원이 불가능함
- Apple API에 의해 정의된 Key를 통해 구현
- Info -> Open as Source Code를 통해 확인이 가능함
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDisplayName</key>
<string>앱 아이콘 이름</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>권한에 대한 설명</string>
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
<key>UISceneStoryboardFile</key>
<string>Main</string>
</dict>
</array>
</dict>
</dict>
</dict>
</plist>
- source code를 열면 위와 같이 작성된 걸 볼 수 있음
DebugLocalizable
- Scheme 설정
- Xcode > Product > Scheme > Edit Scheme
'IS' 카테고리의 다른 글
iOS Swift 카카오 소셜 로그인(Kakao Social Login) (0) | 2023.02.13 |
---|---|
iOS Swift - Service Level Project(SLP) 회고 (0) | 2023.02.13 |
RxSwift(Observable, Observe, Subject, Relay etc) (0) | 2022.10.29 |
iOS Collection View APIs (1) | 2022.10.18 |
iOS Remote notification(원격 푸쉬 알림) (1) | 2022.10.18 |