Razor MVC Multi-language 多语言系统的实现的问题
根据控件对Resource文件的名称的要求,建立APP_GlobaResource目录下的文件
在web.config中修改UICulture等信息就完成了某个语言显示的设定
主要
一、 处理Form Request,类似之前的ASP模式,通过Submit然后后台的ActionURL ASP页面接收参数,处理反馈。
基本要求:
1.前台有Form,有Submit,有提交的内容
@{Html.BeginForm("Index","Home");} <table cellpadding="0″cellspacing="0" style="border:0px none white; width:600px;"> <tr> <td style="width:300px;"> <table cellspacing="0"cellpadding="0" style="border:0px none white; width:300px;"> <tr> <td style="width:150px;text-align:left;">Language</td> <td style="width:150px;text-align:right;"> <input type="submit" value="Update Language" />
….
</table>@{Html.EndForm();}
2.后台控制器 Controller
一个Action,对应Form中的Html.BeginForm("Index","Home")
public ActionResult Index(String language) { …}
3.这个过程要理解刷新,或则page_load
二、关于通过代码访问资源的方式:
使用接口(其中的Namespace就来自Customtoolnamespace)
<td style="width:300px;">@HWResources.ServerSide.HelloString</td>
定义方式:(设置很重要)
三、View Access of Local Resource using Html Extension Method
通过HTML help的扩展访问本地资源
Razor与传统的Web Form view引擎不一样,web form允许代码访问资源。这里讲如何通过HTML扩展来调用类似GetLocalResourceObject的方式:
主要是 page.ViewContext.HttpContext.GetLocalResourceObject
提一下使用HTMLHelper的步骤:
1. 创建一个来自html helper的扩展类
2. 注册到Razor viewEngine configuration entry,通过web.config,在
<System.Web.WebPages.Razor>
记住这个是在view\web.config
这个方式总体来说的步骤:
1. 写Extension,第一个参数,以及确认使用LocaresourceObject,就是要来自APP_LocalResources目录
public static string LocalResources(this WebViewPage page, string key) { //如果需要图片资源,不过基本还是string为主 return page.ViewContext.HttpContext.GetLocalResourceObject(page.VirtualPath, key) as string;}
2.Razor view代码
<b>View Access of custom embedded resource using html extension</b></td> <td style="width:300px;">@this.LocalResources("String1")</td>
LocalResources(this WebViewPage page=@this, string key= String1)
四、上述代码的简化版,但显然导致过多代码:
<b>View Access of Local Resource using Http Context GetLocalResourceObject ....</b></td> <td style="width:300px;">@HttpContext.GetLocalResourceObject("~/Views/Home/Index.cshtml","String1")</td>
参数需要使用当前的View的页面。"~/Views/Home/Index.cshtml"
最后的效果: