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

方案描述
    本方案采用一种语言一个资源文件的方法,能够有效提高资源文件的可维护性。而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中加入 ,表明默认情况下使用zh-cn作为默认语言文化。
4. 通过Session设置当前语言
    我们用一个Session变量——Session["cultureName"]来告诉每一个页面应该使用哪种语言进行初始化。当Session["cultureName"]==null时,表明该变量未设置过,就直接用默认语言文化,即web.config中的设置值。
如果用户想改变当前的界面语言,只需要设置Session["cultureName"]为指定的文化缩写即可。

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

     /// 
    
/// 全球化资源辅助管理类
    
/// 

     public   class  ResourceHelper
    
{
        
private ResourceManager _rm=null;
        
private Page _page=null;

        
public ResourceHelper(Page page)
        
{
            _page
=page;
            PrepareResource();
        }

        
/// 
        
/// 获得当前文化,从Session["cultureName"]取
        
/// 

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

        }

        
/// 
        
/// 初始化资源管理
        
/// 

        public void PrepareResource()
        
{
            _rm 
= ResourceManager.CreateFileBasedResourceManager("business",_page.Server.MapPath("resources")+System.IO.Path.DirectorySeparatorChar,null);
        }

        
/// 
        
/// 获得资源指针
        
/// 

        protected ResourceManager resource
        
{
            
get
            
{
                
if(_rm==null)
                    PrepareResource();
                
return _rm;
            }

        }

        
/// 
        
/// 获得资源字符串
        
/// 

        
///  资源ID
        
/// 

        public string GetString(string ResourceID)
        
{
            
return this.resource.GetString(ResourceID,this.GetCurrentCulture);
        }

    }




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值