本地化器
一个简单的组件,用于帮助控件的本地化。
引言
我最近一直在深入研究一些全球化 (或者对我们英国人来说是全球化) ,并且特别不喜欢 .NET 悄悄地让你拆分你的资源的方式。
也许我最好解释一下。 Windows Forms 设计器包括对本地化的良好支持,您可以通过将 Form
的 Localizable
属性设置为 true
并更改 Language
属性来利用这一点,然后简单地输入即可。但是,如果您需要在您的程序中包含单独的消息,您必须创建一个单独的资源文件并从那里加载内容。
现在我假设 (阅读:我没有检查) .NET 在编译应用程序时将所有这些资源放在一起,但是假设您希望其他人为您翻译内容,您必须管理多个文件:一个用于您的自定义消息,一个用于应用程序中的每个表单。
总而言之,我想要一个解决方案,在该方案中,我只需要管理每个支持语言的一个资源文件。
本地化器
Localizer
是一个简单的 Component
,它实现了 IExtenderProvider
接口。它提供了一个名为 ResourceID
的属性。该组件只有一个重要的属性 ResourceManager
。这可以设置为指向您项目资源管理器的实例,无论它在哪里。
通过设置 ResourceManager
属性,您可以使 Localizer
根据每个控件的 ResourceID
查找本地化字符串,并设置该控件的 Text
属性。
示例

要使用 Localizer
,您可以简单地添加对该程序集的引用,并将该组件拖放到表单上。完成后,您必须在某个地方设置 ResourceManager
属性。一旦完成,运行时就不再需要任何操作,因为更改 ResourceManager
会自动刷新所有 Control.Text
属性。
您可以为要本地化的每个控件分配一个 ResourceID
。注意:如果 ResourceID
是一个空字符串,那么文本将始终保留在设计器或代码中指定的文本。
在 VS2005 中,将本地化字符串添加到项目的最简单方法可能是简单地向项目添加更多的 .resx
文件,并按照屏幕截图中的模式命名它们。然后,Visual Studio 将执行必要的操作以编译和嵌入这些资源。
最后一步是将每个 ResourceID
的翻译后的字符串/消息放入每个 .resx
文件中。
演示应用程序
包含了一个简单的演示应用程序,该应用程序会根据 CurrentUICulture
动态更改控件的文本。有一个文本框可以在应用程序运行时更改此区域性。
摘要
像往常一样,我欢迎任何关于改进、错误修复以及我们在日常生活中作为开发人员必须处理的常规事项的建议。
历史
- 2007年7月16日:初始帖子