超级简单:ASP.NET Localization (本地化,多语言)
2015-07-13 15:01
761 查看
有很多讨论ASP.NETlocalization(本地化,多语言)的文章,这篇文章是不会的深入讨论ASP.NETLocalization(本地化,多语言)。相反,它将给你有关asp.net页面中通常使用的内容的localization的一个快速参考,这些内容包括:ASP.NET服务端控件,html内容,SiteMap,一些其他资源。
这篇文章包括以下内容:
1、如何本地化的ASP.NET服务器控件?
2、如何本地化HTML内容?
3、如何本地化站点地图?
4、如何动态改变文化环境?
如何本地化的ASP.NET服务器控件?
ASP.NET服务器控件的localization是所有类型中最简单的一种。一旦你添加一个服务器控件到你的页面上,您可以简单地切换网页到“Design”,然后进入菜单“Tools”->“GenerateLocalResource”。
它将会为页面上的每个asp.net服务器控件产生一段字符串资源。在这个例子中,创建一个名字为Default.aspx.resx的文件。它包含了Default.aspx页面所有的资源的name/value对。
切换回"Source",你将看到在你的html里面添加了如下的代码:
<asp:ButtonID="Button1"runat="server"Text="Hello"
meta:resourcekey="Button1Resource1"/>
然后,您可以复制/粘贴,为了创建另一个文化资源文件。例如,您可以为法国用户创建一个Default.aspx.fr.resx。
下面的截图是当InternetExplorer的语言设置为英语。
通过InternetExplorer->Tools->InternetOptions->Languages更改语言为法语.
下面是为法语版本的页面:
如何本地化HTML内容?
为了本地化普通的HTML内容,您可以使用<asp:Localize>控件。让我们用一个例子来解释。
在您的网页,你有一个标题和段落。
<h1>LocalizationPageHeader</h1>
<p>ThisisademopagetoshowyouhowtodolocalizationinASP.NET</p>
为了本地化,您需要给他们添加<asp:Localize>。
<h1><asp:LocalizeID="Header"runat="server">LocalizationPageHeader</asp:Localize></h1>
<p><asp:LocalizeID="Localize1"runat="server">Thisisademo
pagetoshowyouhowtodolocalizationinASP.NET</asp:Localize></p>
然后,您可以手动创建一个资源文件并添加meta:resourcekey=“HeaderResource1”到您的网页。您可以利用VisualStudio,它自动生成。切换页面到“Design”,进入菜单“Tools”->“GenerateLocalResource”。
它将为您生成以下代码和资源文件(例如:yourfile.aspx.resx)。
下面是它更改的代码:
代码
在其余步骤是与如何本地化ASP.NET服务器控件相同。
如何本地化SiteMap?
本文将给你关于SiteMap的本地化更多的细节。
1、通过加入enableLocalization=“true”,启用站点地图文件网站地图本地化。例如:在Web.sitemap文件。
<siteMapxmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0"
enableLocalization="true">
2、在SiteMapNode中使用这种格式:“$resources:ClassName,KeyName,DefaultValue”,更改你要本地化的资源字符串的属性的值。
<siteMapNodeurl="Default.aspx"
title="$resources:SiteMapLocalizations,HomePageTitle"
description="$resources:SiteMapLocalizations,HomePageDescription">
3、添加globalresource文件夹和文件。右键单击在解决方案资源管理器的website。点击“添加ASP.NET文件夹”。从子菜单点击“添App_GlobalResources文件”。这将增加一个“App_GlobalResources文件”文件夹到根目录。
然后,添加一个资源文件,例如,SiteMapLocalizations.resx。在文件中,您将有资源字符串的name/value对。例如:
NameValue
HomePageTitleHome
4、为每一种你需要的文化,添加资源文件。例如,您可能有一个名字为SiteMapLocalizations.fr.resx法语版的文件。下面是英文和法文的菜单屏幕截图:
如何编程本地化字符串?
有时您可能需要显示一个字符串,例如,在运行时错误信息。您需要编程将它本地化。下面是如何做到这一点:
1、在App_GlobalResources文件夹下面添加一个资源文件。例如,我们能添加一个名字为“CommonResource.resx”文件和一个法语版的“CommonResource.fr.resx”。
2、有很多其他很好的方法来获取资源字符串。
你能从~\App_GlobalResources\MyMessages.resx得到的资源通过:
1、产生的封装代码:
stringmessage=Resources.MyMessages.Hello;
2、资源表达式
<asp:LabelText="<%$Resources:MyMessages,Hello%>"/>
3、
<asp:LabelText="<%$Resources:Hello%>"/>
<asp:Labelmeta:resourceKey="labelResourceKey"/>
stringmessage=GetLocalResourceObject("Hello");"
<asp:LinkButtonID="LanguageEnglish"Text="English"runat="server"></asp:LinkButton>
<asp:LinkButtonID="LanguageFrench"Text="Français"runat="server"></asp:LinkButton>
protectedoverridevoidInitializeCulture()
{
stringlanguage=Request.Form["__EventTarget"];
stringlanguageId="";
if(!string.IsNullOrEmpty(language))
{
if(language.EndsWith("French"))
languageId="fr-FR";
elselanguageId="en-US";
Thread.CurrentThread.CurrentCulture=
CultureInfo.CreateSpecificCulture(languageId);
Thread.CurrentThread.CurrentUICulture=newCultureInfo(languageId);
}
base.InitializeCulture();
}
/Files/zhuqil/Localization.zip
原文:http://www.codeproject.com/KB/aspnet/AspNetLocalization.aspx
作者:朱祁林出处:http://zhuqil.cnblogs.com本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
这篇文章包括以下内容:
1、如何本地化的ASP.NET服务器控件?
2、如何本地化HTML内容?
3、如何本地化站点地图?
4、如何动态改变文化环境?
如何本地化的ASP.NET服务器控件?
ASP.NET服务器控件的localization是所有类型中最简单的一种。一旦你添加一个服务器控件到你的页面上,您可以简单地切换网页到“Design”,然后进入菜单“Tools”->“GenerateLocalResource”。
它将会为页面上的每个asp.net服务器控件产生一段字符串资源。在这个例子中,创建一个名字为Default.aspx.resx的文件。它包含了Default.aspx页面所有的资源的name/value对。
切换回"Source",你将看到在你的html里面添加了如下的代码:
<asp:ButtonID="Button1"runat="server"Text="Hello"
meta:resourcekey="Button1Resource1"/>
然后,您可以复制/粘贴,为了创建另一个文化资源文件。例如,您可以为法国用户创建一个Default.aspx.fr.resx。
下面的截图是当InternetExplorer的语言设置为英语。
通过InternetExplorer->Tools->InternetOptions->Languages更改语言为法语.
下面是为法语版本的页面:
如何本地化HTML内容?
为了本地化普通的HTML内容,您可以使用<asp:Localize>控件。让我们用一个例子来解释。
在您的网页,你有一个标题和段落。
<h1>LocalizationPageHeader</h1>
<p>ThisisademopagetoshowyouhowtodolocalizationinASP.NET</p>
为了本地化,您需要给他们添加<asp:Localize>。
<h1><asp:LocalizeID="Header"runat="server">LocalizationPageHeader</asp:Localize></h1>
<p><asp:LocalizeID="Localize1"runat="server">Thisisademo
pagetoshowyouhowtodolocalizationinASP.NET</asp:Localize></p>
然后,您可以手动创建一个资源文件并添加meta:resourcekey=“HeaderResource1”到您的网页。您可以利用VisualStudio,它自动生成。切换页面到“Design”,进入菜单“Tools”->“GenerateLocalResource”。
它将为您生成以下代码和资源文件(例如:yourfile.aspx.resx)。
下面是它更改的代码:
代码
在其余步骤是与如何本地化ASP.NET服务器控件相同。
如何本地化SiteMap?
本文将给你关于SiteMap的本地化更多的细节。
1、通过加入enableLocalization=“true”,启用站点地图文件网站地图本地化。例如:在Web.sitemap文件。
<siteMapxmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0"
enableLocalization="true">
2、在SiteMapNode中使用这种格式:“$resources:ClassName,KeyName,DefaultValue”,更改你要本地化的资源字符串的属性的值。
<siteMapNodeurl="Default.aspx"
title="$resources:SiteMapLocalizations,HomePageTitle"
description="$resources:SiteMapLocalizations,HomePageDescription">
3、添加globalresource文件夹和文件。右键单击在解决方案资源管理器的website。点击“添加ASP.NET文件夹”。从子菜单点击“添App_GlobalResources文件”。这将增加一个“App_GlobalResources文件”文件夹到根目录。
然后,添加一个资源文件,例如,SiteMapLocalizations.resx。在文件中,您将有资源字符串的name/value对。例如:
NameValue
HomePageTitleHome
4、为每一种你需要的文化,添加资源文件。例如,您可能有一个名字为SiteMapLocalizations.fr.resx法语版的文件。下面是英文和法文的菜单屏幕截图:
如何编程本地化字符串?
有时您可能需要显示一个字符串,例如,在运行时错误信息。您需要编程将它本地化。下面是如何做到这一点:
1、在App_GlobalResources文件夹下面添加一个资源文件。例如,我们能添加一个名字为“CommonResource.resx”文件和一个法语版的“CommonResource.fr.resx”。
2、有很多其他很好的方法来获取资源字符串。
你能从~\App_GlobalResources\MyMessages.resx得到的资源通过:
1、产生的封装代码:
stringmessage=Resources.MyMessages.Hello;
2、资源表达式
<asp:LabelText="<%$Resources:MyMessages,Hello%>"/>
3、
GetGlobalResourceObject方法
stringmessage=GetGlobalResourceObject("MyMessages","Hello");
你能从~\App_LocalResources\default.aspx.resx得到的资源通过:
1、资源表达式:
<asp:LabelText="<%$Resources:Hello%>"/>
2、meta:resourceKey:
<asp:Labelmeta:resourceKey="labelResourceKey"/>
3、GetLocalResourceObject方法:
stringmessage=GetLocalResourceObject("Hello");"
这有个截图:
如何动态改变文化?
在示例代码中,我们增加了两个LinkButtons控件。当您点击“English”,该网页将切换到英语文化,点击“Français”,将切换到法国文化。为了检测的哪个LinkButtons被点击,我们使用Request.Form[“__EventTarget”]。它能实现,但可能不是最好的方式。
我们覆盖页面InitializeCulture方法,这样就会对我们作出的选择显示正确的文化。
<asp:LinkButtonID="LanguageEnglish"Text="English"runat="server"></asp:LinkButton>
<asp:LinkButtonID="LanguageFrench"Text="Français"runat="server"></asp:LinkButton>
protectedoverridevoidInitializeCulture()
{
stringlanguage=Request.Form["__EventTarget"];
stringlanguageId="";
if(!string.IsNullOrEmpty(language))
{
if(language.EndsWith("French"))
languageId="fr-FR";
elselanguageId="en-US";
Thread.CurrentThread.CurrentCulture=
CultureInfo.CreateSpecificCulture(languageId);
Thread.CurrentThread.CurrentUICulture=newCultureInfo(languageId);
}
base.InitializeCulture();
}
除了menu之外,其它一切控件都有效。如果在网页中你有一个menu使用Sitemap,您可能需要在Page_Load事件调用menu.DataBind()或设置的EnableViewState为false。否则,但其他内容更改为新的文化,你的menu上仍会显示以前的文化字符串。
当我们动态改变文化,最有可能的是我们需要将它存储在某个地方,当我们从页面到页面跳转时,这样就不会丢失。在示例应用程序,我们使用了Session。
源代码:
原文:
作者:朱祁林出处:http://zhuqil.cnblogs.com本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关文章推荐
- ASP.NET PipeLine #Reprinted#
- DEV-aspxgridview中的editform中上传的方法
- 如何在ASP.NET中获得客户端IP地址
- ASP.NET MVC程序中动态修改form的Action值
- ASP.NET MVC3 电影示例
- ASP.NET MVC3 电影示例
- ASP的2种开发模式
- ASP.NET MVC 中实现真实世界中的 OAuth 身份认证
- 使用ASP.NET web API创建REST服务(二)
- ASP.NET Web API与Rest web api(一)
- 如何应用ASP.NET MVC中的分部视图
- Action Filters for ASP.NET MVC
- 【ASP.NET】——数据绑定和数据控件
- ASP.NET六大巨头——内置对象(2)
- 关于TagHelper的那些事情——Microsoft.AspNet.Mvc.TagHelpers介绍
- ASPxPopupControl PopupWindow使用方法
- aspectJ切面使用
- ASP.NET 5探险(5):利用AzureAD实现单点登录
- Metasploit 整理笔记
- 基于UML和ASP.NET实现三层B/S结构系统开发