.resx表单图标级联更新

时间:2013-03-11 14:05:25

标签: c# .net winforms localization

假设我们有一个Windows Form,Form1,我们为其设置了一个图标。 Visual Studio将图标存储在Form1.resx($ this.Icon)中。

现在我们决定将应用程序本地化为N种语言,因此我们将Localizable设置为True,我们从语言选项中选择第一种语言,我们翻译文本并继续使用下一种语言重复该过程(选择另一种语言并翻译)最多为N.结果将是N .resx文件,其中包含带有原始图标的$ this.Icon条目。

然后我们意识到我们想要更新表单图标,因此我们将语言设置为"(默认)"我们设置了新图标。令我们惊讶的是,我们发现N .resx文件没有更新。

我们是否必须手动更新N .resx文件?有类似级联更新的东西吗?在这种情况下,你会做什么来避免更新N个图标?

2 个答案:

答案 0 :(得分:0)

我刚刚在我的Program.Main中添加了代码来修改所有解决方案.resx文件以删除Form.Icon。

    try
    {
        string solutionDirPath = @"path\to\solution";
        string[] resxFilePaths = Directory.GetFiles(solutionDirPath, "*.resx", SearchOption.AllDirectories);
        foreach (string resxFilePath in resxFilePaths)
        {
            XDocument xdoc = XDocument.Load(resxFilePath);
            var iconElement = xdoc.Root.Elements("data").SingleOrDefault(el => (string)el.Attribute("name") == "$this.Icon");
            if (iconElement != null)
            {
                iconElement.Remove();
                xdoc.Save(resxFilePath);
            }
        }
    }
    catch (Exception ex)
    {

    }
    finally
    {

    }

我的垃圾箱尺寸减少了近两倍!

对于所有表单,我只会使用我的app可执行文件中的图标

Icon.ExtractAssociatedIcon(Application.ExecutablePath)

答案 1 :(得分:-1)

老实说,没有理由在每个resx中都有相同的图标。

ResX文件基于语言级联,从最特定的语言资源到最少。

如果您删除所有resx文件中的图标(默认设置除外),则始终会使用该图标。

如果您想为特定语言添加不同的图标,只需将不同的图标添加到该resx文件即可。

您可以自己轻松地看到这一点。在表单中添加一个标签,并根据名为“test”的键的值填充它(您可以在代码中调用'GetLocalResourceObject(“test”)来执行此操作。)

将键值对'test' - 'Hello'添加到resx文件中。假设你的resx被称为'foo.resx'。在特定于语言的文件(例如'foo.fr.resx')中添加'test' - 'Bonjour'。如果您使用任何非法语运行您的程序,您将看到“Hello”,但如果您切换到法语,您将看到“Bonjour”。

它与您的图标的工作方式相同 - 您可以在基本resx中设置它,它将显示每种语言。然后,您可以在不同的资源文件中覆盖它。