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

How to use windows forms resource files for localizing dynamic data

我正在开发一个使用 Window Forms 制作的应用程序。为了本地化我所有的标签、ToolStripMenuItems、按钮等,我使用 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);
        }

这似乎适用于所有不变的标签等。但是我确实有更改的条目。例如,我可能有一个下拉组合框,其中填充了条目:"Apple"、"Banana"、"Orange"。或者我可能有一些错误消息:"Missing Input"、"Cannot find xml file" 只是有时会显示。现在我想也许对于错误消息,我可以只使用标签并根据是否需要显示它们来选择性地更改它们的可见性,但是对于下拉组合框,这些条目可能会根据用户加载的文件而改变。

我想知道,有没有办法将这些条目存储在 resx 文件中,然后从我的代码中访问它们。我尝试打开 resx 文件并手动添加它们(即不使用 winres)但尝试这样做导致警告:

您正在尝试编辑属于另一个项目项(例如窗体或控件)的资源文件。编辑此项可能会损坏项目项,您必须手动恢复它。此外,如果对项目项进行进一步更改,对该资源文件所做的更改可能会丢失。 您确定要编辑此文件吗?

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

好的,事实证明我已经发现了如何实现我正在寻找的东西。好的,从 SO post 我可以通过代码访问存储在文件 Resource.resx 中的任何字符串:

myLabel.Text = Properties.Resources.MissingController;

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

因此,我需要做的就是添加额外的资源文件,例如德语的 Resource.de-DE.resx 并填写对应的翻译(即资源文件中的值)键(即资源文件中的名称)。

Resources.resx 文件如下所示:

和 Resources.de-DE.resx 看起来像:

如问题中所述,我已经创建了一些资源文件来翻译我的表格,但我使用的是 winres。虽然它们位于我的 Main.cs [Design] 文件下,但 Resources.resx 和 Resources.de-de.resx 位于 Properties 下。因为我曾使用 winres 来制作我的 resx 文件,所以我认为这意味着我不应该手动编辑它们,因此它给出了警告??我对此还不是 100% 确定。

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