ASP.Net MVC多语言

.NET MVC 多语言网站

通过浏览器语言首选项改变MVC的语言,通过浏览器语言选项,修改脚本语言。

一、添加资源文件

1、添加App_GlobalResources文件夹。

 ASP.Net MVC多语言

 

2、添加默认的资源文件和对应的语言码资源文件。如zh-cn代表*,en-us代表美制英语。详情:http://www.lingoes.cn/zh/translator/langcode.htm

 ASP.Net MVC多语言

 

3、将资源文件设置成public。新建时默认是internal,这样不能被访问。

右键点击资源文件,在其的属性中将自定义工具(Custom Tool) 从资源代理生成器(GlobalResourceProxyGenerator) 改为 公共文件(PublicResXFileCodeGenerator),然后将生成操作从内容改为嵌入的资源。

 ASP.Net MVC多语言

4、在web.config中添加语言选项。这样就会根据浏览器语言首选项,判断要使用的资源。

    <!--根据浏览器的语言首选项,决定语言项-->

<globalization uiCulture="auto" culture="auto" enableClientBasedCulture="true" />

 

5、在对应的文件中添加键值对。

 ASP.Net MVC多语言ASP.Net MVC多语言

 

二、View+Control+Model的普通文字多语言

1、view

 ASP.Net MVC多语言

2、control

 ASP.Net MVC多语言

3、model

//[Required(ErrorMessage = "密码不能为空")]

 [Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "PasswordNotNull")]

 

三、DisplayName的多语言化。重写DisplayName方法

 

  public class LocalDisplayName : DisplayNameAttribute

    {

        private string _defaultName = "";

        public Type ResourceType { get; set; }
public string ResourceName { get; set; } public LocalDisplayName(string defaultName) { _defaultName = defaultName; } public override string DisplayName { get { PropertyInfo p = ResourceType.GetProperty(ResourceName); if (p != null) { return p.GetValue(null, null).ToString(); } else { return _defaultName; } } } }

 

model使用:

 [LocalDisplayName("发布时间", ResourceName = "PublishDateTime", ResourceType = typeof(Resource))]

 

 

四、脚本多语言

我的方法是在引用一个公用的脚本文件,由该文件通过当前语言引入对应的语言资源脚本。如果当前浏览区语言没有没有对应的资源脚本,就引入默认的资源脚本。

 ASP.Net MVC多语言

1、通过浏览器语言引入对应的语言资源脚本。

//将所有的语言资源脚本文件名罗列再次,用&分割

var languageresources = "en-us&zh-cn"

 

//根据当前浏览器语言验证语言脚本是否存在,如果在则加载,则加载默认的zh-cn.js

var thislanguagere = navigator.language.toLowerCase();

 

var script = document.getElementsByTagName(‘HEAD‘).item(0);

script = document.createElement("script");

script.type = "text/javascript";

 

var language = languageresources.split("&")

var flag = false;

for (var item in language) {

    if (thislanguagere == language[item]) {

        var flag = true;

        script.src = "/Scripts/controls/" + thislanguagere + ".js";

        document.body.appendChild(script);

    }

}

if (flag == false) {

    script.src = "/Scripts/controls/zh-cn.js";

    document.body.appendChild(script);

}

 

 

2、对应资源脚本写法。设置键值对

 

 ASP.Net MVC多语言ASP.Net MVC多语言

 

3、具体页面脚本使用,引用。需要先引用判断语言脚本。

 ASP.Net MVC多语言

 

 

另附:可修改的多语言,即通过语言超链接修改当前语言项。

1、在Global.asax文件中:

    

   protected void Application_AcquireRequestState(Object sender, EventArgs e)

        {

            Authentication.AttachAuthTicketByUrl<WebAuthentication>(Context);

            //多语言 可切换

            if (HttpContext.Current.Session != null)

            {

                System.Globalization.CultureInfo ci = (System.Globalization.CultureInfo)this.Session["CurrentLanguage"];

                if (ci == null)

                {

                    ci = new System.Globalization.CultureInfo("zh-cn");

                    this.Session["CurrentLanguage"] = ci;

                }

                System.Threading.Thread.CurrentThread.CurrentUICulture = ci;

                System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(ci.Name);

            }

        }

 

2、在control中:

        public ActionResult ChangeLanguage(string language)

        {

            Session["CurrentLanguage"] =new System.Globalization.CultureInfo(language);

            return Redirect("Login");

        }

 

3、在页面中:

@Html.ActionLink("English", "ChangeLanguage", "Account", new { language = "en-us" }, new { @class = "hex-a" })

@Html.ActionLink("Chinese", "ChangeLanguage", "Account", new { language = "zh-cn" }, new { @class = "hex-a" })

 

 

参考资料:

.NET MVC 2 多语言网站的实现: 

 http://blog.163.com/xu_shuhao/blog/static/52577487201092402610920/

 

关于在mvc4中多语言建站的实例:

http://www.cnblogs.com/Joans/archive/2012/08/16/2640473.html

 

 

ASP.Net MVC多语言,布布扣,bubuko.com

ASP.Net MVC多语言

上一篇:密码强度应用(js)


下一篇:Jquery Easy UI初步学习(二)datagrid的使用