Javascript下调用.Net资源文件,实现语言国际化

大家都知道,要在.Net下实现国际化是很简单的事,只需添加一个 App_GlobalResources 目录和相应的资源文件(.resx),然后就可以直接调用了,如现有一资源文件名为: Admin.resx,其中有一个叫 Title 的键值,这时在页面只需直接使用

 

string  title  =  Resources.Admin.Title;


但如果想在JS里也使用此资源文件,要如何处理呢?其实也很简单,只需使用AJAX调用后台获取资源文件即可,以下就使用jQuery + ASP.NET MVC为例实现在JS下直接调用资源文件的方法(当然你也可以直接使用传统的JS AJAX方法获取)

先创建获取资源文件的函数:

 

代码
     // 使用键值方式获取资源文件,其中 category 即资源文件名
    Resource  =   function  (category, key) {
       
// 使用jQuery的 ajax 直接获取相应的资源文件
         var  rtnvalue  =
        $.ajax({
            type: 
" POST " ,
            dataType: 
" json " ,
            data: {
                
" category " : category,
                
" key " : key
            },
            url: 
" /GetResource " ,
            async: 
false
        }).responseText;
        
// 返回 json 数据
         var  rtnvalue  =  $.parseJSON(rtnvalue);

        
if  ( ! rtnvalue.MsgType)
            
return   " No Resource File! " ;
        
else
            
return  rtnvalue.Content;
    }


接下来要实现服务器端的代码了:

 

代码
public  ActionResult GetResource(FormCollection collection)
{            
            
// 此为自定义信息返回类,方便返回相应的ajax结果
            Message msg  =   new  Message();

            
// 调用 ResourceManager 以获取相应的资源文件
            ResourceManager rm  =  (ResourceManager)System.Type.GetType
                (
" Resources. "   +  collection[ " category " ]).GetProperty( " ResourceManager "
                BindingFlags.Static 
|  BindingFlags.NonPublic).GetValue( null null );
            msg.Content 
=  rm.GetString(collection[ " key " ])  ??   "" ;
           
            
// 由于我用的是ASP.NET MVC,所以直接使用 Json(obj) 返回即可
             return  Json(msg);
}


 Ok,万事具备啦,现在可以直接调用了,在JS里如要显示以上 Title 的语言,就可以使用以下代码调用:

 

alert(Resource( " Admin " " Title " ));
// or 
var  title  =  Resource( " Admin " " Title " );


这样就可以在JS里轻松实现语言国际化效果了!

 

 

 

你可能感兴趣的:(Javascript下调用.Net资源文件,实现语言国际化)