apple/Docs, iOS, Swift

iOS Translation Framework

lgvv 2024. 8. 28. 00:31

iOS Translation Framework

 

iOS 18.0 +

Xcode 16 이상에서 작업

 

Overview

 

앱 내 번역 기능을 제공하기 위해 Translation 프레임워크를 사용할 수 있음.

시스템이 사용자를 대신하여 번역을 제안하는 기본 UI를 사용할 수 있으며, 사용자가 별도의 설정 없이도 쉽게 번역 기능을 이용.

또한, 이 프레임워크를 사용하여 번역 경험을 사용자 맞춤형으로 유연하게 조정할 수도 있음.



Translation 프레임워크를 활용하는 방법에는 두 가지가 존재.

  • 시스템이 제공하는 기본 번역 UI를 사용: 하여 사용자가 손쉽게 번역을 적용할 수 있도록 합니다. 이 경우 시스템이 자동으로 번역 옵션을 제공하며, 개발자는 별도의 UI를 설계할 필요가 없습니다.
  • 사용자 맞춤형 번역 경험 제공: Translation 프레임워크를 사용하여 번역 경험을 커스터마이즈할 수 있음. 이를 통해 특정 상황에 맞는 번역 설정을 제공하거나, 번역 UI를 직접 디자인하여 사용자의 요구에 맞게 조정할 수 있음.

 

 

SwiftUI에서 매우 간편하게 사용하는 예제

Text(originalText)
    .translationPresentation(
        isPresented: $showTranslation,
        text: originalText
     ) { translatedText in
         // 변역이 완료된 텍스트를 클로저를 통해 대치도 가능.
         originalText = translatedText
     }

 

 

 

유연하게 Configuration을 통해 직접 문자열을 다룰 수 있음.

struct SingleStringView: View {
    @State private var sourceText = "Hallo, Welt!"
    @State private var targetText = ""

    // Define a configuration.
    @State private var configuration: TranslationSession.Configuration?

    var body: some View {
        VStack {
            TextField("Enter text to translate", text: $sourceText)
                .textFieldStyle(.roundedBorder)
            Button("Translate") {
                triggerTranslation()
            }
            Text(verbatim: targetText)
        }
        // Pass the configuration to the task.
        .translationTask(configuration) { session in
            do {
                // Use the session the task provides to translate the text.
                let response = try await session.translate(sourceText)

                // Update the view with the translated result.
                targetText = response.targetText
            } catch {
                // Handle any errors.
            }
        }
        .padding()
        .navigationTitle("Single string")
    }

    private func triggerTranslation() {
        guard configuration == nil else {
            configuration?.invalidate()
            return
        }

        // Let the framework automatically determine the language pairing.
        configuration = .init()
    }
}

 

 

유연하게 Configuration을 통해 직접 문자열을 다룰 수 있음.

여러 문자들을 한번에 처리할 경우 사용할 경우 Batch를 통해 처리할 수 있음.

Task { @MainActor in
            let requests: [TranslationSession.Request] = foodItems.map {
                // Map each item into a request.
                TranslationSession.Request(sourceText: $0)
            }

            do {
                let responses = try await session.translations(from: requests)
                foodItems = responses.map {
                    // Update each item with the translated result.
                    $0.targetText
                }
            } catch {
                // Handle any errors.
            }
        }

 

 

(참고)

https://developer.apple.com/documentation/Translation

 

Translation | Apple Developer Documentation

Translate text in your app from one language to another.

developer.apple.com

https://www.youtube.com/watch?v=MuIFhbHNmqA&list=PLjODKV8YBFHbZ3DCbLHAYOEXiktlfXVZT&index=7