您的位置:首页 > 编程语言 > C#

Winform下多语言的一种简单实现

2018-02-19 23:13 701 查看

思路:

基于c#的Winform程序,涉及到多语言的资源集中到字符串和图片上,资源保存在资源文件中,针对每一种语言设置一个资源文件,界面上的文字和图片等资源从资源文件中通过ResourceManager来读取并设置到界面上。资源文件的命名与语言名称对应,通过设置程序的语言环境来实现多语言的切换。

资源文件的设置和获取

新建winform程序demo,则在工程目录下有一个子目录Properties,其中有两个文件Resources.Designer.cs和Resources.resx。在其中添加一个字符串str1,值设定为"你好"。
通过ResourceManager获取该字符串的代码为:

System.Resources.ResourceManager rm = new System.Resources.ResourceManager(
System.Windows.Forms.Application.ProductName + ".Properties.Resources"
, System.Reflection.Assembly.GetEntryAssembly());
rm.GetString("str1")

返回"你好"。
创建ResourceManager示例时,第一个参数指定了查找的资源名,第二个指定了查找资源的程序集。
此时在添加一个资源文件Resources.en-US,将会生成两个文件Resources.en-US.Designer.cs和Resources.en-US.resx,在其中添加一个字符串str1,值设定为”hello”。上述代码无需修改,在main函数中加一条语句:
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");


则rm.GetString(“str1”);返回的是”hello”。
这样就实现了对多语言的支持。

Tips1

实际上在编译Resources.resx时,会被编译为一个Properties.Resources类,可以在代码中直接访问。
 
 

Tips2

若程序分为demo.dll和demo.exe,资源文件在.exe程序中,在.dll程序中需要获取资源,该怎么做?实际上这就是上述在创建ResourceManager实例时第二个参数的作用了,设置为System.Reflection.Assembly.GetEntryAssembly(),表示从整个程序的运行控件程序集中查找资源,若设置为GetExecutingAssembly(),则只会在.dll程序集中查找资源。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多语言 winfrom c#