2

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

我在 VB.Net 中执行此操作并使用 Visual Studio 2008

创建新项目后,我在项目中添加了一个资源文件(Add -> New Item,Selected Resource File,命名为Resource1.resx)。

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

姓名 - lblFirstName,值 - 约翰 姓名 - lblLastName,值 - 史密斯

在我的表单上,我有 2 个标签:名字和姓氏

在代码中,我添加了

FirstName.Text = My.Resources.Resource1.lblFirstName
LastName.Text = My.Resources.Resource1.lblLastName 

如果我运行此代码,它工作正常。约翰和史密斯显示在标签上。

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

英语文本.resx 西班牙语文本.resx 德语文本.resx

每个资源文件将包含相同的名称,只是不同的值。根据选择的语言,由用户(从菜单)决定,我怎样才能获得要使用的匹配资源文件。

基本上我想要的是

FirstName.Text = My.Resources.<Language Specific Resource File>.lblFirstName

这样的事情可能吗?这是一种可接受的方法吗?有没有更好的方法来做到这一点?

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

4

3 回答 3

2

.NET 平台的构建考虑了本地化。已经存在一种基于当前文化对程序集和资源进行本地化的先天机制。在尝试自己动手之前,您应该阅读以下一些入门链接:

http://msdn.microsoft.com/en-us/library/bb398937.aspx
http://msdn.microsoft.com/en-us/goglobal/bb688096.aspx

于 2009-08-27T17:45:48.417 回答
2
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

资源截图

于 2015-07-06T12:41:48.910 回答
0

比方说,你有 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

然后,您可以通过以下方式使用它:

FirstName.Text = Language.lblFirstName

我刚刚从这个表格中完成了这个,它没有经过测试,如果它不起作用很抱歉

于 2012-12-27T18:27:23.670 回答