使用 UITextChecker 对 Swift 中的希伯来文文本进行拼写检查 5

Spellchecking with UITextChecker for hebrew text in Swift 5

对于任何希伯来语文本,无论文本是否包含任何真实的单词,我都会返回 true:

func wordIsSpelledCorrect(word: String) -> Bool {
  let checker = UITextChecker()
  let range = NSRange(location: 0, length: word.count)
  let wordRange = checker.rangeOfMisspelledWord(in: word, range: range, startingAt: 0, wrap: false, language: "he")

  return wordRange.location == NSNotFound
}
// wordIsSpelledCorrect("שלום") // which is Hebrew for "peace" returns true
// but
// wordIsSpelledCorrect("םולש") // which is not a real word, also returns true

我在我的设备上安装了希伯来语词典——我已经尝试过在“设置”>“语言和地区”中将希伯来语设置为“iPhone 语言”和不将希伯来语设置为“iPhone 语言”。有谁知道 UITextChecker 是否不支持希伯来语?如果是这样,对于不受支持的语言,是否总是返回 true 的预期行为?

我的英语很好用。如果 UITextChecker 是希伯来语的半身像,我有什么其他方法可以解决这个问题吗?无论如何,我更喜欢另一种解决方案,因为我的应用程序是通用的,而且 UIKit 不能在 macOS 上运行。

[更新 1]

我花了一些时间调查如何访问 macOS 的语言词典,但一无所获。我不明白这是一个仅限移动设备的需求。例如,Apple 不是在 Pages 和他们自己的 Dictionary App 中实现的吗?我想我的下一步是开始研究多语言字典 API,但是调用我知道就在系统上的东西似乎效率很低。任何想法或方向将不胜感激。

[更新 2]

根据 the answers here,我正在寻找的 API 不存在,所以我不得不暂停我的通用应用程序。但是回到上面的代码,除了希伯来语之外,它在我尝试过的所有语言中都能很好地工作,谁能帮我让希伯来语为 iOS 工作?

[更新 3]

为了完整起见,以下是适用于英语、法语、西班牙语等语言的代码:

func wordIsSpelledCorrect(word: String) -> Bool {
    if let language = NLLanguageRecognizer.dominantLanguage(for: word) {
        let checker = UITextChecker()
        let range = NSRange(location: 0, length: word.count)
        let wordRange = checker.rangeOfMisspelledWord(in: word, range: range, startingAt: 0, wrap: false, language: language.rawValue)
        return wordRange.location == NSNotFound
    } else {
        return false
    }
}

检查语言是否在 UITextChecker.availableLanguages 中。否则UITextChecker不会发现拼写错误