You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在iOS15中使用Swift检测翻译功能的On-Device模式是否开启

检测iOS15+系统翻译On-Device模式启用状态的实现方案

核心结论

苹果未在公开的Translate框架中提供直接读取系统全局设备端翻译总开关状态的API,该设置属于系统层级的隐私配置,第三方应用默认无权限直接查询。

间接实现方案

可以通过构造无网络依赖的翻译测试请求,根据请求的返回结果间接判断模式是否开启,实现代码参考如下:

import Translate
import UIKit

func checkOnDeviceTranslationEnabled(completion: @escaping (Bool) -> Void) {
    // 适配iOS15及以上版本
    guard #available(iOS 15.0, *) else {
        completion(false)
        return
    }
    // 构造测试用的源、目标语言,可根据需要调整
    guard let sourceLanguage = Locale.LanguageCode("en").language,
          let targetLanguage = Locale.LanguageCode("zh-Hans").language else {
        completion(false)
        return
    }
    let request = TranslationRequest(sourceLanguage: sourceLanguage, targetLanguage: targetLanguage, text: "test")
    // 配置仅允许设备端翻译,不允许走网络
    let config = TranslationSession.Configuration()
    config.allowsOnDeviceTranslation = true
    config.allowsNetworkAccess = false
    
    Task {
        do {
            let session = TranslationSession(configuration: config)
            let _ = try await session.translations(for: request).first
            // 请求成功代表On-Device模式已开启且对应语言离线包已下载
            completion(true)
        } catch {
            // 请求失败包含两种情况:1. On-Device总开关关闭 2. 对应语言离线包未下载
            completion(false)
        }
    }
}

注意事项

  • 调用该方法前需要先获取用户的翻译功能授权,可通过TranslationSession.requestAuthorization()触发授权申请
  • 如果需要区分「总开关关闭」和「离线语言包未下载」两种情况,可先调用availableLanguages方法查询当前已下载的离线语言列表,排除语言包未下载的场景
  • 测试请求的文本尽可能短,避免产生不必要的性能开销

iOS系统翻译On-Device模式开关截图

内容的提问来源于stack exchange,提问作者fatenumber25

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:09:03