You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows UWP如何获取具备语音输入(语音识别)功能的已安装语言列表?

在UWP中获取支持语音识别的已安装语言列表

当然可以实现!你之前用UserProfile.GlobalizationPreferences.Languages拿到的是系统所有已安装语言,不管它们有没有对应的语音识别包,所以得用专门针对语音识别的API来筛选出具备语音输入功能的语言。

实现步骤

1. 配置应用权限

首先要在Package.appxmanifest里添加必要的权限:

  • 勾选麦克风(语音识别需要访问麦克风权限)
  • 可选:勾选Internet客户端(部分云端语音识别功能需要联网支持)

2. 使用SpeechRecognizer的专属API获取支持的语言

UWP提供了Windows.Media.SpeechRecognition.SpeechRecognizer类,它的静态方法GetSupportedLanguageAsync()会返回当前系统中已安装且支持语音识别的语言集合,完美解决你的需求。

VB.NET 示例代码

' 异步获取支持语音识别的语言列表
Async Function GetSupportedSpeechLanguagesAsync() As Task(Of List(Of String))
    Dim supportedLanguages As New List(Of String)()
    Try
        ' 获取所有支持语音识别的Language对象集合
        Dim langCollection = Await Windows.Media.SpeechRecognition.SpeechRecognizer.GetSupportedLanguageAsync()
        
        For Each lang In langCollection
            ' 可以选择只添加语言标签,或者带显示名称的组合文本
            supportedLanguages.Add($"{lang.DisplayName} ({lang.LanguageTag})")
        Next
    Catch ex As Exception
        ' 处理异常情况(比如权限不足、系统版本不支持等)
        Debug.WriteLine($"获取语音识别语言失败:{ex.Message}")
    End Try
    Return supportedLanguages
End Function

' 加载语言到ComboBox
Private Async Sub LoadSpeechRecoLangs()
    Dim speechLangs = Await GetSupportedSpeechLanguagesAsync()
    cboSpeechRecoLang.Items.Clear()
    For Each langText In speechLangs
        cboSpeechRecoLang.Items.Add(langText)
    Next
End Sub

C# 示例代码(可选参考)

// 异步获取支持语音识别的语言列表
async Task<List<string>> GetSupportedSpeechLanguagesAsync()
{
    var supportedLanguages = new List<string>();
    try
    {
        var langCollection = await Windows.Media.SpeechRecognition.SpeechRecognizer.GetSupportedLanguageAsync();
        foreach (var lang in langCollection)
        {
            supportedLanguages.Add($"{lang.DisplayName} ({lang.LanguageTag})");
        }
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine($"获取语音识别语言失败:{ex.Message}");
    }
    return supportedLanguages;
}

// 加载到ComboBox
private async void LoadSpeechRecoLangs()
{
    var speechLangs = await GetSupportedSpeechLanguagesAsync();
    cboSpeechRecoLang.Items.Clear();
    foreach (var langText in speechLangs)
    {
        cboSpeechRecoLang.Items.Add(langText);
    }
}

关键说明

  • 必须在异步方法中调用GetSupportedLanguageAsync(),因为它是异步操作,不能同步执行。
  • 返回的Language对象包含两个常用属性:
    • LanguageTag:标准语言代码(如zh-CN、en-US)
    • DisplayName:用户友好的语言名称(如中文(中华人民共和国))
  • 这个API会自动过滤掉没有安装语音识别包的语言,所以返回的都是当前可用的语音输入语言。

内容的提问来源于stack exchange,提问作者henrikl2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:23:03