问题:
我需要检索默认WP8语音识别服务的语言+区域代码。在手机GUI中,这是“语音” - >“语音语言”。如何以编程方式获取此属性?
注意:AppResources.ResourceLanguage或AppResources.Culture不提供我需要的属性,因为它们是“语言+区域”背后的值 - >仅限“手机语言”。
背景:
我已成功使用我的WP8应用程序使用英语(en-US)VoiceCommandDefinition.xml(VCD.xml)文件。将语言识别与特定于语言的VCD.xml用于英语以外的语言时会出现问题。如果手机上的“语音” - >“语音语言”属性与VCD.xml上的“lang”值不完全匹配,则无法使用任何应用程序的语音命令。
要使语音识别工作,因此我真的需要在加载时动态更改我的VCD.xml中的'lang'属性,以便我可以使es-US看起来像es-MX作为尽力而为的替代语言命令-组。仅当VCD.xml上的此值与“语音”中的值匹配时 - >“语言”才会使应用程序对应用程序的语音命令加载并可用。
注意:手机上的“语言+区域” - >“电话语言”设置仅确定使用应用程序名称的哪个发音而不是实际命令。示例,“语言+区域” - >“手机语言”和VCD.xml“lang”属性=“es-US”而“语音” - >“语言语言”=“es-MX”不会导致应用程序语音命令出现因为区域不匹配。重要的是'Speech' - >'Speech language'属性,我需要在运行时以编程方式访问它。
研究来源:
在提交此问题以及任何似乎相关的Stackoverflow或MSDN论坛页面之前,我阅读了与http://msdn.microsoft.com/en-us/library/windows/apps/jj207021%28v=vs.105%29.aspx(以及其他)相关联的页面。
如果您能提供,请感谢您的帮助。
P.S。我也已将此问题发布到Microsoft Windows Phone 8 Develpoment Forum,但没有相关答案,所以如果你在这里和那里回答我会在两个地方投票给你! :-)
答案 0 :(得分:1)
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
}
希望这有帮助。