方案描述
    本方案采用一种语言一个资源文件的方法,能够有效提高资源文件的可维护性。而VS.NET提供的一个WebForm一个资源文件的方案,无法满足统一维护的需要。

实现步骤
1. 准备资源文件
    资源文件通常有.resx和.resources两种,前者是xml文件,后者是二进制文件。本方案中采用.resources作为资源文件,因此需要一个第三方提供的资源编辑器对资源文件进行编辑,我使用的是Resourcer,反正只要能编辑资源文件并且保存为.resources文件的软件都可以。在资源文件中添加一些string资源,通常情况下,只会用到string资源,有些项目可能需要全球化的图片资源,原理里一样的,本文就不涉及了。
    资源文件的命名是有规定,该方案中,我把所有的资源文件名设为business.[culture].resources,其中business这个名字可以改,可以改成任何一个你喜欢的名字,[culture]部分必须使用.net允许的文化缩写,如zh-cn、ja-jp、en-us等。
2. 把资源文件放入项目
    为了方便管理,我把所有的资源文件放在网站的一级目录Resources中。由于读取资源文件时要用到资源文件的物理位置,建议把Resources目录直接放在wwwroot下,否则会因为路径问题而变得很麻烦。
3. 增加默认语言设置
    在web.config中加入<add key="cultureName" value="zh-cn" />,表明默认情况下使用zh-cn作为默认语言文化。
4. 通过Session设置当前语言
    我们用一个Session变量——Session["cultureName"]来告诉每一个页面应该使用哪种语言进行初始化。当Session["cultureName"]==null时,表明该变量未设置过,就直接用默认语言文化,即web.config中的设置值。
如果用户想改变当前的界面语言,只需要设置Session["cultureName"]为指定的文化缩写即可。

全球化资源辅助管理类
通过这个类你不需要了解ResourceManager的使用方法,就可以完成全球化的初始化和资源读取工作。该类初始化时需要传入一个Page对象,该对象将用于获得Session变量值。一般情况下,大家只需要用该类的GetString()方法就可以了。

    /**//// <summary>
    /// 全球化资源辅助管理类
    /// </summary>
    public class ResourceHelper
    {
        private ResourceManager _rm=null;
        private Page _page=null;

        public ResourceHelper(Page page)
        {
            _page=page;
            PrepareResource();
        }
        /**//// <summary>
        /// 获得当前文化,从Session["cultureName"]取
        /// </summary>
        protected CultureInfo GetCurrentCulture
        {
            get
            {
                if(_page.Session["cultureName"]!=null)
                    return CultureInfo.CreateSpecificCulture(_page.Session["cultureName"].ToString());
                else    //如果Session未设置,则直接从web.config中读取默认设置
                    return CultureInfo.CreateSpecificCulture(System.Configuration.ConfigurationSettings.AppSettings["cultureName"]);
            }
        }
        /**//// <summary>
        /// 初始化资源管理
        /// </summary>
        public void PrepareResource()
        {
            _rm = ResourceManager.CreateFileBasedResourceManager("business",_page.Server.MapPath("resources")+System.IO.Path.DirectorySeparatorChar,null);
        }
        /**//// <summary>
        /// 获得资源指针
        /// </summary>
        protected ResourceManager resource
        {
            get
            {
                if(_rm==null)
                    PrepareResource();
                return _rm;
            }
        }
        /**//// <summary>
        /// 获得资源字符串
        /// </summary>
        /// <param name="ResourceID">资源ID</param>
        /// <returns></returns>
        public string GetString(string ResourceID)
        {
            return this.resource.GetString(ResourceID,this.GetCurrentCulture);
        }
    }

为了方便大家学习,做了个Demo给大家参考
关于Demo的一些说明
1. 本演示在WindowsXP Professional+VS.NET2003环境下调试通过
2. 演示中提供了三种语言的资源文件:business.zh-cn.resources, business.en-us.resources,business.ja-jp.resources
它们都放在Resources目录下,每个资源文件中有001_01、001_02、001_03三个string资源,分别表示用户名、密码、生日。
3. 通过选择下拉式列表中的语言,然后按“确定”按钮,可以完成语言切换

基于语言文件的asp.net全球化解决方案相关推荐

  1. R语言使用fs包的path_wd函数基于自定义文件路径规则,批量生成多个文件或者文件夹对应的绝对(absolute)文件路径(constructs absolute path)

    R语言使用fs包的path_wd函数基于自定义文件路径规则,批量生成多个文件或者文件夹对应的绝对(absolute)文件路径(constructs an absolute path from the ...

  2. [Asp.net]Uploadify上传大文件,Http error 500 解决方案

    [Asp.net]Uploadify上传大文件,Http error 500 解决方案 参考文章: (1)[Asp.net]Uploadify上传大文件,Http error 500 解决方案 (2) ...

  3. 用C#语言在VS2010 WPF中编写的选择文件和选择文件夹的问题及其解决方案

    用C#语言在VS2010 WPF中编写的选择文件和选择文件夹的问题及其解决方案 参考文章: (1)用C#语言在VS2010 WPF中编写的选择文件和选择文件夹的问题及其解决方案 (2)https:// ...

  4. 基于存储的C语言文件操作常规问题分析(文本文件与二进制文件)

    基于存储的C语言文件操作常规问题分析(文本文件与二进制文件) 问题描述 文本文件与二进制文件 数据写入文本乱码问题 fopen和open 流式文件操作常用函数 直接I/O文件操作常用函数 问题描述 我 ...

  5. c语言开发五轴后处理,基于UGCLS文件使用C语言制作智能后处理工具.doc

    基于UGCLS文件使用C语言制作智能后处理工具 基于UG CLS文件使用C语言制作智能后处理工具 发表时间:2008-9-10 张伟 基于UGCLS文件特性,利用C语言制作附带业务规则的后处理工具的一 ...

  6. [译]使用LazZiya.ExpressLocalization开发多语言支持的ASP.NET Core 2.x项目

    介绍 开发多语言支持的ASP.NET Core 2.x Web应用程序需要大量的基础架构设置,并且耗费时间和精力.这篇文章,我们将使用LazZiya.ExpressLocalization nuget ...

  7. BigData之MongoDB:MongoDB基于分布式文件存储数据库的简介、下载、案例应用之详细攻略

    BigData之MongoDB:MongoDB基于分布式文件存储数据库的简介.下载.案例应用之详细攻略 目录 MongoDB的简介 1.MongoDB的主要功能特性 2.对MongoDB进行增删改查( ...

  8. MongoDB 一个基于分布式文件存储的数据库

    简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. 特点 它的特点是高性能.易部署.易使用,存储数据非常方便.主要功能特性有: ...

  9. c语言字符串路径打开本地文件,C语言文件路径中的”/“和“\“

    在不同系统的情况系   windows下是\,linux和unix下是/  但在win中没有本质区别. 但是由于   \   也是转义字符的起始字符,  所以, 路径中的   \   通常需要使用   ...

最新文章

  1. 【js操作url参数】获取指定url参数值、取指定url参数并转为json对象
  2. html action get post请求参数乱码,input type=text 发送请求参数,中文乱码问题
  3. f1 score 代码_腾讯广告算法大赛冠军代码解读:稠密特征工程
  4. ubuntu14.04设置静态IP
  5. 案例:无人船测量点位数据+ArcGIS 10.6软件生成三维水下地形的两种方法
  6. java hipster!_通过Java Hipster升级Spring Security OAuth和JUnit测试
  7. 小度拆卸_拆卸invokedynamic
  8. CentOS搭建安装SVN
  9. power bi连接mysql_一起学微软Power BI系列-使用技巧(6) 连接Sqlite数据库
  10. 智能语音技术新发展与发展趋势
  11. 利用alpha matte提取图片前景
  12. django下创建多个app,如何设置每个app的urls
  13. HTC手机手动解锁教程
  14. Java面向对象编程练习:定义一个交通工具的基类,包含成员属性商标和颜色,成员方法run和showInfo显示信息。编写小汽车类和卡车类来继承交通工具类,添加相应的方法显示各自的信息
  15. Android 8.0 打开wifi热点
  16. Cocos2d-x 2.x、3.x读书摘要(2016-6-25 07:18)
  17. 绘制花朵Flower
  18. 异步清零和同步清零的区别
  19. 【潍坊seo公司】普通人都能学会的SEO,让你打破网络营销瓶颈
  20. 超级可爱的萌妹焊接艺术壁画,它是画上去的!

热门文章

  1. mysql 聚合函数内比较运算符_关于常用 MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结...
  2. 十进制转十六进制c语言_蓝桥杯十六进制转十进制,十进制转十六进制精简版(C++)...
  3. python正则表达式知识点
  4. (5) 百度2011研发工程师笔试卷
  5. Java编程在线学习靠谱吗?能学会吗?
  6. 谈谈IT行业的一些生存之道!
  7. python 完全面向对象_python 面向对象(一)
  8. 19-for循环语句
  9. Python爬虫进阶三之Scrapy框架安装配置
  10. Python科学计算:Pandas