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

Posted

技术标签:

【中文标题】在 Swift 5 中使用 UITextChecker 对希伯来文文本进行拼写检查【英文标题】:Spellchecking with UITextChecker for hebrew text in Swift 5 【发布时间】:2021-06-03 20:31:09 【问题描述】:

无论文本是否包含任何真实单词,我都会为任何希伯来文本返回 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 语言”和不使用希伯来语。有谁知道 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中是否存在希伯来语 嗨@paiv,我看到希伯来语没有列在availableLanguages 中,所以它不受支持。如果您想在答案中陈述尽可能多的内容,我想这与我将得到的一样接近 @paiv,如果您发布的答案说 availableLanguages 可用于查看支持的语言,我会奖励您。 【参考方案1】:

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

【讨论】:

谢谢你,@paiv。

以上是关于在 Swift 5 中使用 UITextChecker 对希伯来文文本进行拼写检查的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 在 Swift 5 中使用 Alamofire 接收图像上传

如何使用 Swift 5 在 Xcode 10.2.1 中添加 alamofire

Swift新手教程系列5-函数+selector在swift中的使用方法

如何在 Swift 5 和 iOS 13 中使用 CIFilter sunbeamsGenerator?

在 Swift 5 中在其自己的初始值中使用的变量

如何在 Swift 5 中使用 Alamofire 解析 json