在 iOS 开发中,translationTask
是 iOS 18 及更高版本引入的 SwiftUI 修饰符,允许开发者在应用内直接集成翻译功能,无需依赖系统弹窗。以下是其使用方法的详细介绍:
1. 环境要求与基础配置 #
- 系统版本:需运行 iOS 18 及以上系统。
- 模块导入:在 SwiftUI 文件中导入
Translation
模块:import SwiftUI import Translation
- 语言配置:通过
TranslationSession.Configuration
定义翻译的源语言和目标语言。例如,将中文翻译为英文:支持的语言标识符需参考苹果官方文档。let config = TranslationSession.Configuration( source: .init(identifier: "zh-Hans-CN"), // 源语言(简体中文) target: .init(identifier: "en-US") // 目标语言(英语) )
2. 在视图中集成 translationTask #
- 修饰符绑定:将
.translationTask
附加到需要翻译的视图组件(如Text
),并绑定配置变量:struct ContentView: View { @State private var article = "需要翻译的文本" @State private var configuration: TranslationSession.Configuration? var body: some View { Text(article) .translationTask(configuration) { session in // 执行翻译操作 } } }
- 触发翻译:通过用户操作(如按钮点击)更新
configuration
,从而触发翻译任务:Button("翻译") { configuration = TranslationSession.Configuration(source: ..., target: ...) }
3. 执行翻译与处理结果 #
- 调用翻译接口:在闭包中使用
session.translate()
方法传入待翻译文本,并通过await
处理异步返回结果:.translationTask(configuration) { session in if let response = try? await session.translate(article) { // 更新界面显示翻译结果 article.append("\n\n" + response.targetText) } }
- 结果处理:
response.targetText
包含翻译后的文本,开发者可自定义后续操作(如更新 UI 或存储翻译结果)。
4. 高级功能与注意事项 #
- 离线翻译支持:若需启用离线翻译,需在系统设置中开启“设备端模式”(需提前下载语言包),确保隐私性与无网络环境使用。
- 错误处理:示例中使用
try?
简化了错误处理,实际开发建议通过do-catch
块捕获异常,例如网络问题或语言包缺失。 - 真机测试:该 API 依赖设备端神经引擎,需在真机运行测试,模拟器可能无法支持。
5. 应用场景示例 #
- 多语言内容展示:在新闻类 App 中,用户可一键将外文文章翻译为本地语言。
- 实时聊天翻译:社交应用中自动翻译接收到的外语消息。
- 文档处理工具:支持用户导入外文 PDF,通过
translationTask
实现段落翻译。
通过以上步骤,开发者可高效集成苹果原生翻译能力,提升应用的多语言支持体验。实际开发中需注意语言标识符的兼容性及用户隐私设置。
translationPresentation
#
在 SwiftUI 中,translationPresentation
是 iOS 17.4 及更高版本引入的翻译修饰符,它允许开发者通过调用系统原生的翻译服务,在应用内快速实现文本翻译功能,并自动展示翻译叠加层(类似系统 Translate App 的弹窗效果)。以下是其核心功能的详细解析:
一、功能与参数解析 #
translationPresentation
修饰符的核心参数如下:
.translationPresentation(
isPresented: Binding<Bool>, // 控制翻译弹窗的显示状态
text: String, // 需要翻译的原始文本
completion: (String) -> Void // 翻译完成后的回调(返回翻译结果)
)
isPresented
:通过绑定一个布尔值状态变量(如@State
),控制翻译弹窗的显示与隐藏。text
:需要翻译的原始文本,支持多语言自动识别(如中文、英文等)。completion
:翻译完成后,系统会将翻译结果通过闭包返回,开发者可在此更新界面或存储结果。
二、使用场景与示例 #
1. 基础用法 #
以下是一个典型的使用场景:点击按钮触发翻译,并在翻译完成后更新原始文本。
import SwiftUI
import Translation
struct ContentView: View {
@State private var showTranslation = false
@State private var originalText = "Hello, World!"
var body: some View {
VStack {
Text(originalText)
Button("Translate") {
showTranslation.toggle() // 触发弹窗显示
}
}
.padding()
.translationPresentation(isPresented: $showTranslation, text: originalText) { translatedText in
originalText = translatedText // 更新原文本为翻译结果
}
}
}
- 效果:点击按钮后,系统会弹出翻译叠加层,自动识别原文语言并提供翻译结果。用户确认后,通过闭包将结果返回到应用界面。
2. 翻译流程 #
- 触发弹窗:通过状态变量
showTranslation
控制弹窗显示。 - 系统翻译:文本由系统服务自动翻译(无需开发者处理语言识别)。
- 结果回调:翻译后的文本通过闭包返回,开发者可自定义后续逻辑(如更新数据、存储历史记录等)。
三、与其他翻译 API 的对比 #
在 iOS 18 中,Apple 进一步推出了 translationTask
修饰符,二者区别如下:
特性 | translationPresentation (iOS 17.4+) | translationTask (iOS 18+) |
---|---|---|
界面依赖 | 依赖系统弹窗 | 无弹窗,后台直接翻译 |
翻译流程 | 用户交互触发 | 开发者主动配置翻译参数 |
适用场景 | 快速集成翻译功能 | 定制化翻译流程(如批量翻译) |
- 优势:
translationPresentation
适合需要直接调用系统翻译界面、减少开发成本的场景。
四、注意事项 #
- 真机测试:该功能依赖系统翻译服务,需在真实 iOS 设备上运行,模拟器可能无法生效。
- 语言支持:翻译语言范围由系统决定,开发者需确保目标语言在设备支持列表中。
- 错误处理:若翻译失败(如网络问题),回调可能不执行,建议在闭包中添加错误捕获逻辑。
通过 translationPresentation
,开发者能以极低的代码量实现高质量的系统级翻译功能,显著提升应用国际化体验。若需要更灵活的翻译控制,可参考 iOS 18 的 translationTask
修饰符。