ASP.NET 本地化 (localization)

 

简要:

.NET支持Windows和Web应用程序的全球化和本地化。要使应用程序全球化,可以使用System.Globalization命名空间中的类,要使应用程序本地化,可以使用System.Resources命名空间支持的资源。

首先了解一下概念什么是本地化

 

顾名思义,本地化就是将你的资源变成本地所特有的一些性质或形式或方式等。在.net中的本地化 Localization 大概的意思就是应用程序在客户端中提供与客户端配置相关的一些资源和语言。

 

应用:有了本地化我们可以很方便的为某一个项目或应用程序提供多语言的版本,比如XX中文版、XX繁体版和XX英文版等。同时这对于那些外包翻译的特别有用,他们不需要装Visual Studio,一个简单的XML编辑哭就可以满足他们的需求了。当然.Net Framework SDK中也附带的一个工具winres.exe提供对资源本地化进编辑。

 

下面我们来在一个网站中添加一个文件夹App_GlobalResources 应用程序全局资源 并在其目录下建立Resource.resx、Resource.en.resx、Resource.zh-CN.resx

三个文件的结构都是一样的,只是值有所有不同如下图:

本地化(Resource.resx)

Resource.en.resx(Add、Edit、Title)

 

Resource.zh-CN.resx(添加、编辑、标题)

 

接下来建立一个页面来测试一下:

前面代码如:

 

Code
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Location_Default" %>

<!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>
</head>
<body>
<form id="form1" runat="server">
<div>
<div style="margin:0 auto;width:800px;">
<h1><%=Resources.Resource.title %></h1>
</div>
<br />
add:
<asp:label id="lblAdd" runat="server" Text="<%$ Resources:Resource, add %>"></asp:label>
<br />
edit:
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="<%$ Resources:Resource, edit %>" /></div>
</form>
</body>
</html>

 

其中像Lable和button中的Text属性可以在其中Expressions中选取如:

表达式

好运行一下如:

很明显时应用程序是匹配是文,因为我的浏览器语言默认是zh-cn如下图:

语言设置当我把它默认设为en时页面 的语言也会随之改变

好,那当我把它设置为德语时de那会发生什么事呢?会不会也有德语的页面呢?

 

因为我们的本地化资源中不提供德语资源(Resouce.de.resx)所以程序会默认选择了Resource.resx这个资源。

 

有人会说我不想更改浏览器的配置,那好,你也可以通过数据库或其它将本地化信息存起来,当系统启动时再调用并应用到其本地化中

这里做了一个QueryString的测试

在Global.axsa中添加

 

Code
/// <summary>
/// Sets the culture based on the language selection in the settings.
/// </summary>
void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
string lan = Request["language"];
if (!String.IsNullOrEmpty(lan))
{
CultureInfo culture
= CultureInfo.CreateSpecificCulture(lan);
Thread.CurrentThread.CurrentUICulture
= culture;
Thread.CurrentThread.CurrentCulture
= culture;
}


}
posted @ 2008-09-07 00:30  Sam Lin  阅读(3016)  评论(4编辑  收藏  举报