在IOS 10.1或更高版本上本地化Emoji的阅读内容

时间:2019-05-02 23:55:44

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

我注意到一个问题,在IOS 10.1或更高版本上,IOS似乎无法本地化(通过语音转换)表情符号的读取,但确实在iOS 9.0。

如果您通过将字符串“”发送给设置为英语的AVSpeechSynthesizer来说出表情符号,则会显示“眼睛正常的笑脸”。

当您将合成器的语音语言更改为英语以外的其他语言(例如法语)并发送相同的表情符号时,它应显示“ Visage souriant avec des yeux normaux”, 是在IOS 9.0上完成的。 ,但是在IOS 10.1和更高版本上,它只是读取带有法语口音的英语文本(“普通眼睛咧着嘴笑脸”)。

我只能认为,由于投资回报率低,苹果决定放弃这个庞大的“表情符号本地化项目”。

我想出了一个下面的“操场”,展示了我是如何得出这个结论的……虽然我希望我错过了某些事情或做错了什么。

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

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

您能解释一下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)
    }

}

2 个答案:

答案 0 :(得分:3)

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

那么您可以更改它吗?

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

目前尚不清楚这是错误还是预期的行为,一定会听到。可能值得向Apple提交Radar或Feedback或他们现在所说的任何东西。

答案 1 :(得分:1)

更新:问题似乎已在iOS 13.2中修复!是的!

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

//原始帖子:

通过“反馈助手”通知苹果后,看来这是IOS 10中引入的一个错误,但连续三个版本的IOS都未注意到该错误。

在使用IOS 13 beta 5(17A5547d)测试之后,该问题没有出现。

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