首页  ·  知识 ·  编程语言
ASP.NET国际化应用程序总结
佩窈  CSDN博客  .NET  编辑:佩窈   图片来源:网络
ASP.NET应用程序的国际化基本上有两种方案,一种是在数据库中建立语言映射表,从数据库中取出国际化后的资源;第二种是在应用程序中建议资源文件,根据语言进行切换。

ASP.NET应用程序的国际化基本上有两种方案,一种是在数据库中建立语言映射表,从数据库中取出国际化后的资源;第二种是在应用程序中建议资源文件,根据语言进行切换。在这里我想说的是第二种方法。
1.我们先建立一个BasePage类,然后让我们的所有页面全都继承这个BasePage类,在这个类里完成国际化操作,我们在这里只以英文和中文的切换为例子。BasePage类如下:


using System;

using System.Web;

using System.Threading;

using System.Globalization;</span><p><span style="font-family:Microsoft YaHei;">public class BasePage : System.Web.UI.Page

{

    protected override void InitializeCulture()

    {

        this.AcquireRequestState(Page, "");

        base.InitializeCulture();

    }</span></p><p><span style="font-family:Microsoft YaHei;">    //根据语言选择国际化页面 此方法建议写到其它公共类

    public void AcquireRequestState(System.Web.UI.Page page, string language)

    {

        if (page.Session["language"] == null)

        {

            language = "";

        }

        else

        {

            language = page.Session["language"].ToString();

        }

        page.UICulture = language;

        page.Culture = language;

        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language);

        Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);</span></p><p><span style="font-family:Microsoft YaHei;">    }</span></p><p><span style="font-family:Microsoft YaHei;">    //通过Key获取资源文件中对应的值

    public string GetLocalResourceByKey(string keyID)

    {

        string strReturn = "";

        if (!string.IsNullOrEmpty(keyID))

        {

            try

            {

                strReturn = GetLocalResourceObject(keyID).ToString();

            }

            catch

            {</span></p><p><span style="font-family:Microsoft YaHei;">            }

        }

        return strReturn;

    }</span></p><p><span style="font-family:Microsoft YaHei;">    //Ajax后台处理程序国际化 此方法建议写到其它公共类

    public string AjaxInternation(HttpContext context, string pagePath, string key)

    {

        CultureInfo currentCulture;

        if (context.Session["language"] != null)

        {

            if (context.Session["language"].ToString() == "en-us")

            {

                currentCulture = new CultureInfo("en-us");

            }

            else

            {

                currentCulture = new CultureInfo("");

            }

        }

        else

        {

            currentCulture = new CultureInfo("");

        }

        return HttpContext.GetLocalResourceObject(pagePath, key, currentCulture).ToString();

    }

}


2.建立一个示例页面,名字为NationalWeb.aspx,在这里我们讲演示文本,下拉框,JS验证,后台脚本弹窗等格式化方法。代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="NationalWeb.aspx.cs" Inherits="Study.NationalWeb"

    Culture="auto" meta:resourcekey="PageResource1" UICulture="auto" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

    <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>

    <script type="text/javascript">

        $(function () {

            $("#txtBox").focus(function () {

                var tip = '<%=GetLocalResourceByKey("JSTip.Text")%>';

                $("#Tip").text(tip);

            })

        })

        function GetAlert() {

            var alertTip = '<%=GetLocalResourceByKey("AlertTip.Text")%>';

            if (confirm(alertTip))

            { return true; } else { return false; }

        }

    </script>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:LinkButton ID="lbLang" runat="server" meta:resourcekey="lbLangResource1" OnClick="lbLang_Click"></asp:LinkButton><br />

        <br />

        <asp:Label ID="lbText" runat="server" meta:resourcekey="lbTextResource1"></asp:Label><br />

        <br />

        <asp:DropDownList ID="dopCountry" runat="server" meta:resourcekey="dopCountryResource1">

            <asp:ListItem Value="0" meta:resourcekey="ListItemResource1"></asp:ListItem>

            <asp:ListItem Value="1" meta:resourcekey="ListItemResource2"></asp:ListItem>

            <asp:ListItem Value="2" meta:resourcekey="ListItemResource3"></asp:ListItem>

        </asp:DropDownList>

        <br />

        <br />

        <asp:Label ID="lbTip" runat="server" meta:resourcekey="lbTip"></asp:Label>

        <asp:TextBox ID="txtBox" runat="server"></asp:TextBox><span id="Tip"></span><br />

        <br />

        <asp:LinkButton ID="lbPop" runat="server" OnClientClick="return GetAlert()" meta:resourcekey="lbPopResource1"

            OnClick="lbPop_Click"></asp:LinkButton>

    </div>

    </form>

</body>

</html>


我们可以看到整个代码没有任何的文本内容,反而多了很多的meta:resourcekey属性,这是因为我已经将这个页面国际化了,meta:resourcekey属性对应的值就是资源文件中的值。

3.我们在VS中将页面切换到“设计”视图,然后点击 工具——生成本地资源,我们就可以在App_LocalResources文件夹下看到NationalWeb.aspx.resx这个资源文件,打开看一下里面就有页面上每一个ID对应的Text属性。我们也可以自己新建一些键/值对,对一些脚本提示内容等等进行国际化。下面我们把它拷贝一份,重新命名为NationalWeb.aspx.en-us.resx这一个文件作为英文的资源文件,我们将对应的Text修改为英文,修改完后大体如下:


blob.png

特别注意一下黄色标记的那个值,那个是页面上切换中英文的超链接,在英文资源文件中这个值应该是中文,在中文资源文件中他应该是English,这样才能切换正常。

4.下面我们看一下NationalWeb.aspx的后台代码,基本上没有什么代码,主要说一下后台弹窗文本的国际化,代码如下:

using System;

using System.Collections.Generic;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

namespace Study

{

    public partial class NationalWeb : BasePage

    {

        protected void Page_Load(object sender, EventArgs e)

        {

        }

        //语言切换

        protected void lbLang_Click(object sender, EventArgs e)

        {

            string language = string.Empty;

            if (lbLang.Text == "English")

            {

                language = "en-us";

            }

            else

            {

                language = "";

            }

            Session["language"] = language;

            Server.Transfer(Request.Path);

        }

        //后台弹窗国际化

        protected void lbPop_Click(object sender, EventArgs e)

        {

            string message = GetLocalResourceObject("Operation.Text").ToString();//获取国际化后的文本

            ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>alert('" + message + "');</script>");

        }

    }

}


5.这样就国际化完了,其实也是很简单的,还有一个地方没有说到,就是Ajax处理程序中返回的文本应该如何国际化呢?其实原理也差不多,首先先在资源文件建立对应的key/Value,然后可以通过BasePage类写的那个AjaxEnglish方法完成国际化,示例代码如下:

string name = BasePage.AjaxEnglish(context, "/Customer/PackageBid.aspx", "ProductName.Text");





本文作者:佩窈 来源:CSDN博客
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读
也许感兴趣的
我们推荐的
主题最新
看看其它的