C#实现多语言切换(通过Resource语言包文件实现)

点我~下载多语言切换项目最全源码

1.先说说Resources语言包文件是怎么来的
通过Visual Studio 命令提示工具将txt文件转换成resources文件,具体操作:
a.打开Visual Studio 命令提示工具,然后输入你txt文件所在的目录回车
在这里插入图片描述
b.输入resgen zh_CN.txt zh_CN.resources之后就会在你txt文件所在目录生成一个resources(zh_CN.txt就是我的txt文件)
在这里插入图片描述
c.那么zh_CN.txt文件里面是什么?里面的内容就是你翻译的内容(是key=value的形式,'Username’是key,'用户名’是value)

2.现在我们有了Resources语言包文件,下一步就是读取项目中的resources文件到语言选择下拉框中

 public void FindFindLanguageResource()
        {
            DirectoryInfo di = new DirectoryInfo(HttpRuntime.AppDomainAppPath + "\\languageresources");//我的resources文件是放在项目中的languageresources文件夹下
            if (di == null) return;
            try
            {
                this.DropDownListlanguage.Items.Clear();//先将下拉框的选项clear掉
                FileInfo[] fis = di.GetFiles("??_??.resources");//获取resources文件,比如zh_CN.resources/en_US.resources
                foreach (FileInfo fi in fis)
                {
                    string tmp = fi.Name;
                    string languagefile = tmp.Substring(0, tmp.ToUpper().IndexOf(".RESOURCES"));
                    ListItem item = new ListItem();
                    item.Text = languagefile;
                    item.Value = languagefile;
                    this.DropDownListlanguage.Items.Add(item);
                }
            }
            catch { }
            //下拉框没有语言可选时,默认成中文
            if (this.DropDownListlanguage.Items.Count == 0)
            {
                ListItem item = new ListItem();
                item.Text = "zh_CN";
                item.Value = "zh_CN";
                this.DropDownListlanguage.Items.Add(item);
            }
        }

3.好了,现在我们有语言可以切换了,下一步就是读取resources文件
a.我先将我选择的语言给保存下来(这里我是将它保存在项目中的MulLanguage.ini文件中)以便下次登录时直接获取
在这里插入图片描述

//这里的language就是你选择的语言的value
public static void SaveConfig(string language) {
            StreamWriter sw = File.CreateText(HttpRuntime.AppDomainAppPath + "\\MulLanguage.ini");
            sw.WriteLine(language);
            sw.Close();
        }

获取方法如下:

public static void ReadConfig(ConnectionClass conn) {
            try {
                StreamReader sr = File.OpenText(HttpRuntime.AppDomainAppPath+"\\MulLanguage.ini");
                conn.Currentlanguage = sr.ReadLine();
                sr.Close();
            }
            catch {
                conn.Currentlanguage = "zh_CN";
            }
        }

b.接下来就是管理读取resources文件了(通过ResourceManager)

public static ResourceManager rm = null;
        public static void ReadLanguageConfigFile(string languageFile) { 
           //先释放所有资源
            if(rm!=null){
                rm.ReleaseAllResources();
                rm = null;
            }
            if(File.Exists(HttpRuntime.AppDomainAppPath+"\\languageresources\\"+languageFile+".resources")){
                rm = ResourceManager.CreateFileBasedResourceManager(languageFile,HttpRuntime.AppDomainAppPath+"\\languageresources",null);
            }
        }

		//这里的str就是zh_CN.txt文件中的key
        public static string GetString(string str) {
            try {
                return rm.GetString(str);//返回zh_CN.txt文件中的value,如str="Username",则返回"用户名"
            }
            catch {
                return "";
            }
        }

4.最后就是在页面上显示翻译的内容了,这里我是通过Ajax来实现的
a.前端页面:

<head runat="server">
    <title></title>
    <script src="Scripts/jquery-1.7.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        var mullanguage = "";
        $.ajax({
            type: "post",
            url: "login.aspx/GetMulLanguage",
            dataType: "json",
            contentType: "application/json;charset=utf-8",
            success: function (data) {
                if (data.d == null) {
                    mullanguage = jQuery.parseJSON(data);
                } else {
                    mullanguage = jQuery.parseJSON(data.d);
                }
                for (var key in mullanguage) {
                    var value = mullanguage[key];
                    if (key == "lb_name" || key == "lb_language") {
                        document.getElementById(key).innerHTML = value;
                    } else if (key == "btn_1") {
                        document.getElementById(key).value = value;
                    }
                }
            },
            error: function () {
            }
        })
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <label id="lb_name" >用户名</label>
        <input  type="text" value=""/>
        <input  type="button" value="登录" id="btn_1"/>
        <label id="lb_language">语言:</label>
        <asp:DropDownList ID="DropDownListlanguage" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList_Language_SelectedIndexChanged">      
        </asp:DropDownList>
    </div>
    </form>
</body>

b.后台代码:

 [WebMethod]
        public static string GetMulLanguage()
        {
            Hashtable ht = new Hashtable();
            ht.Add("lb_name", MulLanguageClass.GetString("Username"));//调用3中的GetString方法,注意:GetString括号中的内容一定要和txt文件中的key一致(包括大小写),
            ht.Add("btn_1", MulLanguageClass.GetString("Login");
            ht.Add("lb_language", MulLanguageClass.GetString("Language_"));
            return JsonConvert.SerializeObject(ht);
        }

点我~下载多语言切换项目最全源码

点我~下载多语言切换项目最全源码

点我~下载多语言切换项目最全源码

点我~下载多语言切换项目最全源码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值