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

思路:

基于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程序集中查找资源。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值