如何使用Windows表单资源文件来本地化动态数据

时间:2018-11-29 16:57:53

标签: c# windows-forms-designer resx

我有一个正在使用Windows窗体制作的应用程序。为了本地化我所有的Labels,ToolStripMenuItems,Buttons等,我使用resx资源文件。特别是为了本地化我的德语应用程序,我以winres打开Main.en-CA.resx文件。然后,我遍历表格中找到的所有术语,并将其更改为德语翻译。然后,我将文件保存到Main.de-DE.resx。我现在有一个Main.en-CA.resx文件和Main.de-DE.resx文件。然后,在我的代码中,我只需要将当前区域性更改为所需的任何语言,并将更改应用于所有标签,控件,按钮等。例如:

        System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(language);

        // Must re-apply resources after changing the culture
        System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main));

        resources.ApplyResources(this, "$this");

        foreach (Control c in this.Controls)
        {
            resources.ApplyResources(c, c.Name);
        }

这似乎对所有不变的标签等效果很好。但是,我确实有更改的条目。例如,我可能有一个下拉菜单ComboBox,其中填充了以下条目:“ Apple”,“ Banana”,“ Orange”。或者,我可能会出现一些错误消息:“缺少输入”,“找不到xml文件”,有时仅显示这些消息。现在,我想对于错误消息,我可能只是具有标签,并根据是否需要显示标签来有选择地更改它们的可见性,但是对于下拉菜单ComboBox,这些条目可能会根据用户加载的文件而改变。

那我想知道,有没有一种方法可以将这些条目存储在resx文件中,然后从我的代码中访问它们。我尝试打开resx文件并手动添加它们(即不使用winres),但是尝试执行此操作会导致警告:

您正在尝试编辑作为另一个项目项(如窗体或控件)一部分的资源文件。编辑该项目可能会损坏项目项目,因此您必须手工恢复它。此外,如果对项目项进行进一步更改,则对此资源文件所做的更改可能会丢失。 您真的要编辑此文件吗?

这听起来像是个坏主意,所以我没有再尝试了。另外,我不确定如何手动访问文件中的条款。我对Windows窗体和资源文件非常陌生(这是我第一次使用它们),因此我意识到这可能是一个简单的问题,但是我很难找到有关如何准确执行此操作的信息。

1 个答案:

答案 0 :(得分:0)

好吧,事实证明,我发现了如何实现自己想要的东西。从SO post好的,我可以通过以下代码访问存储在Resource.resx文件中的所有字符串:

myLabel.Text = Properties.Resources.MissingController;

其中MissingController是文件Resources.resx中的键(即名称)。

因此,我所要做的就是添加其他资源文件(例如德语),例如Resource.de-DE.resx,并填写与相同键(即资源文件中的名称)。

Resources.resx文件如下所示: enter image description here

,Resources.de-DE.resx看起来像: enter image description here

正如问题中提到的,我已经创建了一些资源文件来翻译表单,但是我使用了winres。它们位于我的Main.cs [Design]文件下,而Resources.resx和Resources.de-de.resx位于“属性”下。因为我使用winres来制作resx文件,所以我认为这不应该手动编辑它们,因此会发出警告?我对此还不是100%肯定。

无论如何,现在我都可以手动向我的Resource.resx文件中添加术语,并为不同的语言创建该文件的不同版本,并且本地化将起作用。右键单击“属性”并转到“添加”->“新建项目”,然后选择“资源”,如果您没有看到“资源”文件类型为选项(就像我一样),则可能意味着您需要添加未获得的开发工具与您的Visual Studio版本一起安装。您可以通过再次运行Visual Studio安装程序并单击“修改”并添加.NET开发工具来实现此目的。

enter image description here enter image description here