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

如何获取NaturalLanguage支持的文本翻译可用语言列表?

解决编译错误并获取文本翻译可用语言列表

一、修正代码编译错误

你的代码出现两个错误的原因是API使用方式不符合iOS 16.4(Xcode 14.3)的版本规范:

  1. 错误1:无法推断.text的上下文
    .text需要明确指定所属枚举类型NLLanguageRecognizer.TextType,不能直接简写。
  2. 错误2:NLLanguageRecognizer没有实例方法availableRecognitionLanguages
    availableRecognitionLanguages(for:)是类方法,需通过NLLanguageRecognizer类调用,而非实例对象。

修正后的语言识别可用语言获取代码:

func getRecognitionLanguages() {
    // 获取所有ISO语言代码及对应名称
    let allLanguages = Locale.isoLanguageCodes
    let locale = Locale(identifier: "en_US")
    for languageCode in allLanguages {
        if let languageName = locale.localizedString(forIdentifier: languageCode) {
            print("\(languageCode): \(languageName)")
        }
    }
    
    // 获取NLLanguageRecognizer支持的语言识别列表(类方法调用)
    let textRecognitionLanguages = NLLanguageRecognizer.availableRecognitionLanguages(for: NLLanguageRecognizer.TextType.text)
    print("支持的语言识别列表:\(textRecognitionLanguages)")
}

二、获取文本翻译的可用语言列表

若你需要的是文本翻译的支持语言(而非语言识别),应使用NLLanguageTranslator类的API,NLLanguageRecognizer仅负责文本语言识别,不处理翻译逻辑。

1. 获取所有支持的翻译语言对

通过类方法availableLanguagePairs()获取所有支持的源语言-目标语言组合:

func getTranslationLanguagePairs() {
    guard let languagePairs = NLLanguageTranslator.availableLanguagePairs() else {
        print("无法获取支持的翻译语言对")
        return
    }
    print("支持的翻译语言对:")
    for pair in languagePairs {
        let sourceLang = pair.sourceLanguage.rawValue
        let targetLang = pair.targetLanguage.rawValue
        // 获取语言名称
        let sourceName = Locale.current.localizedString(forIdentifier: sourceLang) ?? sourceLang
        let targetName = Locale.current.localizedString(forIdentifier: targetLang) ?? targetLang
        print("\(sourceName) -> \(targetName)")
    }
}

2. 获取支持的源语言/目标语言

若需单独获取可作为源语言或目标语言的列表,可从语言对中提取去重:

func getUniqueTranslationLanguages() {
    guard let languagePairs = NLLanguageTranslator.availableLanguagePairs() else {
        print("无法获取支持的翻译语言对")
        return
    }
    
    // 提取所有源语言并去重
    let sourceLanguages = Set(languagePairs.map { $0.sourceLanguage.rawValue })
    // 提取所有目标语言并去重
    let targetLanguages = Set(languagePairs.map { $0.targetLanguage.rawValue })
    
    print("支持作为源语言的列表:")
    for lang in sourceLanguages.sorted() {
        let name = Locale.current.localizedString(forIdentifier: lang) ?? lang
        print("\(lang): \(name)")
    }
    
    print("\n支持作为目标语言的列表:")
    for lang in targetLanguages.sorted() {
        let name = Locale.current.localizedString(forIdentifier: lang) ?? lang
        print("\(lang): \(name)")
    }
}

三、整合到SwiftUI项目

修改后的ContentView示例:

import SwiftUI
import Foundation
import NaturalLanguage

struct ContentView: View {
    
    func getRecognitionLanguages() {
        let allLanguages = Locale.isoLanguageCodes
        let locale = Locale(identifier: "en_US")
        for languageCode in allLanguages {
            if let languageName = locale.localizedString(forIdentifier: languageCode) {
                print("\(languageCode): \(languageName)")
            }
        }
        
        let textRecognitionLanguages = NLLanguageRecognizer.availableRecognitionLanguages(for: NLLanguageRecognizer.TextType.text)
        print("支持的语言识别列表:\(textRecognitionLanguages)")
    }
    
    func getTranslationLanguagePairs() {
        guard let languagePairs = NLLanguageTranslator.availableLanguagePairs() else {
            print("无法获取支持的翻译语言对")
            return
        }
        print("支持的翻译语言对:")
        for pair in languagePairs {
            let sourceLang = pair.sourceLanguage.rawValue
            let targetLang = pair.targetLanguage.rawValue
            let sourceName = Locale.current.localizedString(forIdentifier: sourceLang) ?? sourceLang
            let targetName = Locale.current.localizedString(forIdentifier: targetLang) ?? targetLang
            print("\(sourceName) -> \(targetName)")
        }
    }
    
    var body: some View {
        VStack(spacing: 20) {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
            
            Button("获取语言识别列表") {
                getRecognitionLanguages()
            }
            
            Button("获取翻译语言对") {
                getTranslationLanguagePairs()
            }
        }
        .padding()
    }
}

内容的提问来源于stack exchange,提问作者Анатолий

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:18:20