无需API密钥与多语言包,Excel VBA如何检测文本外语语种?
基于VBA的无依赖语种检测方案
以下是几个无需API密钥、无需额外安装语言包的VBA解决方案:
1. 调用Google Translate匿名检测接口
通过构造Google Translate的内部检测请求,可直接获取语种代码,无需API密钥。该方案需联网,适合短文本检测:
Function DetectLanguage_Google(text As String) As String Dim xmlHttp As Object Dim response As String Dim jsonArr As Variant Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0") ' 构造检测请求,dt=ld表示仅返回语种检测结果 xmlHttp.Open "GET", "https://translate.googleapis.com/translate_a/single?client=gtx&dt=ld&q=" & URLEncode(text), False xmlHttp.Send response = xmlHttp.responseText ' 解析JSON数组(返回格式为[[["<语种代码>"]]]) jsonArr = Split(Split(response, "[[["")(1), """]]]")(0) DetectLanguage_Google = jsonArr Set xmlHttp = Nothing End Function ' 辅助函数:URL编码 Function URLEncode(text As String) As String URLEncode = WorksheetFunction.EncodeURL(text) End Function
2. 利用Windows系统MLang组件(离线检测)
Windows自带的MLang多语言支持库可本地检测语种,无需联网和额外安装:
Function DetectLanguage_MLang(text As String) As String Dim mlang As Object Dim langId As Long Dim langCode As String Set mlang = CreateObject("MLanguage.MultiLanguage.2") ' 检测语种ID mlang.DetectString 0, text, Len(text), langId ' 将语种ID转换为ISO代码 mlang.GetRfc1766Info langId, langCode DetectLanguage_MLang = Left(langCode, 2) '提取两位语种代码(如en、zh) Set mlang = Nothing End Function
注意:该组件对部分小语种的检测准确率可能略低于在线接口,但胜在完全离线。
3. 调用Bing Translate匿名检测接口
通过构造Bing的翻译请求,解析返回结果中的语种信息:
Function DetectLanguage_Bing(text As String) As String Dim xmlHttp As Object Dim response As String Dim jsonStart As Integer Dim jsonEnd As Integer Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0") xmlHttp.Open "POST", "https://www.bing.com/ttranslatev3?isVertical=1&IG=ABC123&IID=translator.5036.1", False xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" ' 构造请求体 xmlHttp.Send "text=" & URLEncode(text) & "&from=&to=en" response = xmlHttp.responseText ' 解析JSON中的detectedLanguage jsonStart = InStr(response, """detectedLanguage"":{""language"":""") + 31 jsonEnd = InStr(jsonStart, response, """") DetectLanguage_Bing = Mid(response, jsonStart, jsonEnd - jsonStart) Set xmlHttp = Nothing End Function
注意:Bing的接口参数可能会不定期调整,若失效需检查请求参数格式。
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

