如果你的程序需要提供不同语言的版本,比如中文和英文,那么你可能需要使用一种简便的方法来完成国际化。
这里介绍一种使用资源文件来完成国际化的方法,具体步骤如下:
- 在
VS
中新建一个WinForm
类型的项目 - 打开
Resources.resx
文件,如果VS
没有自动生成该文件的话可以自己手动创建一个 - 在该资源文件中新增一个
FormCaption
的字符串资源,设置值为你好世界
- 新建一个名为
Resources.en-US.resx
的资源文件,确保该文件位于Properties
目录下 - 打开该资源文件,新增一个
FormCaption
的字符串资源,设置值为Hello World
- 打开
Form1.cs
文件,在其构造函数中设置Form
标题为刚新建的字符串资源Text = Resources.FormCaption
- 编译、运行项目,可以看到窗口标题为:你好世界。打开项目生成目录,可看到生成了一个名为 en-US 的文件夹,里面包含一个类似 WindowsFormsApp3.resources.dll 的资源文件
- 打开
Program.cs
文件,在Main
方法最开头增加如下代码:Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
- 再次编译、运行项目,发现窗口标题变为:Hello World,国际化工作完成。
- 可以尝试将 en-US 改为 zh,发现标题又变回中文了。
补充说明
一定要确保所有资源文件位于
Properties
目录下,我开始没放那里,一直不成功只要在要国际化的窗口显示之前调用
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
即可实现显示指定的语言-
还可使用
Resource.Embedder
将资源文件(Satellite Assemblies
)嵌入主程序集,这样在项目生成目录就不会生成en-US
等文件夹了,并且发布的时候也不需要这些文件夹。需要说明的是该库只对
.NetFramework 4.0
以上的项目生效。该库可通过
Nuget
添加,Github 主页为:https://github.com/MarcStan/Resource.Embedder
-- 完成于 2019/08/29 17:19:02