多语言和资源文件

时间:2009-08-27 17:39:17

标签: vb.net resx multilingual

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

我在VB.Net中使用Visual Studio 2008

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

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

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

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

在Code中,我添加了

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

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

现在提出我的问题。比起名字和姓氏而不是标签(按钮,菜单项等)实际上是不同语言中不同的单词。我想要的是拥有像

这样的东西

EnglishText.resx SpanishText.resx GermanText.resx

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

基本上我想要的是

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

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

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

3 个答案:

答案 0 :(得分:2)

.NET平台的构建充分考虑了本地化。已经存在一种基于当前文化的本地化装配和资源的先天机制。以下是您在尝试推销自己之前应阅读的一些入门链接:

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

答案 1 :(得分: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

Resource screenshot

答案 2 :(得分: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

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