介紹
iOS 中內(nèi)置了一款非常好用的翻譯 App:Translate癌压,支持翻譯搁进、相機翻譯與對話寞宫。在 iOS 17.4 之后吼和,Apple 逐步開發(fā)了相關(guān)的 SwiftUI API。開發(fā)者只需要調(diào)用 API 就能在自己的 App 內(nèi)實現(xiàn)類似 Translate App 的翻譯效果窘疮。
API
translationPresentation
- iOS 17.4 之后新增的翻譯修飾符袋哼,可以彈出翻譯疊加層實現(xiàn)應(yīng)用內(nèi)翻譯。
- 需要導入
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 之后新增的翻譯修飾符涛贯,根據(jù)翻譯要求執(zhí)行翻譯任務(wù),而無需借助系統(tǒng)的彈出層蔚出。
- 需要導入
Translation
模塊弟翘。
案例
import SwiftUI
import Translation
struct ContentView: View {
@State private var article = "iOS 18 之后在應(yīng)用程序中可以使用翻譯 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)
}
}
}
}
}
效果
注意:需要在真機運行測試骄酗。