查找语音(语音命令)语言+地区/文化设置



问题

我需要检索默认WP8语音识别服务的语言+地区代码。在手机GUI中,它位于"语音"->"语音语言"下。如何以编程方式获取此属性?

注意:AppResources.ResourceLanguage或AppResources.Culture不提供我需要的属性,因为它们只是"语言+地区"->"电话语言"后面的值。

背景

我已经成功地在WP8应用程序中使用了英语(en-US)VoiceCommandDefinition.xml(VCD.xml)文件。将语音识别与英语以外的语言特定的VCD.xml一起使用时会出现问题。如果手机上的"Speech"->"Speech language"属性与VCD.xml上的"lang"值不完全匹配,则应用程序的语音命令将不可用。

因此,为了让语音识别发挥作用,我真的需要在加载时动态更改VCD.xml中的"lang"属性,这样我就可以让es US看起来像es MX,作为一个尽最大努力的替代语言命令集。只有当VCD.xml上的此值与"Speech"->"Speech language"中的值匹配时,应用程序对应用程序的语音命令才会加载并可用。

注意:手机上的"语言+地区"->"手机语言"设置仅决定使用的是应用程序名称的发音,而不是实际命令。例如,"Language+Region"->"Phone Language"和VCD.xml"lang"attribute="es US",而"Speech"->"Speech Language"="es MX"由于区域不匹配而导致不显示应用程序语音命令。重要的是"Speech"->"Speech language"属性,我需要在运行时以编程方式访问它。

研究来源

我阅读了与http://msdn.microsoft.com/en-us/library/windows/apps/jj207021%28v=vs.105%29.aspx在提交这个问题以及任何相关的Stackoverflow或MSDN论坛页面之前。

如果你能提供的话,谢谢你的帮助。

附言:我也把这个问题发布到了微软Windows Phone 8开发论坛上,但还没有相关的答案,所以如果你在这里和那里回答,我会在两个地方投票给你!:-)

string langSetOnPhone = new Windows.Phone.Speech.Synthesis.SpeechSynthesizer().GetVoice().Language;
if (!string.IsNullOrEmpty(langSetOnPhone) && langSetOnPhone == "en-US")
{
   //Do your work here
}
else
{
   //Show relavant message
}

希望这能有所帮助。

最新更新