如何获取NaturalLanguage支持的文本翻译可用语言列表?
解决编译错误并获取文本翻译可用语言列表
一、修正代码编译错误
你的代码出现两个错误的原因是API使用方式不符合iOS 16.4(Xcode 14.3)的版本规范:
- 错误1:无法推断
.text的上下文.text需要明确指定所属枚举类型NLLanguageRecognizer.TextType,不能直接简写。 - 错误2:
NLLanguageRecognizer没有实例方法availableRecognitionLanguagesavailableRecognitionLanguages(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,提问作者Анатолий
相关产品推荐
相关产品推荐

