介绍
iOS 中内置了一款非常好用的翻译 App:Translate,支持翻译、相机翻译与对话。在 iOS 17.4 之后,Apple 逐步开发了相关的 SwiftUI API。开发者只需要调用 API 就能在自己的 App 内实现类似 Translate App 的翻译效果。
API
translationPresentation
- iOS 17.4 之后新增的翻译修饰符,可以弹出翻译叠加层实现应用内翻译。
- 需要导入
Translation
模块。
案例
import SwiftUI
import Translation
struct ContentView: View {
@State private var showTranslation = false
@State private var originalText = "Using Translation API in your App after iOS 17.4"
var body: some View {
VStack {
Text(originalText)
Button("Translate") {
showTranslation.toggle()
}
}
.padding()
.translationPresentation(isPresented: $showTranslation, text: originalText) { translatedText in
print(translatedText)
originalText = translatedText
}
}
}
效果
translationTask
- iOS 18 之后新增的翻译修饰符,根据翻译要求执行翻译任务,而无需借助系统的弹出层。
- 需要导入
Translation
模块。
案例
import SwiftUI
import Translation
struct ContentView: View {
@State private var article = "iOS 18 之后在应用程序中可以使用翻译 API。"
// 翻译配置
@State private var configuration: TranslationSession.Configuration?
var body: some View {
NavigationStack {
Text(article)
.toolbar {
Button {
// 汉翻英
configuration = TranslationSession.Configuration(source: .init(identifier: "zh-Hans-CN"), target: .init(identifier: "en-US"))
} label: {
Label("Translate", systemImage: "translate")
.labelStyle(.iconOnly)
}
}
.translationTask(configuration) { session in
// 翻译
if let response = try? await session.translate(article) {
article.append("\n\n" + response.targetText)
}
}
}
}
}
效果
注意:需要在真机运行测试。