假设我们有一个Windows Form,Form1,我们为其设置了一个图标。 Visual Studio将图标存储在Form1.resx($ this.Icon)中。
现在我们决定将应用程序本地化为N种语言,因此我们将Localizable设置为True,我们从语言选项中选择第一种语言,我们翻译文本并继续使用下一种语言重复该过程(选择另一种语言并翻译)最多为N.结果将是N .resx文件,其中包含带有原始图标的$ this.Icon条目。
然后我们意识到我们想要更新表单图标,因此我们将语言设置为"(默认)"我们设置了新图标。令我们惊讶的是,我们发现N .resx文件没有更新。
我们是否必须手动更新N .resx文件?有类似级联更新的东西吗?在这种情况下,你会做什么来避免更新N个图标?
答案 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中设置它,它将显示每种语言。然后,您可以在不同的资源文件中覆盖它。