Vb.net 本地化Windows窗体
我正在从事一个项目,该项目涉及大量Windows窗体的本地化 我们正在使用TableLayoutPanel控件处理布局,它工作得很好 我们遇到的一个突出问题是,当我们将Form.Localizable属性设置为True时,我们最终不得不为每种语言的每个表单管理一个.resx文件。如果.resx文件只包含本地化文本,但也包含表单的大量布局数据,那就好了 有没有一种方法可以将可本地化的文本元素从控件布局信息中分离出来,而控件布局信息在VisualStudioIDE中仍然有效 我注意到我可以修改表单的设计器文件以查看另一个资源文件,但当我使用表单设计器时,这些更改将被删除: ' 'Label1 ' Me.Label1.AutoSize = True Me.Label1.Dock = System.Windows.Forms.DockStyle.Top Me.Label1.Location = New System.Drawing.Point(3, 0) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(61, 13) Me.Label1.TabIndex = 1 Me.Label1.Text = My.Resources.ResourceManager.GetString("Form1_Label1_Text") ' “标签1 ' Me.Label1.AutoSize=True Me.Label1.Dock=System.Windows.Forms.DockStyle.Top Me.Label1.Location=新系统.图纸.点(3,0) Me.Label1.Name=“Label1” Me.Label1.Size=新系统.图纸.尺寸(61,13) Me.Label1.TabIndex=1 Me.Label1.Text=My.Resources.ResourceManager.GetString(“Form1\u Label1\u Text”)Vb.net 本地化Windows窗体,vb.net,winforms,localization,Vb.net,Winforms,Localization,我正在从事一个项目,该项目涉及大量Windows窗体的本地化 我们正在使用TableLayoutPanel控件处理布局,它工作得很好 我们遇到的一个突出问题是,当我们将Form.Localizable属性设置为True时,我们最终不得不为每种语言的每个表单管理一个.resx文件。如果.resx文件只包含本地化文本,但也包含表单的大量布局数据,那就好了 有没有一种方法可以将可本地化的文本元素从控件布局信息中分离出来,而控件布局信息在VisualStudioIDE中仍然有效 我注意到我可以修改表单的
您可以将文件作为资源,因此这是您应该能够完成的,因为它在运行时不会更改,只能从您所说的内容进行访问。例如,可能是包含语言条目和翻译文本的xml文件<代码>正常。在运行时,您可以决定加载哪个语言节点
<Languages>
<Language name="Spanish">
<Entry key="Yes">Si</Entry>
硅
在我最后一次工作的地方,我们使用了xml文件,每种语言对应一个xml文件,这些文件与安装捆绑在一起。在加载解决方案时,我们将所需的文件加载到一个全局哈希表中,并以这种方式设置每一位文本。也许有一个更为理想的解决方案,但也许这方面的东西可以帮助你<代码>哈希表(“successfulSaveMsg”)将返回“您已成功保存了您的小部件”。例如。我从未找到对此我完全满意的答案。但这就是我最终实施的解决方案:
Form.Localizable=false
,因为我不想维护所有相同的.resx文件LocalizeComponent()
函数,并在InitializeComponent()函数之后立即从构造函数调用它,如下所示:
感谢所有不辞辛劳回答问题的人。我很感激!我不知道你在回答自己的问题时应该怎么做,把它标记为“已回答”,所以如果有人能指出这一点而不会把我烧得太厉害,那我将不胜感激。好吧,我从来没有真正找到一个完全满意的答案来回答这个问题。但我提出了一个最不冒犯我的解决方案,我将在下面详细介绍。 Public Class Form1 Public Sub New() ' This call is required by the Windows Form Designer. InitializeComponent() ' Add any initialization after the InitializeComponent() call. LocalizeComponent() End Sub Private Sub LocalizeComponent() ' Localizes all the ui elements from a common Resource Me.SuspendLayout() Me.cmdOK.Text = My.Resources.ResourceManager.GetString("cmdOKTextOK") Me.cmdCancel.Text = My.Resources.ResourceManager.GetString("cmdCancelTextCancel") Me.cmdApply.Text = My.Resources.ResourceManager.GetString("cmdApplyTextApply") Me.ResumeLayout(False) End Sub End Class