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