我有一个关于创建多语言应用程序和资源文件使用的问题。我将解释我所做的以及我希望最终产品的样子。
我在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
这样的事情可能吗?这是一种可接受的方法吗?有没有更好的方法呢?
任何提示或建议将不胜感激。我经常检查是否有后续问题,或者是否需要提供更多信息。
答案 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
答案 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
我刚刚从这个表单中完成了这个,如果它不起作用,它没有经过测试,很抱歉