下面的代码在Chrome桌面中工作正常,但是在Chrome Android中,它没有使用指定的msg.lang。法国文本正在读出,就像是英语,在美国口音中。我的手机的默认语言是英语,这有关系吗?我希望该页面以选定的语言读取,无论用户在手机上的设置如何。
const msg = new SpeechSynthesisUtterance();
msg.volume = 1;
msg.text = text; // these words are in French
msg.lang = 'fr-FR';
speechSynthesis.speak(msg);
将破折号更改为下划线修复,即从'fr-fr'到'fr_fr'。
文档https://w3c.github.io/speech-api/#tts-section指出,代码应为" BCP 47",该代码指定dash。
但是,本文指出,在某些移动实现中,使用了下划线:https://manu.ninja/using-the-speech-synthesnession-interface-of-the-web-speech-api
因此,将其定为下划线。而且下划线也可以在桌面镀铬上工作。
我不会将此答案标记为接受的,以防有更好的答案。
我相信这是Chrome的错误。我的代码与原始海报相似,该海报在Firefox中正常工作。不幸的是,似乎没有一种可靠的修复方法。