代码之家  ›  专栏  ›  技术社区  ›  Nerdy Bunz

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

  •  0
  • Nerdy Bunz  · 技术社区  · 6 年前

    我注意到一个问题,IOS似乎没有将ios10.0或更高版本上emojis的读取(通过AVSpeechSynthesizer)本地化,但是 在iOS9.3或更低版本上似乎做得很好。

    如果你告诉一个设置为英语的AVSpeechSynthesizer通过发送字符串“”,它会说“正常眼睛咧嘴笑”

    当您将synth的语音语言更改为英语以外的语言(例如法语)并发送相同的emoji时,它应该显示“Visage souriant avec des yeux normaux”,这在IOS 9.3或更低版本上是这样的,但在IOS 10.0或更高版本上是这样的, 它只是用法语口音读英文文本(“正常眼睛咧嘴笑的脸”)。

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

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

    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)
        }
    
    }
    
    0 回复  |  直到 6 年前
        1
  •  3
  •   idz    6 年前

    看起来,不管是好是坏,emojis现在是根据用户的首选语言来读取的。如果你在设备上运行它并切换到法语,那么emoji将以法语读出,即使语音合成语音是英语。值得注意的是,有些语言似乎无法读出表情符号。令人惊讶的是,这似乎是真实的日本人。

    所以你能改变它吗?

    嗯,有点,但我不确定它是否得到苹果的批准。您可以在中设置“AppleLanguages”键 UserDefaults.standard 调用UIApplicationMain时 将是一个用来阅读表情符号。这意味着,如果您更改应用程序中的值,则在下次启动应用程序之前,该值不会生效。

        2
  •  1
  •   Nerdy Bunz    5 年前

    更新:这个问题在iOS13.2中似乎已经修复!耶!

    更新:ios13正式发布后,这个问题已经被一个更糟糕的问题所取代( iOS 13 Text To Speech (TTS - AVSpeechSynthesisVoice) crashes for some users after update

    //原职务:

    在通过反馈助手通知苹果之后,这似乎是ios10中引入的一个bug,在连续三个版本的IOS中都没有被注意到。

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

    他们声称,从现在起,这个问题已经得到了明确的解决。

    推荐文章