前言
曾经记得在 win 的原生代码编程时代为实现一个多语言界面而绞尽脑汁因此出现了大量的教程都是教你如何让程序实现多语言支持这些实现方法的技术水平参差不齐很难找到好的框架实现在商业程序中NET 时代的到来我们突然发现这一切变得那么简单你只需轻松点击鼠标就可以让你的程序完美实现多语言支持
我不想在这里过多的解释文中出现的概念因为 MSDN 已经为我们提供了完全本地化的技术文档
正文
我用的是 Visual Studio 中的 Visual C#NET 来实现的我设计的这个 Demo 不仅可以自动根据当前区域设置进行本地化的实现还可以手动更改界面语言并且实现自定义资源的本地化 Demo 源码这里下载
请跟随我的步骤来完成
创建名为MultiLanguage的新 Windows 应用程序
在属性窗口中将窗体的 Localizable 属性设置为 true
Language 属性已经设置为 (Default)
将 MainMenuPictureBoxButton 控件从工具箱的Windows 窗体选项卡拖到窗体上然后按照我在 Demo 窗体中对这些控件的布局设计进行设置
将该窗体的 Language 属性设置为中文(中华人民共和国)
重新按照我在 Demo 窗体中对这些控件的中文界面的布局设计进行设置
单击解决方案资源管理器中的显示所有文件按钮
资源文件出现在 Formcs 的下面Formresx 是后备区域性的资源文件它将生成到主程序集中FormzhCNresx 是在中国讲的简体中文的资源文件
分别生成菜单项的 Click 事件按照我在 Demo 中的实现代码添加到事件处理部分
大家主要学习我是如何动态修改界面上所有跟语言相关的元素包括字符串对象(例如PictureBoxImage)
在项目菜单上单击添加新项
在模板框中选择程序集资源文件模板在名称框中键入文件名WinFormStringsresxWinFormStringsresx 文件将包含英语的后备资源每当应用程序找不到更适合于 UI 区域性的资源时就将访问这些资源
该文件被添加到解决方案资源管理器中的项目中并自动在 XML 设计器中以数据视图形式打开
在数据表窗格中选择data
在数据窗格中单击空行并在name列中输入strMessage在value列中输入Hello World
在文件菜单上单击保存 WinFormStringsresx
再执行两次步骤 以创建一个名为WinFormStringszhCNresx的资源文件并且这个文件具有在下表中指定的字符串资源WinFormStringszhCNresx 文件将包含特定于在中国讲的简体中文的资源
资源文件名name value
WinFormStringszhCNresxstrMessage你好!世界
生成 Button 的 Click 事件按照我在 Demo 中的实现代码添加到事件处理部分
这部分大家主要学习如何访问手动添加的资源其目的是为了在你以后编程时生成在对话框和错误信息中出现的可本地化字符串
添加构造函数 Form() 的代码按照我在 Demo 中的代码进行添加
保存和生成解决方案
编译并试着运行
我是用 Release 模式进行编译的在项目目录的 MultiLanguage\bin\Release 下会生成两个子目录zhCHSzhCN里面都有一个叫MultiLanguageresourcesdll的文件分别对应你在窗体中设计的后备区域性的资源文件发布时请随最后的编译程序一起发布不要改变 Bin 目录下的任何目录设置NET Framework 会根据一定规律进行本地化实现原理请参考 MSDN 相应章节