Windows窗体中图像资源的本地化

时间:2011-12-05 15:30:43

标签: c# winforms image button localization

我正在使用C#3.5和Windows Forms(和Telerik components如果重要的话)。如何使用三个(或N ..)不同的语言使用三个不同的图片(一个用于空闲,一个用于鼠标悬停,一个用于点击)的按钮?

当我添加资源图像(例如,JPEG文件)时,我可以使用资源管理器来获取它,一切都很棒。我还可以添加另一个图像(,同时使用不同的名称),然后更改文件的语言并更改图片。

现在的问题是: 如果我不能给它们相同的名称(例如resource.resx中的a.jpg,资源-foo.resx中的a.jpg等),如何将每种语言的按钮图像更改为正确的图像。

我不认为检查当前文化的代码是否现实,然后通过使用OnMouseEnter / Leaves / Down中的图片资源名称实现三张图片之间的切换。

由于普通应用程序有100多个按钮,因此必须有一种简单易用的方法,我无法想到(或找到......)......

2 个答案:

答案 0 :(得分:3)

.NET中的ResourceManager不仅可以进行字符串本地化。它可以提供任何类型的本地化二进制内容,包括图像。这意味着您永远不需要编写逻辑来选择图像的相关本地化版本,甚至不需要操作图像文件路径。您只需要求ResourceManager为您提供所需的图像,它将为您提供该图像的相应语言版本(取决于当前的UICulture)。

Visual Studio可以轻松地将图像添加到资源文件中。资源编辑器的左上角有一个按钮(见下文),可以让您查看resx文件中包含的不同类型的资源,这些资源可以是字符串(我们大多数人都熟悉的最常见的选择),图像和更多。

enter image description here

MSDN link解释了整个事情。以下是我从中获取的一个示例,其中显示了如何从资源中检索本地化图像:

rm = new ResourceManager("Images", this.GetType().Assembly);
pictureBox1.Image = (System.Drawing.Image)rm.GetObject("flag");

答案 1 :(得分:0)

我会使用资源文件。他们的工作方式如下:“如果使用这种语言,加载'Button1A.jpg',如果使用其他语言,加载'Button1B.jpg'”等等。我不确定语法或如何实现它们,但我我非常确定你可以在某个地方指定语言/语言环境(或者根据Windows设置为你指定),你只需提供哪个图像就可以使用,它将为你完成剩下的工作。

绝对查找资源文件。

我认为资源文件的默认用途是字符串。因此,它们应该用于加载不同的翻译(本地化)字符串,而不是加载不同的图像。但是,不是这样,只需提供不同的文件路径(不同图像的文件路径)来代替字符串。

希望我有道理,抱歉没有举例。