[swift] SwiftGen을 활용한 로컬라이제이션 처리

iOS 앱을 개발할 때, 다국어 지원은 중요한 요소 중 하나입니다. 사용자들이 자신의 언어로 앱을 사용할 수 있도록 하는 것은 사용성과 사용자 경험을 향상시키기 위해 필수적입니다.

로컬라이제이션 처리를 할 때, 번역된 문자열을 각각의 인터페이스 파일에 직접 작성하는 대신, SwiftGen을 사용하여 처리할 수 있습니다. SwiftGen은 컴파일 시간에 코드를 생성하여 로컬라이제이션 처리를 더 효율적이고 안전하게 할 수 있도록 도와줍니다.

SwiftGen 소개

SwiftGen은 Swift로 작성된 코드를 생성하는 도구입니다. 다양한 자원 파일들을 읽고, 이를 Swift 코드로 변환하여 앱 개발을 쉽게 할 수 있도록 도와줍니다. 로컬라이제이션 처리는 SwiftGen의 주요 기능 중 하나입니다.

SwiftGen 설치하기

SwiftGen은 CocoaPods 또는 Carthage를 사용하여 설치할 수 있습니다.

CocoaPods를 사용하는 경우, Podfile에 다음과 같이 추가합니다:

pod 'SwiftGen'

Carthage를 사용하는 경우, Cartfile에 다음과 같이 추가합니다:

github "SwiftGen/SwiftGen" ~> 6.0

설치가 완료되면, Xcode의 Build Phase에 SwiftGen을 추가합니다. 다음 스크립트를 추가하여 SwiftGen을 실행하고, 생성된 코드를 앱에 추가할 수 있습니다:

"$PODS_ROOT/SwiftGen/bin/swiftgen" xcassets [경로]/Assets.xcassets --output [경로]/Generated/Assets.swift
"$PODS_ROOT/SwiftGen/bin/swiftgen" strings [경로]/Localizable.strings --output [경로]/Generated/Localizable.swift

로컬라이제이션 처리하기

로컬라이제이션 처리를 위해 다음 세 가지 단계를 수행해야 합니다.

1. Localizable.strings 파일 작성

먼저, 로컬라이제이션에 사용할 문자열을 담은 Localizable.strings 파일을 작성해야 합니다. 이 파일에는 기본 언어와 각 언어에 대한 번역된 문자열 쌍을 작성합니다. 예를 들어, 다음과 같은 형식으로 작성할 수 있습니다:

"welcome_message" = "환영합니다.";
"greeting" = "안녕하세요, %@님.";
"error_message" = "오류가 발생했습니다.";

위의 예시에서 %@는 문자열 형식 지정자로, 해당 위치에 동적으로 값이 들어갈 수 있음을 나타냅니다.

2. Localizable.swift 파일 생성

SwiftGen을 이용하여 Localizable.swift 파일을 생성합니다. 이 파일은 Localizable.strings 파일의 각 번역된 문자열에 대한 정적 상수를 제공합니다.

import Foundation

enum Localizable {
    enum Common {
        static let welcomeMessage = L10n.tr("welcome_message")
        static func greeting(_ name: String) -> String {
            return L10n.tr("greeting", name)
        }
        static let errorMessage = L10n.tr("error_message")
    }
}

L10n은 SwiftGen이 자동으로 생성한 코드로, tr 함수를 통해 각 문자열에 접근할 수 있습니다.

3. 로컬라이징된 문자열 사용

로컬라이징된 문자열을 사용할 때는, Localizable.swift 파일에서 제공하는 정적 상수를 사용하면 됩니다.

welcomeLabel.text = Localizable.Common.welcomeMessage
greetingLabel.text = Localizable.Common.greeting(userName)
errorMessageLabel.text = Localizable.Common.errorMessage

위의 예시에서 welcomeLabel, greetingLabel, errorMessageLabel은 각각 해당 문자열을 표시할 UI 요소입니다.

로컬라이제이션 처리를 위해 SwiftGen을 사용하면, 문자열 오타나 잘못된 키 사용으로 인한 오류를 사전에 방지할 수 있습니다. 또한, 문자열을 변경하거나 추가할 때마다 다른 코드에서 사용되는 문자열을 자동으로 갱신해주므로, 유지 보수도 편리합니다.

결론

SwiftGen을 활용하여 로컬라이제이션 처리를 간편하고 안전하게 할 수 있습니다. 문자열 파일 작성, 코드 생성, 문자열 사용의 세 단계를 따르면서 앱의 다국어 지원을 향상시킬 수 있습니다. SwiftGen은 번거로운 작업을 줄여주고, 오류를 최소화하여 앱 개발을 보다 쉽고 효율적으로 할 수 있도록 도와줍니다.