【问题标题】:Multi-Language and Resource Files多语言和资源文件
【发布时间】:2009-08-27 17:39:17
【问题描述】:

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

我在 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 

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

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

EnglishText.resx 西班牙语文本.resx GermanText.resx

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

基本上我想要的是

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

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

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

【问题讨论】:

    标签: vb.net resx multilingual


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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

      【讨论】:

      • 欢迎来到 Stack Overflow!如果您包含简短的描述,通常会更好地接收答案,即使是简单的答案。
      • @joel 谢谢。这可能是一个很好的答案,因为这是“最”详细的。不幸的是,我不知道如何从这里开始以及如何使用资源数据,因此这个答案几乎没有用。所以我呼吁艾哈迈德,请更新你的答案,以便更清楚发生了什么以及如何从这里开始,如果你想提供帮助。
      【解决方案3】:

      假设你有 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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多