众所周知ASP.NET 2.0里对本地化(Localization)做了很多工作,大大简化了开发过程。今天终于能抽出时间研究一下这个技术了,资料很多,但大多带着一股咬文嚼字的翻译味道,So......自己写一篇。
1.使用工具自动生成本地化资源(LocalResources)
2.原来Localizable AttributeProperty是这么回事呀
3.手工添加本地化资源
4.显示使用本地化资源
5.全局资源的使用(GlobalResources)
6.如何在后台编程时使用这两种资源
7.编程切换语言设置
8.使用图片资源
9.代码下载
1.使用工具自动生成本地化资源(LocalResources)
首先当然是建立一个WEB工程啦,如图所示:
双击Default.aspx,切换到[设计]视图,从工具箱里拖一个Button进来。点击菜单中的[工具]->[生成本地资源],如图所示:
这时发现在解决方案方案视图里自动增加了一份本地资源,如下图所示:
切换到属性视图,可以看到Text和ToolTip都被加上了一个红色符号,提示“属性是用表达形式隐式绑定的”,如下图所示:(
注意:只有在视图状态下选中控件才能看到这两个属性哟)
为了增加对多语言的支持,我们现在右键Default.aspx.resx,点击复制,再选中App_LocalResources目录,点击粘贴,将“副本 Default.aspx.resx”重命名为Default.aspx.en-us.resx,如图所示:
分别编辑Default.aspx.resx和Default.aspx.en-s.resx 的内容,如下图示:
Default.aspx.resx
Default.aspx.en-s.resx
运行网站,效果如下图所示:
点击IE菜单的[工具]->[Internet 选项],在弹出的对话框中点[常规]选项卡的[语言]按钮,弹出[语言首选项]对话框,如下图所示:
点击[添加]按钮,选择英语(美国),并上移到第一位,如下图所示:
一路[确定]点下来,刷新页面,可以看到Button的标题变成“Hello World”啦,如下图所示:
综上所述,使用工具自动生成本地化资源,并隐式的绑定到控件上,来实现页面的本地化是非常简单的,但存在以下几项问题:
1)必须为每个页生成多份资源文件;
2)只有控件属性中被标识为Localizable(true)才可能被工具扫描到;
3)由于是对页面包含的控件进行扫描,所以最好是在页面布局基本确定后再使用该工具,并且在编辑完 资源文件后不要再使用该工具,如果不幸你这样做了。。。会发现默认的资源文件被清空了
2.原来Localizable AttributeProperty是这么回事呀
在我前天写的随笔
开发和使用自定义服务器控件中,一直对属性为什么要使用Localizable(true)不清楚。
<!----> [
Bindable(true),
Category("Appearance"),
DefaultValue("Hello"),
Description("The welcome message text."),
Localizable(true)
]
public virtual string Text
{
get
{
string s = (string)ViewState["Text"];
return (s == null) ? "Hello" : s;
}
set
{
ViewState["Text"] = value;
}
}
查了许多关于WEB控件开发的资料,其中都对这个AttributeProperty做了忽略,原来只有当控件的属性声明为Localizable(true)时,VS的生成本地资源工具才会扫描到。
3.手工添加本地化资源
第一点中提到过生成本地资源工具只能扫描到页面已经包含的控件,那么如果后面由于开发需要又增加了一个新的控件要怎么办呢?虽然大部人都能自己想到,但还是写一下吧。
从工具箱再拖一个Label控件到页面上,切换到源视图,修改代码如下:
<!----><asp:Label ID="Label1" runat="server" meta:resourcekey="Label1Resource1" Text="Label"></asp:Label>
再修改两份本地资源文件,为Label1添加Label1Resource1键值的相关资源,如下图所示:
Default.aspx.resx
Default.aspx.en-s.resx
再运行程序,切换语言设置,可以看到Label1的效果和Button1是一样的,如图所示:
中文(中国)
英语(美国)
4.显示使用本地化资源
OK,前面提到的都是隐式使用本地化资源,那么如何显示的使用本地化资源呢?相对于隐式来讲,显示更加灵活,功能也更强大。
只需要将刚才的Label1的代码,
<!----><asp:Label ID="Label1" runat="server" meta:resourcekey="Label1Resource1" Text="Label"></asp:Label>
修改为,即可。
<!----><asp:Label ID="Label1" runat="server"
Text="<%$ Resources:Label1Resource1.Text %>"
ToolTip="<%$ Resources:Label1Resource1.ToolTip %>" >
</asp:Label>
这时切换到[设计]视图,选中Label1控件,查看属性视图,会发现Text和ToolTip被加上的是蓝色的符号,提示“属性绑定了表达式”。跟上面提到的红色符号比较,少了“隐式”二字,这也就是所谓的显式和隐定的来源吧,如下图所示:
5.全局资源的使用(GlobalResources)
前面提到过,本地资源需要为每个页面分别生成多个资源文件,虽然这样看起来分门别类的挺清楚,但在实际应用过程中,我们有许多资源是可以共享的,总不能不停的重复写来写去吧。其实这种情况我们可以用全局资源(GlobalResources)来解决。
在资源方案视图中选中网站,右键,点击[添加ASP.NET 文件夹]->[App_GlobalResources],如图所示:
再选中App_GlobalResources文件夹,右键,点击[添加新项],在弹出的对话框中选中“资源文件”,命名为“LocalizedText.resx”,点击[添加],如图所示:
双击LocalizedText.resx进行编辑,添加一条新的字符串资源,如图所示:
复制LocalizedText.resx,粘贴到App_GlobalResources目录,重命名为LocalizedText.en-us.resx,双击进行编辑,添加一条新的字符串资源,如图所示:
打开Default.aspx,切换到[设计]视图,从工具箱拖一个TextBox控件到页面上。切换到[源]视图,修改代码:
<!----><asp:TextBox ID="TextBox1" runat="server" Text="<%$ Resources:LocalizedText, Msg1 %>"></asp:TextBox>
运行程序,切换语言设置,可以看到全局资源的使用效果了,如图所示:
中文(中国)
英语(美国)
注意:全局资源不能使用隐式声明。6.如何在后台编程时使用这两种资源前面提到的都是在网页中使用这两种资源,那么如何在后台使用这两种资源呢?
打开Default.aspx,切换到[设计]视图,从工具箱拖一个Localize控件(Literal 控件与 Label 控件类似,但 Literal 控件不允许对所显示的文本应用样式。可以通过设置 Text 属性,以编程方式控制在控件中显示的文本。)到页面上。双击Button1,添加以下实现
<!----> protected void Button1_Click(object sender, EventArgs e)
{
Localize1.Text = (String)GetLocalResourceObject("Label1Resource1.Text") + " " +
(String)GetGlobalResourceObject("LocalizedText", "Msg1");
}
记得添上这个引用
<!---->using System.Globalization;
运行程序,切换语言设置,可以看到和前面使用表达式调用资源的效果是一样的,如图所示:
中文(中国)
英语(美国)
7.动态切换语言设置以上的介绍都是通过IE浏览器获取语言设置,其实我们可以自己设置使用哪种语言。
1)通过在每个页面里的Page节指定
<!----><%@ Page Culture="en-us" UICulture="en-us" %>
如上所设,该页将使用en-us的语言设置。
注意:这只是个概要式写法,实际的页面中的Page一般都包含更多的属性。2)通过在Web.Config里的globalization节指定
<!----><system.web>
<globalization Culture="en-us" UICulture="en-us" />
</system.web>
3)当然还有一种就是通过编程动态切换语言设置啦,这也是实际项目中经常用到的方式
打开Default.aspx,切换到[源]视图,添加如下代码
<!----> <a href="?currentculture=zh-cn">中文(中国)</a>
<a href="?currentculture=en-us">English(USA)</a>
打开Default.aspx.cs,添加如下代码
<!----> String s;
protected override void InitializeCulture()
{
s = Request.QueryString["currentculture"];
if (!String.IsNullOrEmpty(s))
{
//UICulture - 决定了采用哪一种本地化资源,也就是使用哪种语言
//Culture - 决定各种数据类型是如何组织,如数字与日期
Thread.CurrentThread.CurrentUICulture = new CultureInfo(s);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(s);
}
}
记得添上这个引用
<!---->using System.Threading;
运行程序,分别点击新增加的两个链接,效果如图所示:
中文(中国)
Enlish(USA)
8.使用图片资源分别编辑LocalizedText.resx和LocalizedText.en-su.resx,添加图片资源,如图所示:
LocalizedText.resx
LocalizedText.en-su.resx
注意:当图形文件添加到图形资源里时,系统会自动去除扩展名并把“-”替换成“_”,如上图,我的文件名为“en-us-flag.png”添加到资源里变成了“en_us_flag”。打开Default.aspx,切换到[设计]视图,从工具箱拖一个Image控件到页面上。打开Default.aspx.cs,添加如下代码
<!----> protected void Page_Load(object sender, EventArgs e)
{
Image1.ImageUrl = "~/Image.aspx?currentculture=" + s;
}
选中网站右键,创建一个新的WEB窗体,命名为Image.aspx,编辑该页面,在Page节增加如下代码
<!----><%@ Page Language="C#" AutoEventWireup="true" CodeFile="Image.aspx.cs" Inherits="Image" Culture="auto" UICulture="auto"%>
注意:默认创建的WEB窗体的Page节,不包括Culture和UICulture这两个属性,一定要手工添上,切记!
打开Image.aspx.cs,添加如下代码
<!----> protected override void InitializeCulture()
{
String s = Request.QueryString["currentculture"];
if (!String.IsNullOrEmpty(s))
{
//UICulture - 决定了采用哪一种本地化资源,也就是使用哪种语言
//Culture - 决定各种数据类型是如何组织,如数字与日期
Thread.CurrentThread.CurrentUICulture = new CultureInfo(s);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(s);
}
}
protected void Page_Load(object sender, EventArgs e)
{
System.Drawing.Bitmap img = (System.Drawing.Bitmap)GetGlobalResourceObject(
"LocalizedText",
CultureInfo.CurrentCulture.Name.ToLower().Replace("-", "_") + "_flag");
System.IO.MemoryStream ms = new System.IO.MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType = "image/jpeg";
Response.BinaryWrite(ms.ToArray());
img.Dispose();
ms.Dispose();
ms.Flush();
}
当然,别忘了添上这两个引用
<!---->using System.Threading;
using System.Globalization;
运行程序,分别点击两个链接,效果如图所示:
中文(中国)
English(USA)
9.代码下载
下载地址:http://www.cnblogs.com/Files/reonlyrun/WebLocalizationTaste.rar
注:关于回复中提到的整站资源切换和WebResource的使用,已经放到我的另一篇文章里了
ASP.NET 2.0 本地化技术之研究(二)
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利
This posting is provided "AS IS" with no warranties, and confers no rights.
分享到:
相关推荐
【怎样成为优秀员工】 在IT行业中,成为优秀员工并不仅仅是技术层面的问题,它涉及到个人素质、职业态度、学习能力以及团队协作等多个方面。本讲座由高级经济师谢荣安教授主讲,他强调了学做人和学做事的重要性,这...
【如何成为优秀员工】 在IT行业中,成为一个优秀员工并不仅仅是技术层面的卓越,更重要的是拥有良好的人格特质和工作态度。强桦所强调的特质——诚实、正直、积极,是任何行业都应重视的品质。这三点对于技术人才来...
因此,学习大雁精神,培养团队意识,对于成为优秀员工至关重要。 【优秀员工的精神特质】 1. **务实精神**:如同大象稳健的步伐,优秀员工以实际行动展现能力,每天进步,逐步实现目标。 2. **十足的信心**:自信...
在IT行业中,优秀员工的特质并不仅仅是技术能力的体现,更重要的是他们的职业素养。这些素养能够帮助他们在复杂的工作环境中脱颖而出,成为团队的中坚力量。以下是一流员工具备的十大职业素养: 1. **敬业**:敬业...
【如何快速成为优秀员工】 在当今竞争激烈的职场环境中,如何快速成长为一名优秀的员工是许多人的追求。深圳市聚成企业管理顾问有限公司作为一家专注于企业管理和培训的专业机构,提供了丰富的资源和指导来帮助个人...
为了成为一名优秀的基层员工,企业鼓励员工具备以下特质。首先,将公司目标视为个人目标,这体现了归属感,能推动员工更积极地工作。其次,不断学习和发展,提升知识和技能,以提高工作效率。最后,员工需要全力以赴...
成为优秀员工,不仅可以提升你在公司的地位,获得更多的发展机会,同时也能带给你个人满足感和成就感,让关心和支持你的人为你骄傲。 优秀员工与普通员工的区别主要体现在能力和品德两个方面。能力好且品德好的员工...
在《某集团改革整顿反思篇之优秀员工》的PPT中,主要探讨了如何成为优秀员工以及优秀员工对企业的重要性。这份材料强调了个人素质、团队精神和执行力在职场中的关键角色。 首先,"管理是严肃的爱"这句话体现了管理...
2. 优秀员工的特质:包括严谨的工作态度、高度的责任感、吃苦耐劳的精神、对质量的严格要求和节能降耗的意识。他们能够在面临挑战时主动解决问题,愿意加班完成任务,并始终保持对公司的忠诚和热爱。 3. 工作中的...
从提供的内容来看,这份PPT着重强调了成为优秀员工所需具备的关键要素,包括良好的人际关系、团队精神、自动自发的工作态度、注重细节、追求完美、不找借口、坚决服从和执行能力、设定工作目标以及与企业共同成长。...
【2011优秀员工工作体会】文档主要探讨了成为优秀员工所必备的几个关键特质,这些特质在任何行业和岗位上都具有普遍的价值。以下是这些核心知识点的详细阐述: 1. 积极主动:优秀员工往往具备积极主动的态度,他们...
5. **积极心态**:避免抱怨是优秀员工的特质之一。他们理解抱怨无法解决问题,而是通过实际行动来改变现状。保持积极的心态能感染周围的人,创造一个健康的工作环境。 6. **热爱工作**:将工作视为生命的一部分,...
优秀员工并不仅仅是技术上的高手,更重要的是他们具备全面的素质,包括正确的心态、强大的能力、扎实的技能以及独特的特质。以下将详细探讨这些方面。 首先,优秀员工的心态至关重要。积极的心态就像太阳,能够照亮...
邓博主讲的“如何做一名优秀员工”主题中,强调了员工个人品质与态度对于职业发展的重要性。以下是对这些要点的详细解析: 首先,优秀员工勇于承担责任。他们不仅完成分配的任务,还愿意主动承担更多,即使在未被...
【没有任何借口】是优秀员工的另一个重要特质。借口常常是责任感缺失的表现,会侵蚀团队的凝聚力和效率。当员工习惯于找借口,他们可能会陷入懒惰和停滞不前的状态,缺乏创新精神和自我驱动力。因此,拒绝借口,承认...
优秀员工的定义与特质 #### 定义: - **优秀员工**是指在工作中展现出超越常人的能力和态度,为企业的发展做出了突出贡献的员工。 #### 特质: - **吃苦耐劳**:面对困难和挑战时能够坚持不懈,勇于承担重担。 - ...
执行力是优秀员工的关键特质之一,意味着能够高效、准确地完成任务。员工需要具备将目标转化为实际行动的能力,遇到困难时能主动解决问题,确保工作的质量和进度。高效的执行力能够体现员工的责任感和专业素养。 第...
此外,领导力和团队合作也是成为优秀员工的关键。即使在非管理层职位,也可以展现领导力,例如通过主动承担责任,激励同事,或者推动项目的进展。演讲稿可能包含如何建立良好的人际关系,如何解决团队冲突,以及如何...
四、成为优秀员工的好处 1. 受到上司认可,业绩突出,有机会获得晋升、加薪。 2. 能够建立良好的同事关系,提升工作满意度。 3. 提高家庭生活质量,为家庭带来自豪感。 4. 个人职业发展和技能提升,形成良性循环。 ...
《做最优秀的员工》这本书揭示了职场成功的关键因素,它强调了态度、团队协作和感恩之心对于成为优秀员工的重要性。以下是对这些核心观点的详细阐述: 1. 正确的工作态度:工作态度是决定个人能否成为优秀员工的...