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
- clean architecture
- tableView
- UICollectionView
- uiscrollview
- 리팩토링
- collectionview
- SWIFT
- 클린 코드
- Human interface guide
- uitableview
- Observable
- swiftUI
- Refactoring
- RxCocoa
- ribs
- Xcode
- Clean Code
- MVVM
- swift documentation
- 리펙터링
- 애니메이션
- map
- 스위프트
- Protocol
- UITextView
- 리펙토링
- rxswift
- HIG
- combine
- ios
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] R.swift 프레임워크, Localization, Localizable 본문
R.swift 프레임워크
- 사진, 문자열, Localizable과 같은 Resource에 접근할 때 key값으로 접근 가능
- Assets.xcassets파일에 있는 Resource들을 코드로 접근 가능: UIImage(named: "커스텀") -> R.image.커스텀
- Localizable과 같이 사용하면 컴파일 타임에 해당 문자열 키가 존재하는지 체크 가능 (만약 존재하지 않으면 컴파일에러 발생)
- 빌드할 때마다 R.generated.swift파일 생성
R.generated.swift파일 생성
- 종속성
pod 'R.swift'
- 빌드 시, 프레임워크를 통해 R.generated.swift파일을 생성하기 위해 Build Phases에서 Run script 생성 후에 아래와 같이 작성
"$PODS_ROOT/R.swift/rswift" generate "$SRCROOT/R.generated.swift"
- 드래그 하여 Run Script 파일을 Check Pods Manifest.lock과 Compile Sources사이로 이동
- Input Files, Output Files 수정
// Input Files
$TEMP_DIR/rswift-lastrun
// Ouput Files
$SRCROOT/R.generated.swift
- R.generated.swift 생성: Build 후 생성된 파일을 xcode로 드래그엔 드롭하여 복사
1. R.generated를 Assets.xcassets파일에 사용
- Assets.xcassets에 파일 추가
- 아무곳에서나 R.으로 접근
2. Localizable과 R.swift프레임워크를 같이 사용하는 방법 - 코드
* Localization은 언어 선택했을 때 해당 언어가 나오게끔 미리 지정해주는 것
* Localizable 개념 참고: ios-development.tistory.com/294
- Localizable.Strings 추가
- Localizable.strings파일 선택 후 Localize 클릭
- 언어 추가 (기본언어가 english이므로 한국어 추가)
- Localizable에 key값과 value값 지정
- 빌드 후 아래와 같이 사용
3. Localizable과 R.swift프레임워크를 같이 사용하는 방법 - xib, storyboard
- 이전까지 경우는 코드로 입력하는 경우 반영이 되었지만, 코드가 개입하지 않고 storyboard, xib상에서 localizable 설정 방법
- 원리: xib파일 런타임 시 동작되는 User Defined Runtime Attributes에 key값을 넣는 방식, 이 key값은 @IBinspectable을 갖도록 extension으로 localizable값을 return 하도록 설계
- LocalizableExtension.swift 파일 추가
import UIKit
// MARK: - Localizable
protocol Localizable {
var localized: String { get }
}
extension String: Localizable {
var localized: String {
return NSLocalizedString(self, comment: "")
}
}
// MARK: - XIBLocalizable
protocol XIBLocalizable {
var localizableKey: String? { get set }
var placeholderKey: String? { get set }
}
extension XIBLocalizable {
var placeholderKey: String? {
get {
return nil
}
set {
_ = newValue
}
}
}
extension UILabel: XIBLocalizable {
@IBInspectable var localizableKey: String? {
get {
return nil
}
set(key) {
text = key?.localized
}
}
}
extension UIButton: XIBLocalizable {
@IBInspectable var localizableKey: String? {
get {
return nil
}
set(key) {
setTitle(key?.localized, for: .normal)
}
}
}
extension UITextField: XIBLocalizable {
@IBInspectable var placeholderKey: String? {
get {
return nil
}
set(key) {
placeholder = key?.localized
}
}
@IBInspectable var localizableKey: String? {
get {
return nil
}
set(key) {
text = key?.localized
}
}
}
extension UITextView: XIBLocalizable {
@IBInspectable var localizableKey: String? {
get {
return nil
}
set(key) {
text = key?.localized
}
}
}
- 사용 방법: xib에서 Localizable Key를 입력 -> 자동으로 User Defined Runtime Attributes 적용
응용 - 정규식
- %d와 같은 정규식 이용 가능
// localizable.strings
"year-month-format" = "%d년 %d월";
R.string.localizable.yearMonthFormat(2021, 2) // 2021년 2월
- %@ 정규식 이용 가능 - 문자열
"phone-number-masking" = "%@-****-%@";
Strings.phoneMasking4("123", "5678") // 123-****-5678
'iOS 응용 (swift)' 카테고리의 다른 글
[iOS - swift] computed property와 @IBInspectable 사용 방법 (0) | 2021.01.23 |
---|---|
[iOS - swift] WebView cookie 설정 (cache) (0) | 2021.01.21 |
[iOS - swift] 드래그하여 view움직이기 (draggable view) UIPanGestureRecognizer (0) | 2021.01.17 |
[iOS - swift] Fake GPS, 가상 위치 설정 (iTools) (0) | 2021.01.15 |
[iOS - swift] throttle tap 커스텀 (0) | 2021.01.14 |
Comments