C#多语言界面的设置

对于C#中的Winform程序,项目会自动在properties文件夹下添加Resources.resx资源文件,并创建一个Resources类来管理资源。

当我们想让界面有多种语言时,其实就是让界面的菜单或是按钮显示不同的文字,即设置它们的Text属性,为此有2种方法:

 

第一种,将所有的不同语言的字符串放在同一个Resources.resx资源文件中,不同的语言用不同的前缀标识,如enFileName为 “file",

而zhCHSFileName则为 ”文件“,然后在要切换为英语的地方如下设置:fileStripMenuItem.Text = rm.GetString("enFileName");

而在要切换为中文的地方这样设置:fileStripMenuItem.Text = rm.GetString("zhCHSFileName");

这样的缺点是重复的类似代码很多,特别是语言种类很多或是需要不同语言的地方很多时。

 

第二种,将不同的语言的字符串放在不同的资源文件中,这时也分为两中情况:

1)创建多个Resources类,如Resource1、Resources2等,去分别对应不同的语言字符串资源,这些资源文件将作为嵌入的资源直接

写入exe可执行文件中,这样导致了不需要的其他语言的字符串也加载了,浪费内存。

2)对应于Form1类(继承自Form类)其有一个默认的Form1.resx资源文件,这时我们可以在与同样Form1.resx的位置按规定的命名

规则添加其他语言的资源文件,如Form1.zh-CN.resx、Form1.en-US.resx,

之后我们可以在应用程序的debug目录下看到zh-CN和

en-US文件夹,并且文件夹下都有同一个已编译的资源文件的dll文件:WindowsFormsTest.resources.dll。之后在程序中要改变界面

语言的地方写如下的代码:

可以看到这里需要用Assembly.LoadFrom函数,而这个函数有一个缺点,就是

如果已加载一个具有相同标识的程序集,则即使指定了不同的路径,LoadFrom 仍返回已加载的程序集,即重复加载了。而且这种动态加载

可以有点慢。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页