📄 localizingapps.aspx
字号:
<%@ Register TagPrefix="Acme" Namespace="Acme" Assembly="QSTools" %>
<%@ Register TagPrefix="Acme" TagName="SourceRef" Src="/quickstart/aspplus/util/SrcRef.ascx"%>
<!-- #include virtual="/quickstart/aspplus/include/header.inc" -->
<h4>本地化 ASP.NET 应用程序</h4>
<div class="indent" style="font-family:Verdana; font-size:8pt;">
<b> <img align="middle" src="/quickstart/images/bullet.gif"> </b><a class="toc2" href="#copy">复制并翻译</a><br>
<b> <img align="middle" src="/quickstart/images/bullet.gif"> </b><a class="toc2" href="#embed">本地化和控件</a><br>
<b> <img align="middle" src="/quickstart/images/bullet.gif"> </b><a class="toc2" href="#summary">本节小结</a><br>
</div>
<p>
<hr>
<!--BEGIN SECTION--> <a name="copy"><span class="subhead">复制并翻译</span>
<p>
本地化 Web 页的最简单方法通常是创建副本并将其翻译为目标语言。此方法非常适合不需要大量维护的静态内容。若要为 ASP.NET 页支持此模型,可以使用 <b>Page</b> 指令设置 <b>Culture</b> 属性。所有与区域设置相关的方法都获取 <b>Culture</b> 属性值。
<p>
下面的示例说明如何为页的三个独立的本地化版本实现此方法。在每页上都设置了 <b>Culture</b> 属性以确定日期格式:
<p><Acme:TabControl runat="server">
<Tab Name="C#">
<%@Page Culture="de-DE" Language="C#" %>
...
<%=DateTime.Now.ToString("f", null)%>
</Tab>
<Tab Name="VB">
<%@Page Culture="de-DE" Language="VB" %>
...
<%=DateTime.Now.ToString("f", Nothing)%>
</Tab>
<Tab Name="JScript">
<%@Page Culture="de-DE" Language="JScript" %>
...
<%=DateTime.Now.ToString("f", null)%>
</Tab>
</Acme:TabControl><p>
<p>
<table>
<tr>
<td>
<Acme:LangSwitch runat="server">
<CsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize1/CS/news-en-us.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize1/news-en-us.src"
Icon="/quickstart/aspplus/samples/localize/flags/en-US.jpg"
Caption="C# news-en-us.aspx"
runat="server" />
</CsTemplate>
<VbTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize1/VB/news-en-us.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize1/news-en-us.src"
Icon="/quickstart/aspplus/samples/localize/flags/en-US.jpg"
Caption="VB news-en-us.aspx"
runat="server" />
</VbTemplate>
<JsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize1/JS/news-en-us.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize1/news-en-us.src"
Icon="/quickstart/aspplus/samples/localize/flags/en-US.jpg"
Caption="JScript news-en-us.aspx"
runat="server" />
</JsTemplate>
</Acme:LangSwitch>
</td>
<td>
<Acme:LangSwitch runat="server">
<CsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize1/CS/news-de.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize1/news-de.src"
Icon="/quickstart/aspplus/samples/localize/flags/de-DE.jpg"
Caption="C# news-de.aspx"
runat="server" />
</CsTemplate>
<VbTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize1/VB/news-de.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize1/news-de.src"
Icon="/quickstart/aspplus/samples/localize/flags/de-DE.jpg"
Caption="VB news-de.aspx"
runat="server" />
</VbTemplate>
<JsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize1/JS/news-de.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize1/news-de.src"
Icon="/quickstart/aspplus/samples/localize/flags/de-DE.jpg"
Caption="JScript news-de.aspx"
runat="server" />
</JsTemplate>
</Acme:LangSwitch>
</td>
<td>
<Acme:LangSwitch runat="server">
<CsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize1/CS/news-ja.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize1/news-ja.src"
Icon="/quickstart/aspplus/samples/localize/flags/ja-JP.jpg"
Caption="C# news-ja.aspx"
runat="server" />
</CsTemplate>
<VbTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize1/VB/news-ja.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize1/news-ja.src"
Icon="/quickstart/aspplus/samples/localize/flags/ja-JP.jpg"
Caption="VB news-ja.aspx"
runat="server" />
</VbTemplate>
<JsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize1/JS/news-ja.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize1/news-ja.src"
Icon="/quickstart/aspplus/samples/localize/flags/ja-JP.jpg"
Caption="JScript news-ja.aspx"
runat="server" />
</JsTemplate>
</Acme:LangSwitch>
</td>
</tr>
</table>
<!--BEGIN SECTION--> <br> <a name="embed"><br> <span class="subhead">本地化和控件</span>
<p>
在简单的“复制并翻译”方法上的一个改进是使用控件获取主要网页的区域性。在下面的示例中,标志图像和搜索条是控件。根据宿主网页的区域性,它们呈现不同的内容。为支持这一点,在每页中还添加了 <b>UICulture</b> 属性:
<p><Acme:TabControl runat="server">
<Tab Name="C#">
<%@Page Culture="de-DE" UICulture="de-DE" Language="C#" %>
</Tab>
<Tab Name="VB">
<%@Page Culture="de-DE" UICulture="de-DE" Language="VB" %>
</Tab>
<Tab Name="JScript">
<%@Page Culture="de-DE" UICulture="de-DE" Language="JScript" %>
</Tab>
</Acme:TabControl><p>
<p>
例如,标志控件 (Flag.ascx) 仅使用区域性名称生成 <b><img></b> 标记的 <b>Src</b> 属性:
<p><Acme:TabControl runat="server">
<Tab Name="C#">
<%@Import Namespace="System.Globalization"%>
<script runat="Server" Language="C#">
override protected void Render(HtmlTextWriter writer) {
FlagImage.Src = "../../flags/" + CultureInfo.CurrentCulture + ".jpg";
FlagImage.Alt = CultureInfo.CurrentCulture.NativeName;
base.Render(writer);
}
</script>
<img runat="server" id="FlagImage" />
</Tab>
<Tab Name="VB">
<%@Import Namespace="System.Globalization"%>
<script runat="Server" Language="VB">
Overrides Protected Sub Render(writer As HtmlTextWriter)
FlagImage.Src = "../../flags/" & CultureInfo.CurrentCulture.Name & ".jpg"
FlagImage.Alt = CultureInfo.CurrentCulture.NativeName
MyBase.Render(writer)
End Sub
</script>
<img runat="server" id="FlagImage" />
</Tab>
<Tab Name="JScript">
<%@Import Namespace="System.Globalization"%>
<script runat="Server" Language="JScript">
override protected function Render(writer:HtmlTextWriter) : void {
FlagImage.Src = "../../flags/" + CultureInfo.CurrentCulture + ".jpg";
FlagImage.Alt = CultureInfo.CurrentCulture.NativeName;
base.Render(writer);
}
</script>
<img runat="server" id="FlagImage" />
</Tab>
</Acme:TabControl><p>
<p>
搜索控件 (Search.ascx) 使用 switch 语句初始化标签和文本框的值,而区域性名称也可以是数据库查询的参数:
<p><Acme:TabControl runat="server">
<Tab Name="C#">
void LocalizeSearchText() {
switch(String.Intern(CultureInfo.CurrentUICulture.Name)) {
case "en-US":
SearchText.Text = "Clinton";
SearchButton.Text = "Search";
break;
case "de-DE":
...
case "ja-JP":
...
default:
SearchButton.Text = "Search";
}
}
</Tab>
<Tab Name="VB">
Sub LocalizeSearchText()
Select Case String.Intern(CultureInfo.CurrentUICulture.Name))
Case "en-US"
SearchText.Text = "Clinton"
SearchButton.Text = "Search"
Case "de-DE"
...
Case "ja-JP"
...
Case Else
SearchButton.Text = "Search"
End Select
End Sub
</Tab>
<Tab Name="JScript">
public function LocalizeSearchText() : void {
switch(String.Intern(CultureInfo.CurrentUICulture.Name)) {
case "en-US":
SearchText.Text = "Clinton";
SearchButton.Text = "Search";
break;
case "de-DE":
...
case "ja-JP":
...
default:
SearchButton.Text = "Search";
}
}
</Tab>
</Acme:TabControl><p>
<table>
<tr>
<td>
<Acme:LangSwitch runat="server">
<CsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize2/CS/news-en-us.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize2/news-en-us.src"
Icon="/quickstart/aspplus/samples/localize/flags/en-US.jpg"
Caption="C# news-en-us.aspx"
runat="server" />
</CsTemplate>
<VbTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize2/VB/news-en-us.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize2/news-en-us.src"
Icon="/quickstart/aspplus/samples/localize/flags/en-US.jpg"
Caption="VB news-en-us.aspx"
runat="server" />
</VbTemplate>
<JsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize2/JS/news-en-us.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize2/news-en-us.src"
Icon="/quickstart/aspplus/samples/localize/flags/en-US.jpg"
Caption="JScript news-en-us.aspx"
runat="server" />
</JsTemplate>
</Acme:LangSwitch>
</td>
<td>
<Acme:LangSwitch runat="server">
<CsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize2/CS/news-de.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize2/news-de.src"
Icon="/quickstart/aspplus/samples/localize/flags/de-DE.jpg"
Caption="C# news-de.aspx"
runat="server" />
</CsTemplate>
<VbTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize2/VB/news-de.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize2/news-de.src"
Icon="/quickstart/aspplus/samples/localize/flags/de-DE.jpg"
Caption="VB news-de.aspx"
runat="server" />
</VbTemplate>
<JsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize2/JS/news-de.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize2/news-de.src"
Icon="/quickstart/aspplus/samples/localize/flags/de-DE.jpg"
Caption="JScript news-de.aspx"
runat="server" />
</JsTemplate>
</Acme:LangSwitch>
</td>
<td>
<Acme:LangSwitch runat="server">
<CsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize2/CS/news-ja.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize2/news-ja.src"
Icon="/quickstart/aspplus/samples/localize/flags/ja-JP.jpg"
Caption="C# news-ja.aspx"
runat="server" />
</CsTemplate>
<VbTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize2/VB/news-ja.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize2/news-ja.src"
Icon="/quickstart/aspplus/samples/localize/flags/ja-JP.jpg"
Caption="VB news-ja.aspx"
runat="server" />
</VbTemplate>
<JsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/localize/localize2/JS/news-ja.aspx"
ViewSource="/quickstart/aspplus/samples/localize/localize2/news-ja.src"
Icon="/quickstart/aspplus/samples/localize/flags/ja-JP.jpg"
Caption="JScript news-ja.aspx"
runat="server" />
</JsTemplate>
</Acme:LangSwitch>
</td>
</tr>
</table>
<h4><a name="summary">本节小结</a></h4>
<ol>
<li>ASP.NET 页支持 <b>Culture</b> 和 <b>UICulture</b> 属性以支持独立的本地化页。
<li>页上的控件可以获取页的区域性,并且可以呈现与区域性相关的内容。
</ol>
<!-- #include virtual="/quickstart/aspplus/include/footer.inc" -->
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -