asp.net mvc 国际化(1) 国际化的基础

国际化主要在以下几个方面

1.  通常的文本国际化. 通过asp.net资源文件解决.

2.  前端国际化. 通过js语言包解决.

3.  后台输出的提示语言等的国际化.(比如说”该用户名不存在”)

4.  状态枚举的国际化.(比如说”正常”,”停止”等状态)

5.  数据库数据的国际化(比如说一级目录二级目录等文本)

asp.net mvc中的资源文件

本地文件: Views文件夹内. 用于给ASPX,ASCX,模板页等的国际化. 命名例如. Login.aspx.en-US.resx

<%= this.GetLocalResourceObject("First") %>

全局文件: 站点根目录. 命名规则: 类名.语言代码.resx.

//页面
<%= this.GetGlobalResourceObject("Test","string1") %>
//后台
类名.字段名

以声明方式设置 ASP.NET 网页的区域性和 UI 区域性

若要设置所有页的区域性和 UI 区域性,请向 Web.config 文件添加一个 globalization 节,然后设置 uiculture 和 culture 属性,如下面的示例所示:
 
<globalization uiculture="es" culture="es-MX" />
若要设置单个页的区域性和 UI 区域性,请设置 @ Page 指令的 Culture 和 UICulture 属性,如下面的示例所示:
 
<%@ Page UICulture="es" Culture="es-MX" %>
若要使 ASP.NET 将区域性和 UI 区域性设置为当前浏览器设置中指定的第一种语言,请将 UICulture 和 Culture 设置为 auto。也可以将该值设置为 auto:culture_info_name,其中 culture_info_name 是区域性名称。有关区域性名称的列表,请参见 CultureInfo。您可以在 @ Page 指令或 Web.config 文件中进行该设置。

用编程的方式设置ASP.NET网页的区域性和UI区域性

    将页的 Culture 和 UICulture 属性设置为语言和区域性字符串(如 en-US)。这两个属性是页的内部属性,只能在页中使用。
 
    将当前线程的 CurrentUICulture 和 CurrentCulture 属性分别设置为 UI 区域性和区域性。CurrentUICulture 属性采用一个语言和区域性信息字符串。若要设置 CurrentCulture 属性,请创建 CultureInfo 类的一个实例并调用其 CreateSpecificCulture 方法。
//在aspx页面中
protected override void InitializeCulture()
{
    if (Request.Form["ListBox1"] != null)
    {
        String selectedLanguage = Request.Form["ListBox1"];
        UICulture = selectedLanguage ;
        Culture = selectedLanguage ;
 
        Thread.CurrentThread.CurrentCulture = 
            CultureInfo.CreateSpecificCulture(selectedLanguage);
        Thread.CurrentThread.CurrentUICulture = new 
            CultureInfo(selectedLanguage);
    }
    base.InitializeCulture();
}
//在httpmodule中重新设置当前线程的CurrentUICulture和CurrentCulture属性
public void Init(HttpApplication context)
        {
            context.PostAuthenticateRequest += new EventHandler(context_PostAuthenticateRequest);
        }
 
        void context_PostAuthenticateRequest(object sender, EventArgs e)
        {
            var httpContext = HttpContext.Current;
            try
            {
                if (httpContext.Request.Cookies["lang"] != null)
                {
                    System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(httpContext.Request.Cookies["lang"].Value.ToString());
                    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(httpContext.Request.Cookies["lang"].Value.ToString());
                }
            }
            catch (Exception)
            { }
        }

通过以上的代码. 我们可以简单地完成国际化了.

具体操作可以看这里

待续

posted @ 2011-06-22 14:42  MyCoolDog  阅读(1868)  评论(0编辑  收藏  举报