[swift] Swift FontBlaster를 사용하여 레이블의 폰트를 사용자가 설정한 언어에 따라 변경하는 방법은?

iOS 앱을 개발하다보면, 다국어 지원을 위해 사용자가 설정한 언어에 따라 앱의 텍스트를 변환해야 할 때가 있습니다. 이 중에서도 가장 많이 사용하는 요소 중 하나는 레이블의 폰트입니다. 사용자가 설정한 언어에 따라 폰트를 동적으로 변경하기 위해서는 FontBlaster라는 Swift 라이브러리를 사용할 수 있습니다.

1. FontBlaster 라이브러리 설치

먼저, FontBlaster 라이브러리를 프로젝트에 추가해야 합니다. 이를 위해서는 Podfile에 다음 줄을 추가하고, 터미널에서 pod install 명령을 실행합니다.

pod 'FontBlaster'

2. 사용자가 설정한 언어에 따른 폰트 변경

FontBlaster를 사용하여 레이블의 폰트를 사용자가 설정한 언어에 따라 변경하는 방법은 다음과 같습니다.

import FontBlaster

class ViewController: UIViewController {
    @IBOutlet weak var titleLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 사용자가 설정한 언어에 따른 폰트 변경
        if let font = FontBlaster.fontWithName("NanumSquareRoundOTFEB") {
            titleLabel.font = UIFont(descriptor: font.fontDescriptor, size: 20)
        }
    }
}

위의 예제에서는 NanumSquareRoundOTFEB 폰트를 사용자가 설정한 언어에 따라 적용하고 있습니다. 만약 다른 폰트를 사용하고 싶다면, 해당 폰트의 이름을 변경해주어야 합니다.

3. 사용자 언어 변경 감지

앱 내에서 언어 변경이 발생할 경우, FontBlaster의 캐시를 갱신해야 합니다. 예를 들어, AppDelegate에서 다음과 같이 캐시를 갱신하는 메소드를 추가할 수 있습니다.

import FontBlaster

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    // ...
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // ...
        
        // 사용자 언어 변경 감지
        NotificationCenter.default.addObserver(self, selector: #selector(languageDidChange), name: NSLocale.currentLocaleDidChangeNotification , object: nil)
        
        return true
    }
    
    @objc func languageDidChange() {
        FontBlaster.refreshFonts()
    }
}

위의 예제에서는 languageDidChange 메소드를 사용하여 언어 변경 시 FontBlaster의 캐시를 갱신하고 있습니다. 이렇게 함으로써, 사용자가 언어를 변경할 때마다 폰트가 실시간으로 변경될 수 있습니다.

마무리

위의 방법을 따라 Swift FontBlaster를 사용하여 레이블의 폰트를 사용자가 설정한 언어에 따라 동적으로 변경할 수 있습니다. 이를 통해 다국어 지원을 간편하게 구현할 수 있고, 사용자에게 더 좋은 사용자 경험을 제공할 수 있습니다.

참고 자료: FontBlaster GitHub 저장소