[swift] SwiftMessages를 이용한 다국어 지원

SwiftMessages는 iOS 앱에서 메시지 팝업을 표시하는 데 사용되는 경량화된 라이브러리입니다. 이 라이브러리를 사용하면 다국어 지원 기능을 간편하게 구현할 수 있습니다. 다음은 SwiftMessages를 사용하여 다국어 지원을 구현하는 방법에 대해 설명합니다.

SwiftMessages 설치

SwiftMessages는 CocoaPods를 통해 설치할 수 있습니다. Podfile에 다음과 같이 SwiftMessages를 추가합니다:

pod 'SwiftMessages'

그런 다음 터미널에서 pod install 명령을 실행하여 프로젝트에 SwiftMessages를 설치합니다.

다국어 지원을 위한 리소스 파일 만들기

다국어를 지원하기 위해, 프로젝트에 다국어 리소스 파일을 추가해야합니다. 이 리소스 파일은 각 언어에 대한 메시지 문자열을 포함해야 합니다. 아래는 예시를 들어 설명하겠습니다.

  1. 프로젝트 네비게이터에서 Supporting Files 폴더를 우클릭하고, New Group을 선택합니다.
  2. 그룹의 이름을 Localizations으로 설정합니다.
  3. Localizations 폴더를 우클릭하고, New File을 선택합니다.
  4. Strings File을 선택하고, 파일 이름을 Localizable.strings로 설정합니다.
  5. Localizable.strings 파일을 다국어 리소스 파일로 인식하도록, 오른쪽 패널의 File inspector 탭에서 "Localizations" 섹션의 Localization 값을 English, Korean, Japanese 등의 언어로 설정합니다.
  6. Localizable.strings 파일을 편집하여 다국어 메시지를 추가합니다. 예를 들어, 영어로 “Hello”라는 메시지를 추가하려면 다음과 같이 작성합니다:
"hello_message" = "Hello";
  1. 다른 언어로도 같은 작업을 반복합니다. 다국어 메시지의 키(hello_message)는 모든 언어에서 동일해야 합니다.

SwiftMessages에서 다국어 메시지 표시하기

이제 SwiftMessages와 다국어 리소스 파일이 모두 준비되었으므로, 이 두 가지를 조합하여 다국어 메시지를 표시하는 방법을 알아보겠습니다.

SwiftMessages에서 메시지를 표시하는 코드에는 SwiftMessages.show() 메서드를 사용합니다. 이 메서드의 인자로 SwiftMessages.Config 객체를 전달하여 메시지의 외양을 구성할 수 있습니다. 다음 코드는 ‘hello_message’를 표시하는 예제입니다:

import SwiftMessages

func showMessage() {
    let message = NSLocalizedString("hello_message", comment: "")
    let config = SwiftMessages.Config()
    config.presentationContext = .window(windowLevel: UIWindow.Level.statusBar)
    let view = MessageView.viewFromNib(layout: .statusLine)
    view.configureContent(title: "", body: message)
    SwiftMessages.show(config: config, view: view)
}

위 예제에서, NSLocalizedString 함수는 현재 선택된 언어에 해당하는 메시지를 가져오기 위해 리소스 파일의 문자열 키를 사용합니다. 선택된 언어에 따라 message 변수에는 해당 언어의 메시지가 저장됩니다.

다국어 설정 변경하기

다국어 설정을 변경하려면, 언어를 변경할 수 있는 사용자 인터페이스를 만들어야 합니다. 사용자가 언어 변경을 요청하면, 변경된 언어를 앱의 기본 언어로 설정하고, 이를 유지하도록 구현해야 합니다. 예를 들어, 언어 설정을 UserDefaults에 저장하고, 앱 시작 시에 이 값을 읽어 기본 언어를 설정할 수 있습니다.

다음은 간단한 예제입니다:

import UIKit

let kAppLanguage = "AppLanguage"

func setDefaultLanguage() {
    if let language = UserDefaults.standard.string(forKey: kAppLanguage) {
        Bundle.setLanguage(language)
    }
}

func changeLanguage(_ language: String) {
    UserDefaults.standard.set(language, forKey: kAppLanguage)
    UserDefaults.standard.synchronize()
    Bundle.setLanguage(language)
    // 해당 언어로 메시지를 다시 설정하여 표시
    showMessage()
}

위 코드에서 setDefaultLanguage() 함수는 앱 시작 시 UserDefaults에서 언어 설정값을 읽어와 기본 언어를 설정합니다. changeLanguage(_:) 함수는 사용자가 언어를 변경하면 호출되어 해당 언어를 UserDefaults에 저장하고 앱의 언어를 변경합니다.

결론

SwiftMessages를 사용하여 iOS 앱에서 다국어 지원을 구현하는 방법을 알아보았습니다. SwiftMessages를 통해 메시지 팝업을 표시하고, 다국어 리소스 파일을 통해 메시지를 전달할 수 있습니다. 다국어 설정을 변경하는 기능도 추가하여 사용자가 언어를 선택하고 선택한 언어로 메시지를 표시할 수 있습니다.