【问题标题】:Localizing the Reading of Emoji on IOS 10.0 or Higher在 IOS 10.0 或更高版本上本地化表情符号的阅读
【发布时间】:2019-09-21 12:26:02
【问题描述】:

我注意到一个问题,即 IOS 似乎无法在 IOS 10.0 或更高版本上本地化表情符号的读取(通过 AVSpeechSynthesizer),但它确实似乎在 IOS 9.3 或更低版本上正确执行.

如果您告诉设置为英语的 AVSpeechSynthesizer 通过向其发送字符串“???

当您将合成器的语音语言更改为英语以外的任何语言(例如法语)并发送相同的表情符号时,它应该说“Visage souriant avec des yeux normaux”,这在 IOS 9.3 或更低,但在 IOS 10.0 及更高版本上,它只是读取带有法国口音的英文文本(“正常眼睛的笑脸”)。

我在下面想出了一个“操场”,显示我是如何得出这个结论的……尽管我希望我遗漏了什么或做错了什么。

要重现此问题,请在 XCode 中创建新项目并将按钮附加到 speakNext() 函数。

在运行 IOS 9.3 或更低版本的模拟器上运行,然后在 IOS 10.0 或更高版本上执行相同操作。

你能解释一下zat吗?

import UIKit
import AVKit

class ViewController: UIViewController {

    var counter = 0

    let langArray = ["en","fr","de","ru","zh-Hans"]

    let synth = AVSpeechSynthesizer()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    @IBAction func speakNext(_ sender: Any) {
        print("testing \(langArray[counter])")
        let utterance = AVSpeechUtterance(string: "????")
        utterance.voice = AVSpeechSynthesisVoice(language: langArray[counter])
        counter += 1
        if (counter > 4) { counter = 0 }
        synth.speak(utterance)
    }

}

【问题讨论】:

  • 如果您的应用只支持英语,那么用户选择哪种语言并不重要。它将是英文的。这在较新版本的 iOS 中发生了变化。如果您支持英语和法语,那么文本转语音应该适用于英语和法语,而不是用户可能选择的任何语言。
  • 感谢您的意见。也许这有什么问题,但我没有说用户选择语言的任何内容。这与通过代码设置话语的语音/语言有关,设置正确的语音没有问题。我通过添加法语本地化(单击项目设置中本地化下的“+”)测试了您在 IOS 10.2 上所说的内容,然后将声音设置为法语,并发送随机表情符号......它仍然可以正确读取它们语音,但读英文单词(与原始问题描述相同)。

标签: swift localization text-to-speech emoji avspeechsynthesizer


【解决方案1】:

看起来,无论好坏,表情符号现在都是根据用户的首选语言来阅读的。如果你在设备上运行它并切换到例如法语,那么即使语音合成语音是英语,表情符号也会以法语读出。值得注意的是,某些语言似乎无法读出表情符号。令人惊讶的是,这似乎对日本人来说是正确的。

那么你能改变它吗?

嗯,有点,但我不确定它是否经过 Apple 批准。您可以在UserDefaults.standard 中设置“AppleLanguages”键。此数组中的第一种语言调用 UIApplicationMain 时将是用于读取表情符号的语言。这意味着如果您在应用程序中更改该值,则要等到下次启动应用程序时才会生效。

目前还不清楚这是一个错误还是预期的行为,这听起来肯定很刺耳。可能值得向 Apple 提交雷达或反馈或他们现在所称的任何内容。

【讨论】:

  • 欣赏它。我试图提交错误报告,但没有运气。这种体验就像电影《白痴》中的经历,他将手臂放入机器中纹身。另外,澄清一下,我们正在讨论语音引擎将表情符号转换为单词的方式,不是语音是否设置为预期的语言......对吗?因为我测试了您所说的内容——在 IOS 10.2 的设置中将设备语言设置为法语——它按预期设置了各种语言的声音,但仍以英语处理表情符号。您是否测试过您所说的内容,如果是,如何测试?谢谢。
  • 是的,我理解了这个问题,是的,我已经在设备上进行了测试,iPad 运行 13.0 beta。设置应用程序中的设置和“AppleLanguages”的技巧但是您必须退出并重新启动应用程序才能使更改生效,而且,也许很明显,AppleLanguages 键会覆盖设置应用程序。您正在测试哪些 iOS 版本? (我周围可能还有其他一些可以测试的设备)。
  • 我已经验证了从 10.0 到 12.2 非 beta 版本的模拟器和 12.1 的真实设备上的违规行为。并在 10.0 之前的模拟器上验证了正确的行为。就目前而言,13 测试版是否可能不可信?
  • 好的,另一个更新。看起来模拟器的行为有所不同。我测试了 12.2 模拟器,但无法让它以英语以外的任何语言阅读表情符号。我什至尝试更改我的 Mac 的语言(以防设置失败)......即使我的 Mac 和模拟器都切换到西班牙语,它仍然以英语阅读!
  • 不客气。抱歉,如果您处理多语言应用程序,我无法想出任何更好/偷偷摸摸的方法来获得您可能需要的结果。就我而言,我也会提供类似的反馈。我有一些多语言应用程序,虽然表情符号目前不是问题,但将来可能会出现。
【解决方案2】:

更新:问题似乎已在 iOS 13.2 中得到修复!耶!

更新:在 iOS 13 正式发布后,该问题已被更严重的问题 (iOS 13 Text To Speech (TTS - AVSpeechSynthesisVoice) crashes for some users after update) 所取代/取代。

// 原帖:

在通过反馈助手通知 Apple 后,这似乎是 IOS 10 中以某种方式引入的错误,在连续三个 IOS 版本中都没有被注意到。

使用 IOS 13 beta 5 (17A5547d) 测试后,问题未出现。

他们声称从现在开始,该问题已得到明确解决。

【讨论】:

    猜你喜欢
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多