HTML5语音合成不尊重PC计算机中的语言环境

时间:2014-10-10 21:33:57

标签: html5 speech-synthesis

我的网络应用使用Speech Synthesis API。我的问题很简单:我设置了话语及其语言环境。在(我的)MAC计算机上,它可以工作,即。说出所请求的语言环境。在Windows计算机(我试过的)上,它总是使用英语。

var mUtterance=new SpeechSynthesisUtterance(),
mUtterance.text="<text in spanish for example>";
mUtterance.lang="es";
window.speechSynthesis && window.speechSynthesis.speak(mUtterance);

为什么会发生这种情况?

我在两个平台上都使用最新的chrome版本(刚更新)。

1 个答案:

答案 0 :(得分:1)

我找到了原因......

如果我将区域设置指定为完整代码 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或其他内容。