ASP.NET 国际化应用程序总结

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

public class BasePage : System.Web.UI.Page {     protected override void InitializeCulture()     {         this.AcquireRequestState(Page, "");         base.InitializeCulture();     }

    //根据语言选择国际化页面 此方法建议写到其它公共类     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);

    }

    //通过Key获取资源文件中对应的值     public string GetLocalResourceByKey(string keyID)     {         string strReturn = "";         if (!string.IsNullOrEmpty(keyID))         {             try             {                 strReturn = GetLocalResourceObject(keyID).ToString();             }             catch             {

            }         }         return strReturn;     }

    //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修改为英文,修改完后大体如下:

 特别注意一下黄色标记的那个值,那个是页面上切换中英文的超链接,在英文资源文件中这个值应该是中文,在中文资源文件中他应该是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");

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
此文档是从实际项目中总结出来的,互联网上只有“在单一页面进行语言切换”的教程, 没有“一键切换”的解决方案,更没有同时把5种读取资源文件总结在一起的demo。 本文档重点 1.多种读取方式 2.一键全站切换 步骤 一:新建一个asp.net 空 web应用程序“Internationalization”(图1) 二:右键“Internationalization”--->添加--->添加ASP.NET文件夹--->App_GlobalResources 三:右键“App_GlobalResources”--->添加--->新建项--->资源文件--->GlobalLanguage.resx 四:在GlobalLanguage.resx里添加键值对.(图二) 五:连续复制“GlobalLanguage.resx”两次到“App_GlobalResources”下面,并修改名称为 GlobalLanguage.en-US.resx GlobalLanguage.zh-CN.resx 说明:(为什么会有三个文件呢?系统必须有一个默认文件“GlobalLanguage.resx”,两种语言两个文件.) 六:修改英文和中文资源文件里的键值对。 说明(网上大多做法都是把语言设置为浏览器自动识别语言, 这种方式在实际项目中一般不用,所以直接讲解用程序来控制) 七:添加language1.aspx (图3,4) 八:添加language2.aspx (图5),在设计模式下“工具”--->“生成本地资源”,会自动添加一个“App_LocalResources” 和第五步一样,添加再添加两个资源文件。 language2.aspx.zh-CN.resx language2.aspx.en-US.resx 说明(一键全站切换的实现方法有多种,这里只讲最有效的,编写一个基类,在里面设置一个全局变量lan,所有 页面都继承这个基类,再通过程序修改变量lan,用Session最简单,但是用户过多时对内存的消耗很大, 还可以用数据库和配置文件,但是最好用Cookie,所以下面以Cookie为例子) 九:新建一个母板页“language.Master”(图6,7) 十:添加language3.aspx (图8,9),必须继承Base类 十一:添加language4.aspx (图10),必须继承Base类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悠悠虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值