我的网络应用程序使用语音合成API。我的问题很简单:我设置了语音和语言环境。在我的MAC电脑上,它能工作.与所请求的地区对话。在Windows计算机(我试过的那些)上,它总是使用英语。
var mUtterance=new SpeechSynthesisUtterance(),
mUtterance.text="<text in spanish for example>";
mUtterance.lang="es";
window.speechSynthesis && window.speechSynthesis.speak(mUtterance);为什么会发生这种事?
我在两个平台上都使用了最新的chrome版本(刚刚更新)。
发布于 2014-10-10 21:52:11
我找到了为什么..。
如果我指定区域设置为完整的代码,es-ES,它就能工作。
看起来Chrome/MAC版本可以为请求的区域设置选择默认变体,而在Chrome/PC版本中,您总是必须指定完整的地区代码(语言+变体)。这使我的生活更加艰难,因为例如西班牙语有几十个变体,如果有人只安装了其中一个变体,您必须显式地选择它,否则引擎将默认为英语:(
我编写了一个小函数来查找给定语言的任何地区变体(第一个找到的):
findLocaleCode=function(lang) {
var voices=window.speechSynthesis.getVoices();
for (var i=0, len=voices.length; i<len; i++) try {
var voice=voices[i];
if (voice.lang.indexOf(lang)==0) return voice.lang;
} catch (e) {}
return null;
};所以我可以:
mUtterance.lang=findLocaleCode("es");它会从语音列表中得到es-ES,es-AR或任何东西。
https://stackoverflow.com/questions/26308363
复制相似问题