ASP.NET中以后台消息+前台消息+页面自动绑定的方式实现多语言

一 前言

界面支持多种语言,在使用ASP.NET自带的多语言方案时遇到下列问题:

在做管理类的功能时,有添加、修改和查看页面,需要支持多语言的控件基本相同,但要维护多处,产生 冗余(ASP.NET有共享的资源,但它是全局的,不能分 模 块,我们不能所模块的信息入在全局资源中);

在页面中必须要指定资源文件中的KEY;

当页面慢来慢多时,页面与资源的匹配实在难以维护;

所以我认为一个理想的支持多语言框架,需要有以下特性:

分模块解决数据冗余问题;

自动匹配页面与资源文件之间的联系;

易于维护,能通过页面快速定位 到资源文件中;

支持后台消息的多语言实现

支持前台JS消息的多语言实现

二 后台消息多语言的实现

在实现后台消息多言的实现时,主要利用ASP.NET的特性,通过修改当前线程的区域语言,来获取对应版本 的资源。因为ASP.NET在处理请求时,会使用一个单独的线程来执行一次请求的所有代码,所以我们只需要在 一个地方重写当前线程的语言信息,在其它任何地方都可以获取当前语言版本的资源文件。重写当前线程的区 域语言的代码如下:

protected override void InitializeCulture()
        {
            string language = "en";//默认为英文
            if (Session["Language"] != null) language = Session

["Language"].ToString();
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language);
            Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(language);
        }

在命名资源文件名时,规则如下:

默认语言的版本直接当正常命名,如命名OrderResource.resx

其它版本的资源文件名,应加上区域名称 , 如OrderResource.zh-cn.resx, OrderResource.en-us.resx.

将后台消息放在资源文件后,程序中只引用主的资源文件,这样在线程的区域信息更改后,会自动的引用 其它语言版本的资源。比如在程序中使用如下代码:

Response.Write(OrderResource.FiledRequired);//当区域信息为英文时,输出"The Filed is required!";当区域信息为中文时,输出"字段必填!"

三 前台JS多语言的实现

前台的多语言实现,即在JS中需要弹出一些提示也需要多语言。前台多语言的实现方法实现有很多,在本 例中,我们采用的统一的管理方式,把JS多语言信息同样放在资源文件中,只不过在一个公共的地方,把资源 序列成一个json对象,然后JS中便可以使用了。当然,在实现此功能时,需要做一些缓存的工作。主要代码如 下:

public static Dictionary<string, string> JsonResources = new Dictionary<string, 

string>();

//把资源文件序列化成JSON
        public static string GetJsonResource()
        {
            string key = string.Format("JSResource.{0}", System.Threading.Thread.CurrentThread.CurrentCulture.Name);
            if (!JsonResources.ContainsKey(key))
            {
                JavaScriptSerializer serialzer = new JavaScriptSerializer();
                ResourceSet rs = JSResource.ResourceManager.GetResourceSet(System.Threading.Thread.CurrentThread.CurrentCulture, true, true);
                string json = string.Format("[{0}]", serialzer.Serialize(rs.OfType<DictionaryEntry>().ToDictionary(x => x.Key, x => x.Value)));
                JsonResources.Add(key, json);
            }
            return JsonResources[key];
        }

 protected override void OnPreRenderComplete(EventArgs e)
        {
            //输出JSON对象到页面
            Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "<script language='javascript'>var json=eval(" + ResourceCache.GetJsonResource() + ");JSResource=json[0];</script>");
         }

在页面中就可以使用JSResource对象了,如alert(window.JSResource.JSMsg);

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/aspx/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, 页面
, asp.net后台程序
, 语言
, 前台页面
, 消息
, 前台
, net 前台
, 资源
, 多语言
, 资源请求慢
, 多语言花
, 多语言对应
JS多语言
,以便于您获取更多的相关知识。

时间: 2024-08-31 06:44:00

ASP.NET中以后台消息+前台消息+页面自动绑定的方式实现多语言的相关文章

ASP.NET中iframe框架点击左边页面链接 右边显示链接页面内容_实用技巧

 ASP.NET中iframe框架点击左边页面链接,右边则显示链接页面内容,具体实现内容如下 先看看效果图: 首先是主页面main.aspx <body style="background-color: #AFEEEE"> <form id="form1" runat="server"> <div> <center> <h1> 后台管理界面 </h1> <span st

ASP.NET中实现Form表单字段值自动填充到操作模型中

  这篇文章主要介绍了ASP.NET中实现Form表单字段值自动填充到操作模型中,本文模仿MVC模式中的自动映射表单了模型,使用泛型和反射实现,需要的朋友可以参考下 我们知道ASP.NET MVC有个强大的地方就是Form表单提交到action的时候,可以直接将Form的参数直接装配到action的参数实体对象中 比如 代码如下: action方法 Register(UserModel userModel) { ............................. } 在提交表单的时候,会

asp.net中gridview后台设置行高失效解决办法

原代码如下  代码如下 复制代码 GridView1.HeaderStyle.Height=17; 发现在IE10 中不起作用 查看生成后的HTML代码,发现也有height:17px 这个元素,但就是没有起作用. 以为是Page_Load里不行 所以又放到 "RowCreated"和"RowDataBound"这两个方法里面发现还是不行 超郁闷!!! 后来脑袋一转弯,既然生成在TR里面不行,我就放到TD里面,改成下面 代码如下:     代码如下 复制代码 e.R

asp.net中wpf实现page跳转页面

在wpf项目中,经常遇到需要跳转窗口的功能,在以前分享一篇了 今天在分享一段代码,是通过content进行页面跳转的,这个和web的跳转就一点都不一样了. 界面: 点击menu1 和2都会跳转到Page1.xaml和 Page2.xaml 前台xaml:  代码如下 复制代码 <Window x:Class="WpfApplication3.MainWindow"         xmlns="http://schemas.microsoft.com/winfx/200

asp.net中利用UrlRewrite动态生成htm页面

前段时间做项目,一直都在寻找一种动态生成htm页面的方法,要求配置简单,和项目无关. 功夫不负有心人,终于被我找到了,只需要在web.config中进行简单配置,就可以达到动态生成静态 页面的效果,同时又不影响Url重定向.web.config中需要注意的配置节为<configuration>. <RewriteConfig>.<httpModules>.<httpHandlers>,在这些配置节里边都有注释, 容易看懂. <?xml version=

新人求解救!asp.net中数据提交后显示空白页面

问题描述 首先,我是菜鸟!网站不是我做的,我是半途接手的!网站原本是正常的,一共有三个,代码啥的都是一样的,就是网站名称改了!好了,进入正题:前几天对网站的部分页面和数据库做了更新,更新后只有一个网站是正常的,其它两个网站在进行数据提交时显示空白页面,在后台和数据库中没有提交的数据 解决方案 解决方案二:求大神,这个应该怎么办?解决方案三:调试代码会不?这样说不知道什么是原因解决方案四:菜鸟就先一步一步调试不要胡乱的瞎改你总应该先在自己的测试环境里调试好了再发布出去才对解决方案五:一共有三个,代

asp.NET中实现文件的压缩和解压(3种方式)_实用技巧

在.NET可以通过多种方式实现zip的压缩和解压:1.使用System.IO.Packaging:2.使用第三方类库:3.通过 System.IO.Compression 命名空间中新增的ZipArchive.ZipFile等类实现. 一.使用System.IO.Packaging压缩和解压 Package为一个抽象类,可用于将对象组织到定义的物理格式的单个实体中,从而实现可移植性与高效访问.ZIP 文件是Package的主物理格式. 其他Package实现可以使用其他物理格式(如 XML 文档

ASP.NET中实现Form表单字段值自动填充到操作模型中_实用技巧

我们知道ASP.NET MVC有个强大的地方就是Form表单提交到action的时候,可以直接将Form的参数直接装配到action的参数实体对象中 比如 复制代码 代码如下: action方法 Register(UserModel userModel) {    ............................. } 在提交表单的时候,会自动讲表单里面的字段封装到对应的UserModel字段里面 那么 WebForm里面可不可以也紫将呢? 因为每次都要去获得数据,优秀的程序员应该要学会

ASP.NET如何实现后台的无级分类的绑定

问题描述 今天找了一天下了N多代码都不知道怎么做的看有的是用GRITEVIEW但是数据排序如何实现望好心人帮一下忙或则给一个代码也行具体实现功能是象很多CMS后台的无级分类管理一样如:国内新闻-----修改--删除----分类00-修改--删除----分类00修改--删除----分类000修改--删除国外新闻---修改---删除----分类00-修改--删除----分类00修改--删除这样绑定无级分类具体能实现功能就行不限制用什么控件或则完全自己写有哪个兄弟知道的能帮个忙万分感谢实在走投无路了