Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Protocol
- swiftUI
- HIG
- SWIFT
- collectionview
- combine
- uitableview
- ribs
- tableView
- Refactoring
- uiscrollview
- 리펙터링
- 스위프트
- Observable
- 리팩토링
- UICollectionView
- MVVM
- 클린 코드
- 애니메이션
- 리펙토링
- clean architecture
- rxswift
- RxCocoa
- map
- swift documentation
- ios
- Human interface guide
- UITextView
- Clean Code
- Xcode
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] Localization, Localizable, 지역화 테스트 방법 (Programmtically, Storyboard, xib) 본문
iOS 응용 (swift)
[iOS - swift] Localization, Localizable, 지역화 테스트 방법 (Programmtically, Storyboard, xib)
jake-kim 2021. 1. 11. 22:00현재 지역 확인 - Locale
- 아래와 같이 작성하여 regionCode를 획득
Locale.current // en_KR (current)
Locale.current.regionCode // Optional("KR")
- code 리스트
Locale.isoRegionCodes
로컬 = ["AC", "AD", ... 중략 ..., "ZM", "ZW"]
- 앱 점유율 상 높은 Japnan ~ China까지 코드를 알아보면,
public enum CountryType: String {
case korea = "KO"
case japan = "JP"
case USA = "USA"
case UnitedKingdom = "GB"
case Germany = "DE"
case Chnia = "CN"
}
// 문자열 -> enum타입으로 매핑 방법
let countryType = CountryType.init(rawValue: country)
테스트를 위해 현재 지역을 다른 나라로 설정 방법
- 아래 클릭
- Edit Scheme
- Run -> Options -> App Region 선택
- App Region 변경 후 확인
코드로 문자열을 입력하는 경우 Localization 설정 방법
* 원리: key-value 쌍으로 미리 문자열에 대해서 각 나라별로 지정 -> 문자열을 입력할 때 NSLocalizedString객체 값으로 입력
- key - value 쌍으로 만들기: Strings File 추가
- 이름은 "Localizable.strings"로 설정
- "Localize ..."버튼 클릭
- Target -> Localizations에서 "+"버튼 클릭 -> 지역화를 하고싶은 나라 추가
- Localizable파일 확인: Korean파일을 만들어 놓고 공백으로 둘 것 - English에 key-value작성해 두고 Korean파일을 만들어 놓지 않으면 영어로 작성되는점 유의
base가 영어이므로 아래처럼 english에 해당하는 부분은 따로 추가하지 않아도 가능
- 각각 파일에 해당하는 언어의 key - value형식으로 작성 (작성 후 세미콜론을 끝내 적는 것 잊지 말것)
- 문자열을 입력하는 곳에서 String객체가 아닌 NSLocalizedString 객체를 사용하면 지역화 완료
// alertLabel.text = "\(title) 접근 권한이 필요합니다" // 일반적인 String
alertLabel.text = NSLocalizedString("\(title) 접근 권한이 필요합니다", comment: "") // 지역화 객체
- String의 extension을 이용하여 NSLocalizedString객체 쉽게 사용하는 방법
public extension String {
func localized(bundle: Bundle = .main, tableName: String = "Localizable") -> String {
return NSLocalizedString(self, tableName: tableName, value: "\(self)", comment: "")
}
}
// 사용
alertLabel.text = "\(title) 접근 권한이 필요합니다".localized()
Storyboard, xib 파일에서의 Localization
- 지역화를 하고싶은 파일 .storyboard 클릭 -> Localize 클릭
- 코드로 localization하는 부분에서 추가한 지역들의 리스트 노출 확인 -> Localization 하고싶은 지역 클릭
- Localization 옵션에 체크박스로 표시되는데 원하는 지역 모두 선택
- .storyboard파일 하위에 생겨난 것을 확인
- 한국 Localization적용: storyboard는 객체의 키 = "값"으로 자동으로 설정되어 있으며, "값"부분에 채워넣으면 완료
- 파일이 .strings가 아닌 ".storyboard"로 나오는 경우 -> 지역마다 storyboard를 커스텀할 수 있음
시스템팝업을 띄우는 info.plist관련 지역화 방법
- infoPlist.strings 파일을 만든 후 아래 Localize 클릭
- 시스템 팝업에 필요한 "NS-"로 시작하는 접근권한 입력
- 영어버전
/*
InfoPlist.strings
MemoryCam
Created by 김종권 on 2021/01/12.
*/
"NSAppleMusicUsageDescription" = "Uses for music";
"NSCameraUsageDescription" = "Uses the camera for taking profile picture and image detection";
"NSLocationAlwaysAndWhenInUseUsageDescription" = "Uses location for getting user current address";
"NSLocationAlwaysUsageDescription" = "Uses location for getting user current address";
"NSLocationUsageDescription" = "Uses location for getting user current address";
"NSLocationWhenInUseUsageDescription" = "Uses location for getting user current address";
"NSPhotoLibraryUsageDescription" = "Uses photo for taking profile picture and image detection";
- 한글
/*
InfoPlist.strings
MemoryCam
Created by 김종권 on 2021/01/12.
*/
"NSAppleMusicUsageDescription" = "음악 접근 권한이 필요합니다";
"NSCameraUsageDescription" = "카메라 접근 권한이 필요합니다";
... 생략 ...
다른 나라 언어로 한번에 번역하는 팁
- 구글 드라이브 접속 -> Google 스프레드시트 생성
- 국가코드를 아래와 같이 작성 (애플에서 쓰는 국가코드 참고 사이트)
GOOGLETRANSLATE("번역할 문장", "ko", 첫 번째 셀 클릭하여 선택)
- 파란색 오른쪽 하단 네모를 아래까지 드래그
- 응용
- 복사 후 오른쪽마우스 클릭 -> 값만 붙여넣기 (cmd + shift + V)
* 애플 국가코드: www.ibabbleon.com/iOS-Language-Codes-ISO-639.html
* 코드로 Localization 하는 방법 내용 출처: developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/LocalizingYourApp/LocalizingYourApp.html
'iOS 응용 (swift)' 카테고리의 다른 글
[iOS - swift] throttle tap 커스텀 (0) | 2021.01.14 |
---|---|
[iOS - swift] popToRootViewController의 completion 인자를 가진 커스텀 함수 만드는 방법 (CATransaction 사용) (0) | 2021.01.12 |
[iOS - swift] Floating Button (Hover 프레임워크) (0) | 2021.01.11 |
[iOS - swift] 포커스 애니메이션 (0) | 2021.01.10 |
[iOS - swift] UIImage파일 관리 방법 (0) | 2021.01.10 |
Comments