资源文件在国际化中的运用(WinForm)

简介: 国际化的软件往往需要多种语言资源,如何在C#的WinForm中做到呢?且看以下分解: 1 工程添加资源文件           资源文件命名方式 [资源文件主题名].[语言区域.].resx              例如资源文件主题名为: "Resource1" 。

国际化的软件往往需要多种语言资源,如何在C#的WinForm中做到呢?且看以下分解:

1 工程添加资源文件
           资源文件命名方式 [资源文件主题名].[语言区域.].resx   
           例如资源文件主题名为: "Resource1" 。我们准备了 中 英 日 三个语言版本的资源文件,则对应的语言区域分别是 "zh-CN"、"en"、"ja"
            所以我们添加了三个资源文件: Resource1.zh-CN.resx 、Resource1.en.resx、 Resource1.ja.resx

2 添加命名空间(反射、资源、进程、国际化)
          using System.Reflection;
          using System.Resources;
          using System.Threading;
          using System.Globalization;

3 获取资源文件管理器
            ResourceManager rm = new ResourceManager("winGetMsgFromResource.Resource1", Assembly.GetExecutingAssembly());
            资源文件名的构成为 [项目命名空间].[资源文件主题名]

4 获取当前进程的语言区域
            CultureInfo ci = Thread.CurrentThread.CurrentCulture;

5 从资源文件中按项目名获取值
            假定MsgId是资源文件中的项目名
            rm.GetString(MsgId, ci);

6 前台国际化环境的选择(改变当前程序进程中的区域信息的方式达到改变)
            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("zh-CN");
            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-us");
            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("ja-JP");



实例:一个简单的资源文件访问类

img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  System;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using  System.Collections.Generic;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using  System.Text;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using  System.Reflection;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using  System.Resources;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using  System.Threading;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using  System.Globalization;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
namespace  winGetMsgFromResource
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif {
img_33d02437d135341f0800e3d415312ae8.gif    
class clsMsg
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif        
public static string getMsg(string MsgId)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif            ResourceManager rm 
= new ResourceManager("winGetMsgFromResource.Resource1", Assembly.GetExecutingAssembly());
img_33d02437d135341f0800e3d415312ae8.gif            CultureInfo ci 
= Thread.CurrentThread.CurrentCulture;
img_33d02437d135341f0800e3d415312ae8.gif            
return rm.GetString(MsgId, ci);
img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif        
public static string getMsg1()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif            
string strOut = string.Empty;
img_33d02437d135341f0800e3d415312ae8.gif            CultureInfo ci 
= Thread.CurrentThread.CurrentCulture;
img_33d02437d135341f0800e3d415312ae8.gif            
switch (ci.ToString())
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif
img_33d02437d135341f0800e3d415312ae8.gif                
case "zh-CN":
img_33d02437d135341f0800e3d415312ae8.gif                    strOut 
= "当前 文化区域 为 中文";
img_33d02437d135341f0800e3d415312ae8.gif                    
break;
img_33d02437d135341f0800e3d415312ae8.gif                
case "en-US":
img_33d02437d135341f0800e3d415312ae8.gif                    strOut 
= "Current Culture is ENGLISH";
img_33d02437d135341f0800e3d415312ae8.gif                    
break;
img_33d02437d135341f0800e3d415312ae8.gif                
case "ja-JP":
img_33d02437d135341f0800e3d415312ae8.gif                    strOut 
= "現在の言葉は 日本語です";
img_33d02437d135341f0800e3d415312ae8.gif                    
break;
img_33d02437d135341f0800e3d415312ae8.gif                
default:
img_33d02437d135341f0800e3d415312ae8.gif                    strOut 
= "others";
img_33d02437d135341f0800e3d415312ae8.gif                    
break;
img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

img_33d02437d135341f0800e3d415312ae8.gif            
return strOut;
img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

img_105a1e124122b2abcee4ea8e9f5108f3.gif    }

img_05dd8d549cff04457a6366b0a7c9352a.gif}

示例工程
/Files/heekui/winGetMsgFromResource.rar

 

目录
相关文章
关于 QtCreator中写Qt程序遇到printf不输出问题 的解决方法
关于 QtCreator中写Qt程序遇到printf不输出问题 的解决方法
|
存储 安全 数据安全/隐私保护
VMware16安装Win11虚拟机(最全步骤+踩坑)
VMware16安装Win11虚拟机(最全步骤+踩坑)
11134 0
VMware16安装Win11虚拟机(最全步骤+踩坑)
|
存储 SQL 数据库
数据库设计案例:电商系统数据库设计实践
数据库设计案例:电商系统数据库设计实践
2425 1
|
11月前
|
定位技术 数据安全/隐私保护
如何评估HTTP代理IP的性能?
随着互联网技术的发展,使用代理IP的人越来越多。选择HTTP代理IP时,需注意速度和稳定性、用户信息保护、地域性、带宽上限、支持的协议、客户支持、用户评价和信誉、价格和性价比等方面。希望这些建议能帮助大家做出合适的选择。
163 1
|
自然语言处理 监控 搜索推荐
《百炼成金-大金融模型新篇章》––12.应用场景与技术架构选型(1)
百炼必定成金,新质生产力会催生新质劳动力,谨以此文抛砖引玉,希望与业内的各位朋友一同探讨如何积极拥抱并运用大模型技术,以应对和驾驭不断变化的市场环境,实现科技金融持续稳定的提质增效和创新发展,携手开启金融大模型未来新篇章。
437 1
【UI】 修改element-ui input输入框placeholder提示信息、占位符的样式
【UI】 修改element-ui input输入框placeholder提示信息、占位符的样式
1538 0
|
XML Java 数据格式
idea自动去除项目无用import以及注释不顶格且注释后空格设置(包括新建项目)
idea自动去除项目无用import以及注释不顶格且注释后空格设置(包括新建项目)
541 0
|
Java 数据库连接 Spring
Spring Boot 3.2.2整合MyBatis-Plus 3.5.5依赖不兼容问题
Spring Boot 3.2.2整合MyBatis-Plus 3.5.5依赖不兼容问题
800 0
|
监控 关系型数据库 MySQL
C#程序发布时,一定要好好地保护,不然你会后悔的
C#程序发布时,一定要好好地保护,不然你会后悔的
280 0
|
前端开发 C++
Qt界面美化之自定义qss样式表
Qt界面美化之自定义qss样式表