Vb.net 多语言和资源文件

Vb.net 多语言和资源文件,vb.net,resx,multilingual,Vb.net,Resx,Multilingual,我有一个关于创建多语言应用程序和使用资源文件的问题。我会解释我做了什么,我希望最终产品是什么样子 我在VB.Net中使用VisualStudio2008进行此操作 创建一个新项目后,我向项目中添加了一个资源文件(Add->new Item,Selected resource file,命名为Resource1.resx) 然后我双击了资源文件,并能够添加一些名称和值。比如说, 名称–lblFirstName,值–John 名称–lblLastName,值–史密斯 在我的表单上,我有两个标签:Fi

我有一个关于创建多语言应用程序和使用资源文件的问题。我会解释我做了什么,我希望最终产品是什么样子

我在VB.Net中使用VisualStudio2008进行此操作

创建一个新项目后,我向项目中添加了一个资源文件(Add->new Item,Selected resource file,命名为Resource1.resx)

然后我双击了资源文件,并能够添加一些名称和值。比如说,

名称–lblFirstName,值–John 名称–lblLastName,值–史密斯

在我的表单上,我有两个标签:FirstName和LastName

在代码中,我添加了

FirstName.Text = My.Resources.Resource1.lblFirstName
LastName.Text = My.Resources.Resource1.lblLastName 
如果我运行这段代码,它可以正常工作。约翰和史密斯在标签上

现在回答我的问题。比如说,标签(按钮、菜单项等)实际上是不同语言中的不同单词,而不是名字和姓氏。我想要的是

英语文本 SpanishText.resx GermanText.resx

每个资源文件将包含相同的名称,只是不同的值。根据用户(从菜单)选择的语言,如何获取要使用的匹配资源文件

基本上我想要的是

FirstName.Text = My.Resources.<Language Specific Resource File>.lblFirstName
FirstName.Text=My.Resources..lblFirstName
这样的事情可能吗?这是一个可以接受的方法吗?有更好的方法吗


如有任何提示或建议,将不胜感激。我经常检查是否有后续问题,或者是否需要提供更多信息。

构建.NET平台时考虑到了本地化。在当前文化的基础上,已经有一种天生的机制来本地化程序集和资源。以下是一些入门链接,您在尝试推出自己的产品之前应该先阅读这些链接:



比方说,你有3种语言,你可以这样做:

If LanguageChanger<change this to the way you let people change languages> = "English" Then
Language = My.Resources.EnglishText 
else if LanguageChanger = "Spanish" Then 
Language = My.Resources.SpanishText
else if LanguageChanger = "German" Then 
Language = My.Resources.GermanText
End if
我刚刚在这个表单中完成了这项工作,它没有经过测试,如果它不起作用,那么很抱歉

Imports System.Globalization
Imports System.Resources

Public Class Form1
    Public rm As Resources.ResourceManager

    Private Property CultureInfo As CultureInfo
    Public Function getRMValue(ByVal strValue As String)
        Dim strLanguage As String

        If IsNothing(rm) Then
            strLanguage = CultureInfo.CurrentCulture.ToString.ToUpper.Substring(0, 2)
            If strLanguage = "EN" Then
                rm = My.Resources.English.ResourceManager
            Else
                rm = My.Resources.Turkce.ResourceManager
            End If
        End If
        getRMValue = rm.GetString(strValue)
    End Function
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    End Sub
    Private Sub btnBye_Click(sender As Object, e As EventArgs) Handles btnBye.Click
        MessageBox.Show(getRMValue("messagebox"))

    End Sub
End Class

欢迎使用堆栈溢出!通常情况下,如果您提供简短的描述,即使是简单的回答,也会收到更好的答案。@joel谢谢。这可能是一个很好的答案,因为这是“最”详细的。不幸的是,我不知道如何从这里开始,如何使用资源数据,因此这个答案基本上是无用的。因此,我呼吁艾哈迈特,请更新您的答案,以便更清楚地了解正在发生的事情以及如何从这里开始,如果您想提供帮助的话。
Imports System.Globalization
Imports System.Resources

Public Class Form1
    Public rm As Resources.ResourceManager

    Private Property CultureInfo As CultureInfo
    Public Function getRMValue(ByVal strValue As String)
        Dim strLanguage As String

        If IsNothing(rm) Then
            strLanguage = CultureInfo.CurrentCulture.ToString.ToUpper.Substring(0, 2)
            If strLanguage = "EN" Then
                rm = My.Resources.English.ResourceManager
            Else
                rm = My.Resources.Turkce.ResourceManager
            End If
        End If
        getRMValue = rm.GetString(strValue)
    End Function
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    End Sub
    Private Sub btnBye_Click(sender As Object, e As EventArgs) Handles btnBye.Click
        MessageBox.Show(getRMValue("messagebox"))

    End Sub
End Class