Vb.net 如何从FileVersionInfo获取基于ISO的语言字符串?
我在VB.net 2010中有一个windows窗体,它需要读取remote.exe的语言字符串 通常,这可以通过Vb.net 如何从FileVersionInfo获取基于ISO的语言字符串?,vb.net,winforms,vb.net-2010,Vb.net,Winforms,Vb.net 2010,我在VB.net 2010中有一个windows窗体,它需要读取remote.exe的语言字符串 通常,这可以通过 oFileInfo = FileVersionInfo.GetVersionInfo("path to .exe here") Dim sMyLanguage = oFileInfo.Language 不幸的是,这会在德语窗口上返回类似“English”、“französisch”的内容,这对我来说绝对没有用 最好是基于ISO的代码,如EN、DE、FR等。另一个唯一标识符,如代码
oFileInfo = FileVersionInfo.GetVersionInfo("path to .exe here")
Dim sMyLanguage = oFileInfo.Language
不幸的是,这会在德语窗口上返回类似“English”、“französisch”的内容,这对我来说绝对没有用
最好是基于ISO的代码,如EN、DE、FR等。另一个唯一标识符,如代码页号或类似的东西也可以
全球化似乎也没有将语言字符串映射到有用的东西
你知道如何从我的操作系统的语言中分离出这样的语言标识吗?目前,我的想法是使用一个.csv文件,其中包含大量的翻译,听起来不太合适。好的,我找到了一个解决方案: 在System.Globalization中,没有完全直接的映射,但正如在中一样,只列出了大约140种语言,因此我创建了一个带有区域性ID的.csv文件,返回字符串,并使用一个简单的For循环进行循环
For i = 1 To gsLanguages.Count - 1
Try
oLang = New System.Globalization.CultureInfo(CInt(gsLanguages(i).Split(";")(1)), True)
If oLang.DisplayName.ToLower.StartsWith(sLangString) Then
sLanguage = gsLanguages(i).Split(";")(0)
Exit For
End If
Catch ex As Exception
End Try
Next
毫无疑问,这可能不是最好的解决方案。但在我的测试中,它有很高的命中率,所以这对我来说已经足够好了。另一个想法是以某种方式访问remote.exe的资源表(如使用ResourceHacker、ResEdit、Restorator等工具),但似乎.NET没有访问外部资源的“内置”方式。使用My.Resources对此没有什么帮助。