Vb.net 如何从FileVersionInfo获取基于ISO的语言字符串?

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等。另一个唯一标识符,如代码

我在VB.net 2010中有一个windows窗体,它需要读取remote.exe的语言字符串

通常,这可以通过

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对此没有什么帮助。