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

2023-11-02

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

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);
        }

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 转载layui树形表格

    地址 https whvse gitee io treetable lay index html README md treetable lay 实现layui的树形表格treeTable 1 简介 在layui数据表格之上进行扩展实现 演
  • Kibana操作Elasticsearch-检索

    1 导入ES官方检索测试数据 本次使用kibana操作ES以这些数据为基础 ES在GitHub的地址 这段数据存在这个目录下 将这2000行json复制出来 2 使用Kibana将2000行数据导入到ES中 POST bank accoun
  • 分享一下我用Python接单的个人经历,别被死工资拖累!

    很多人都说靠python接单一个月能赚好几千 事实真是如此吗 作为一个入过python坑 靠python兼职和接单解决了自己吃喝玩乐的人就来唠一唠这个事吧 我能用Python接单也是碰巧 很早之前我是不晓得Python还能用来接单赚取外快的
  • nasm编译出问题

    用nasm编译出现如下问题 root redhat8 Source nasm algo a nasm o algo a o algo a nasm 180 error impossible combination of address si
  • 全连接层结构理解

    以上图为例 我们仔细看上图全连接层的结构 全连接层中的每一层是由许多神经元组成的 1x 4096 的平铺结构 它是怎么样把3x3x5的输出 转换成1x4096的形式 从上图我们可以看出 我们用一个3 3 5的filter去卷积激活函数的输出
  • React Hooks 组件化开发(常用)

    本文章视频地址 视频链接 一 React组件分类 二 Hook函数概览 Hook 是 React 16 8 的新增特性 并且只能运用到函数组件中 1 useState 作用 在函数组件中使用状态 修改状态值可让函数组件更新 类似于类组件中的
  • python settings.json_vscode python 之 settings.json

    python jediEnabled true python linting flake8Enabled true python formatting provider yapf python linting flake8Args max
  • ubuntu: Linux常用指令---grep(搜索过滤)

    1 基础命令 Linux系统中grep命令是一种强大的文本搜索工具 它能使用正则表达式搜索文本 并把匹 配的行打印出来 grep全称是Global Regular Expression Print 表示全局正则表达式版本 它的使用权限是所有
  • 通过adb pull和adb push 手机与电脑之间传输文件

    一 将手机卡中的某个文件复制到电脑 1 手机连接电脑后 在命令行输入 adb devices 获取到设备序列号后说明手机已经和电脑连接成功 2 输入 adb pull 手机存储路径 电脑路径 adb pull sdcard xxx User
  • Android嵌入式开发之NDK初级入门 粘贴可用阅读可懂

    前言 NDK开发 其实是为了项目需要调用底层的一些C C 的一些东西 另外就是为了效率更加高些 如果你在Eclipse ADT下开发过NDK就能体会到要么是配置NDK还要下载Cygwin 配置Cygwin 然后需要编译生成 相当的蛋疼 要么
  • react -元素变量

    使用变量来储存元素 它可以帮助你有条件的渲染组件的一部分 而输出的其他部分不会更改 import React Component from react export default class If extends Component re
  • java 中MongoDB Plugin,MongoKit的使用

    这个属于他人的笔记 觉得挺好 所以存了起来 原文出处 https blog csdn net clm article details 51955332 简介 因为自己工作中会需要用到MongoDB 为了在JAVA上用MongoDB用得更舒服
  • Qt调试

    Locals and Expressions Whenever a program stops under the control of the debugger it retrieves information about the top
  • Unity3D---Vuforia is not enabled解决方案

    在Unity3D实现VR的过程中 需要选择Vuforia官网自己创建的Database中的Target 此时 有的Unity3D会出现如下错误 解决办法如下 选择Edit Project Settings Player 将XR Settin
  • 图像识别小车(jetson nano部分)——电赛学习笔记(3)

    目录 零 前言 1 jetson nano购买商家及技术支持 2 相关环境配置 3 做好系统备份 一 vscode远程ssh操作 局域网连接 二 板载摄像头教程 三 运行例程 四 GPIO使用 GPIO库的API用法 1 导入库 2 引脚编
  • Git 命令行提交代码详细操作

    Git 命令行提交代码操作 安装git后 鼠标右键打开Git Bash 1 查看本地git绑定的用户名和邮箱 git config user name git config user email 2 修改本地git绑定的用户名和邮箱 全局
  • 数据挖掘(知识图谱2019)

    领域 二级分类 三级分类 data mining 数据挖掘 time series analysis 时间序列分析 data streams 数据流 time series data 时间序列数据 real time 实时 time ser
  • Unity之Matrix4x4 矩阵

    Matrix4x4 矩阵 Struct A standard 4x4 transformation matrix 一个标准的4x4变换矩阵 A transformation matrix can perform arbitrary line
  • Qt中关于定时器timerEvent和QTimer

    1 Qt 定时器类 QTimer 在进行窗口程序的处理过程中 经常要周期性的执行某些操作 或者制作一些动画效果 使用定时器类 QTimer 就可以解决 使用 只需创建一个 QTimer 类对象 然后调用其 start 函数开启定时器 此后
  • C#实现多语言切换(通过Resource语言包文件实现)

    点我 下载多语言切换项目最全源码 1 先说说Resources语言包文件是怎么来的 通过Visual Studio 命令提示工具将txt文件转换成resources文件 具体操作 a 打开Visual Studio 命令提示工具 然后输入你